2016-06-22 12 views
0

Ich versuche, ein PCA auf den „Ausbildung1“ Datensatz laufen unten erstellt:Hauptkomponentenanalyse Fehler in R

library(AppliedPredictiveModeling); data(AlzheimerDisease); library(caret) 

adData <- data.frame(diagnosis, predictors) 
inTrain <- createDataPartition(y = adData$diagnosis, p = .75)[[1]] 
training <- adData[inTrain, ] 
keep <- subset(data.frame(x = substr(as.character(colnames(training)), 1, 2), y = c(1:ncol(training))), x == "IL") 
training1 <- cbind(training[, c(keep[1, 2]:keep[nrow(keep), 2])], training[c("diagnosis")]) 

Dann, als ich laufen die folgende Funktion:

preProc <- preProcess(log10(training1[, -13]+1), method = "pca", pcaComp = 2) 

Ich bekomme folgenden Fehler:

Ich habe aber dann die folgenden zwei Funktionen ausgeführt, um zu beweisen, dass Standardabweichungen können berechnet werden für die beiden Variablen heißt es, dass es sie nicht berechnen kann:

sd(training1$IL_1alpha) 
[1] 0.4056147 
sd(training1$IL_3) 
[1] 0.5235212 

Und dann die folgende Funktion ausführen zu beweisen, dass ich keine Variablen mit einer Null-Varianz.

nsv <- nearZeroVar(training1, saveMetrics = TRUE) 
> print(nsv) 
       freqRatio percentUnique zeroVar nzv 
IL_11   1.250000 29.4820717 FALSE FALSE 
IL_13   1.052632  6.7729084 FALSE FALSE 
IL_16   1.117647 21.9123506 FALSE FALSE 
IL_17E   1.238095 16.7330677 FALSE FALSE 
IL_1alpha  1.208333 23.1075697 FALSE FALSE 
IL_3   1.066667 24.7011952 FALSE FALSE 
IL_4   1.315789 19.1235060 FALSE FALSE 
IL_5   1.000000 19.5219124 FALSE FALSE 
IL_6   1.000000 20.3187251 FALSE FALSE 
IL_6_Receptor 1.041667 21.5139442 FALSE FALSE 
IL_7   1.611111 18.7250996 FALSE FALSE 
IL_8   1.000000 22.3107570 FALSE FALSE 
diagnosis  2.637681  0.7968127 FALSE FALSE 

Es scheint, wie andere Menschen die Probleme mit der PCA in R waren um Null Varianz Spalten, aber da ich beweisen kann, dass ich nicht über diese Frage ist hier, irgendwelche Ideen, was das Problem verursachen?

Antwort

2

Sorry, ich habe nicht die rep zu kommentieren, um eine Antwort zu veröffentlichen, aber nach dem Code ausgeführt wird, insbesondere diese Zeile:

log10(training1[, -13]+1)  

kehrt NaN Werte in einigen Spalten (IL_1alpha und IL_3 tatsächlich):

Warning messages: 
1: In lapply(X = x, FUN = .Generic, ...) : NaNs produced 

So scheint das die Quelle des Fehlers zu sein. Vielleicht solltest du keine negativen Zahlen notieren und stattdessen an eine andere Transformation denken (oder ob es überhaupt notwendig ist)?