2015-05-04 17 views
5

Mam problem z wilcox.test w R. Mój obiekt danych to macierz, w której pierwsza kolumna zawiera nazwę, a wszystkie pozostałe kolumny zawierają pomiar (wyrażenie genu) , która jest liczbą:Test Wilcoxona w R-x musi być błędem numerycznym

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 ... 

Dla wszystkich rzędach 2000 roku chcą aby sprawdzić, czy istnieje różnica pomiędzy 2 określonych częściach matrycy. Próbowałem to na 4 różne sposoby:

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 

Więc jak widać, tylko wtedy, gdy używam as.numeric() na wartościach już numerycznych dostaję wynik bez komunikatu o błędzie dla testu Wilcoxona, ale wyniki całkowicie różnią się od t.test wyników, nawet jeśli nie powinny.

Ręczne sprawdzenie za pomocą narzędzia online pokazuje, że wyniki t.test przy użyciu wartości as.numeric() są nieprawidłowe.

Wszelkie sugestie dotyczące tego, jak rozwiązać ten problem i wykonać prawidłowy test Wilcoxon? Jeśli potrzebujesz więcej informacji, daj mi znać.

+3

Nie jestem pewien, dlaczego jesteś uzyskiwanie błąd w kodzie bez 'as.numeric', ale' as.numeric (o nazwie myMatrix [i, 2: 87], o nazwie myMatrix [I, 88: 98 ]) 'ignoruje drugi argument i zwraca ten sam wynik co' as.numeric (myMatrix [i, 2: 87]) '. Wygląda na to, że faktycznie chcesz 'as.numeric (myMatrix [i, 2: 87]), jak w postaci liczbowej (myMatrix [i, 88: 98])'. – eipi10

+0

Możesz uruchomić to: 'colnames (myMatrix) [który (unlist (lapply (1: dim (myMatrix) [2], function (x) class (myMatrix [[x]])))! =" Numeric ") ] ' Aby sprawdzić, czy wszystkie kolumny są numeryczne. – Nightwriter

+0

Dzięki za pomoc! Podczas używania as.numeric() dla obu argumentów, wydaje się działać! Uruchamianie twojej linii Nightwriter zwraca wszystkie nazwy kolumn, nawet jeśli wartości wewnątrz są wyświetlane liczbowo (zobacz mój pierwszy przykład kodu powyżej) – stefanie

Odpowiedz

1

W rzeczywistości myMatrix [i, 2:87] nadal jest data.frame. Zobacz następujący przykład.

> 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 

Zmień dane na prawdziwą Matrix rozwiąże 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" 
Powiązane problemy