2016-07-07 2 views
1

Я делаю PCA. Вот код дляR code automation

кампании с такой же
### Read .csv file ##### 
    data<-read.csv(file.choose(),header=T,sep=",") 
    names(data) 
    data$qcountry 
#### for the country-ARGENTINA####### 
ar_data<-data[which(data$qcountry=="ar"),] 
ar_data$qcountry<-NULL 
names(ar_data) 
names(ar_data)<-c("01_insufficient_efficacy","02_safety_issues","03_inconvenient_dosage_regimen","04_price_issues" 
        ,"05_not_reimbursed","06_not_inculed_govt","07_insuficient_clinicaldata","08_previously_used","09_prescription_opted_for_some_patients","10_scientific_info_NA","12_involved_in_diff_clinical_trial" 
        ,"13_patient_inappropriate_for_TT","14_patient_inappropriate_Erb","16_patient_over_65","17_Erbitux_alternative","95_Others") 

     names(ar_data) 
     ar_data_wdt_zero_columns<-ar_data[, colSums(ar_data != 0) > 0] 
####Testing multicollinearity#### 
     vif(ar_data_wdt_zero_columns) 

#### Testing appropriatness of PCA #### 
      KMO(ar_data_wdt_zero_columns) 
      cortest.bartlett(ar_data_wdt_zero_columns) 

    #### Run PCA #### 
     pca<-prcomp(ar_data_wdt_zero_columns,center=F,scale=F) 
     summary(pca) 

#### Compute the loadings for deciding the top4 most correlated variables### 
     load<-pca$rotation 
     write.csv(load,"loadings_argentina_2015_Q4.csv") 

я показал здесь в одной страны, я сделал это для 9countries. Для каждой страны я должен запустить этот код. Я уверен, что должен быть более простой способ автоматизировать этот код. Пожалуйста, предложите !! Спасибо!

ответ

1

Да, это выполнимо для каждой страны. Вы можете сделать свою пользовательскую функцию, которая принимает соответствующие параметры, например. название страны и данные. Вы делаете магию внутри и возвращаете соответствующий объект (или нет). Передайте эту магию обработанным данным, которые вы импортируете и делаете довольно один раз. Код ниже не проверен, но вы должны начать.

Несколько комментариев. Не используйте file.choose(), так как он прерывает ваш код через 3 дня. Как узнать, какой файл выбрать? Почему каждый раз, когда вы запускаете скрипт, когда вы можете заставить скрипт работать для вас? Будь ленив в этом смысле.

У вас много шума в вашем скрипте. Придерживайтесь какого-то стиля и не оставляйте в случайных строках, которые вы пробуете для «shits and higgles». Используйте пробелы в коде, по крайней мере.

Будьте более изобретательны в выборе имен объектов. Сначала попробуйте имя, если, возможно, объект уже существует в форме базовой функции, например. load.

myPCA <- function(my.country, my.data) { 

    ar_data <- data[data$qcountry %in% "ar", ] 
    ar_data$qcountry <- NULL 

    ar_data_wdt_zero_columns <- ar_data[, colSums(ar_data != 0) > 0] 

    #### Run PCA #### 
    pca <- prcomp(ar_data_wdt_zero_columns, center = FALSE, scale = FALSE) 

    #### Compute the loadings for deciding the top4 most correlated variables### 
    write.csv(pca$rotation, paste("loadings_", my.country, ".csv", sep = "")) # may need tweaking 

    return(list(pca = pca, vif = vif(ar_data_wdt_zero_columns), 
       kmo = KMO(ar_data_wdt_zero_columns), correlation = cortest.bartlett(ar_data_wdt_zero_columns)) 
} 

data <- read.csv("relative_link_to_file", header = TRUE, sep = ",") 
names(data) <- c("01_insufficient_efficacy","02_safety_issues","03_inconvenient_dosage_regimen","04_price_issues" 
        ,"05_not_reimbursed","06_not_inculed_govt","07_insuficient_clinicaldata","08_previously_used","09_prescription_opted_for_some_patients","10_scientific_info_NA","12_involved_in_diff_clinical_trial" 
        ,"13_patient_inappropriate_for_TT","14_patient_inappropriate_Erb","16_patient_over_65","17_Erbitux_alternative","95_Others") 

sapply(data$qcountry, FUN = myPCA) 
+0

Спасибо! Еще одна вещь, я должен спросить, что, если я хочу прочитать папку из разных файлов, а затем запустить PCA в этих файлах по стране. – Kavya

+0

@Kavya загляните в функцию 'list.files()'. Этот вопрос задан и много раз ответил на СО. –

+0

Правильно, но я не могу использовать выше функцию (myPCA) для того же. – Kavya