2016-07-07 18 views
1

Ich mache PCA. Hier ist der Code für die gleichgeschlechtlichenR-Code Automatisierung

### 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") 

Ich habe hier für die ein Land gezeigt, ich habe dies für 9countries getan. Für jedes Land muss ich diesen Code ausführen. Ich bin mir sicher, dass es einen einfacheren Weg geben muss, diesen Code zu automatisieren. Bitte vorschlagen !! Danke !!

Antwort

1

Ja, das ist machbar für jedes Land. Sie können Ihre benutzerdefinierte Funktion vornehmen, die geeignete Parameter, z. Name und Daten des Landes. Du machst die Magie im Inneren und gibst ein passendes Objekt zurück (oder nicht). Übergeben Sie diese Magie an verarbeitete Daten, die Sie importieren und nur einmal schön machen. Der folgende Code wird nicht getestet, sollte Ihnen aber helfen.

Ein paar Kommentare. Verwenden Sie nicht file.choose(), da es Ihren Code 3 Tage lang bricht. Woher weißt du, welche Datei zu wählen? Warum sollten Sie jedes Mal klicken, wenn Sie das Skript ausführen, wenn Sie das Skript für Sie arbeiten lassen? Sei in diesem Sinne faul.

Sie haben eine Menge Unordnung in Ihrem Skript. Halten Sie sich an etwas Stil und lassen Sie nicht in zufälligen Linien, die Sie für "Scheiße und Gekicher" ausprobieren. Verwenden Sie mindestens Leerzeichen in Ihrem Code.

Seien Sie fantasievoller in wählen Sie Objektnamen. Versuchen Sie den Namen zuerst aus, wenn das Objekt möglicherweise bereits in Form einer Basisfunktion existiert, z. 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

Danke !! Noch eine Sache, die ich fragen muss, wenn ich einen Ordner von verschiedenen Dateien lesen und dann PCA für diese Dateien auf Länderebene ausführen möchte. – Kavya

+0

@Kavya Blick in 'list.files()' -Funktion. Diese Frage wurde SO oft gestellt und beantwortet. –

+0

Das ist korrekt, aber ich kann die obige Funktion (myPCA) nicht für dasselbe verwenden. – Kavya