2015-05-04 10 views
5

Ho un problema con lo wilcox.test in R. L'oggetto dati personali è una matrice in cui la prima colonna contiene un nome e tutte le altre colonne contengono una misura (espressione genica) , che è numerica:Test Wilcoxon in R - x deve essere numerico errore

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

per tutte le 2000 righe voglio verificare se v'è una differenza tra 2 parti date della matrice. Ho provato questo in 4 modi diversi:

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 

Così come si può vedere, solo se uso as.numeric() sui valori già numerici ottengo un risultato senza un messaggio di errore per il test di Wilcoxon, ma i risultati del tutto diversi da t.test risultati anche se non dovrebbero.

Verificare manualmente utilizzando uno strumento online indica che i risultati t.test utilizzando i valori as.numeric() sono errati.

Qualche suggerimento su come posso risolvere questo problema e fare il test Wilcoxon corretto? Se hai bisogno di maggiori informazioni fammi sapere.

+3

Io non so perché che stai ricevendo l'errore nel codice senza 'as.numeric', ma' as.numeric (myMatrix [i, 2: 87], myMatrix [I, 88: 98 ]) 'ignora il secondo argomento e restituisce lo stesso risultato di' as.numeric (myMatrix [i, 2: 87]) '. Sembra che tu voglia veramente 'as.numeric (myMatrix [i, 2: 87]), as.numeric (myMatrix [i, 88: 98])'. – eipi10

+0

Si può eseguire questo: 'colnames (myMatrix) [che (unlist (lapply (1: dim (myMatrix) [2], function (x) class (myMatrix [[x]]))) =" numerico ") ] ' Per verificare che tutti i cols siano numerici. – Nightwriter

+0

Grazie per il tuo aiuto! Quando si utilizza as.numeric() per entrambi gli argomenti, sembra funzionare! Esecuzione della linea Nightwriter restituisce tutti i nomi di colonna, anche se i valori all'interno sono mostrati numerici (vedere il mio primo esempio di codice sopra) – stefanie

risposta

1

In realtà myMatrix [i, 2:87] è ancora un data.frame. Vedi il seguente esempio.

> 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 

Cambiare i dati su una matrice reale risolverà il problema.

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