2015-05-04 25 views
5

Ich habe ein Problem mit der wilcox.test in R. Mein Datenobjekt ist eine Matrix, in der die erste Spalte einen Namen enthält und alle anderen Spalten eine (Genexpression) Messung enthalten , die numerisch ist:Wilcoxon Test in R - x muss numerischer Fehler sein

str(myMatrix) 
'data.frame': 2000 obs. of 143 variables: 
$ precursor    : chr "name1" "name2" "name3" "name4" ... 
$ sample1: num 1.46e-03 2.64e+02 1.46e-03 1.46e-03 1.46e-03 ... 
$ sample2: num 1.46e-03 1.91e+02 1.46e-03 1.46e-03 1.46e-03 ... 
$ sample3: num 1.46e-03 3.01e+02 1.46e-03 1.46e-03 4.96 ... 

Für alle der 2000 Zeilen ich testen wollen, ob es einen Unterschied zwischen zwei bestimmten Teilen der Matrix ist. Ich habe versucht, dies in 4 verschiedenen Möglichkeiten:

wilcox.test(as.numeric(myMatrix[i,2:87],myMatrix[i,88:98]))$p.value 
#[1] 1.549484e-16 

wilcox.test(myMatrix[i,2:87],myMatrix[i,88:98])$p.value 
#Error in wilcox.test.default(myMatrix[i, 2:87], myMatrix[i, 88:98]) : 
#'x' must be numeric 

t.test(as.numeric(myMatrix[i,2:87],myMatrix[i,88:98]))$p.value 
#[1] 0.2973957 

t.test(myMatrix[i,2:87],myMatrix[i,88:98])$p.value 
#[1] 0.3098505 

So wie Sie nur sehen, wenn ich as.numeric() auf den bereits numerischen Werten verwende ich ein Ergebnis ohne eine Fehlermeldung für den Wilcoxon-Test erhalten, aber die Ergebnisse völlig unterscheiden sie von t.test Ergebnisse auch wenn sie nicht sollten.

Manuelle Überprüfung mit einem Online-Tool zeigt, dass die t.test Ergebnisse mit as.numeric() Werte falsch sind.

Haben Sie Vorschläge, wie ich dieses Problem lösen und den richtigen Wilcoxon-Test durchführen kann? Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.

+3

Ich bin mir nicht sicher, warum Sie den Fehler im Code sind immer ohne 'as.numeric', aber' as.numeric (myMatrix [i, 2: 87], myMatrix [i, 88: 98 ]) 'ignoriert das zweite Argument und gibt das gleiche Ergebnis zurück wie' as.numeric (myMatrix [i, 2: 87]) '. Es sieht so aus, als ob Sie tatsächlich 'as.numeric (myMatrix [i, 2: 87]), as.numeric (myMatrix [i, 88: 98])' wollen. – eipi10

+0

Können Sie dies ausführen: 'Colnames (myMatrix) [die (unlist (lapply (1: dim (myMatrix) [2], Funktion (x) Klasse (myMatrix [[x]])))! =" Numerisch ") ] ' Um zu überprüfen, dass alle Spalten numerisch sind. – Nightwriter

+0

Danke für Ihre Hilfe! Wenn Sie as.numeric() für beide Argumente verwenden, scheint es zu funktionieren! Running your line Nightwriter gibt alle Spaltennamen zurück, auch wenn die darin enthaltenen Werte numerisch sind (siehe mein erstes Codebeispiel oben) – stefanie

Antwort

1

Eigentlich ist myMatrix [i, 2:87] noch ein data.frame. Siehe das folgende Beispiel.

> myMat 
    fir X1 X2 X3 X4 
1 name1 1 5 9 13 
2 name2 2 6 10 14 
3 name3 3 7 11 15 
4 name4 4 8 12 16 
> class(myMat[1, 2:4]) 
[1] "data.frame" 
> as.numeric(myMat[1, 2:4]) 
[1] 1 5 9 

Ändern Sie Ihre Daten in eine echte Matrix löst Ihr Problem.

> myMat_01 <- myMat[, 2:5] 
> rownames(myMat_01) <- myMat$fir 
> myMat_01 <- as.matrix(myMat_01) 
> class(myMat_01[1, 2:4]) 
[1] "integer" 
Verwandte Themen