È sbagliato il jitter prima di eseguire il test Wilcoxon?


9

Ho scritto uno script per testare i dati utilizzando il wilcox.test, ma quando ho ottenuto i risultati, tutti i valori p erano pari a 1. Ho letto in alcuni siti Web che potresti usare jitter prima di testare i dati (per evitare legami come hanno detto), L'ho fatto e ora ho un risultato accettabile. È sbagliato farlo?

test<- function(column,datacol){
    library(ggplot2)
t=read.table("data.txt", stringsAsFactors=FALSE)
uni=unique(c(t$V9))
    for (xp in uni) { 
          for(yp in uni) {
            testx <- subset(t, V9==xp)
            testy <- subset(t, V9==yp)
            zz <- wilcox.test(testx[[datacol]],jitter(testy[[datacol]]))
            p.value <- zz$p.value
          }
        }
}


Questo è l'output di dput(head(t))

structure(list(V1 = c(0.268912,
0.314681, 0.347078, 0.286945, 
0.39562, 0.282182), V2 = c(0.158921, 0.210526, 0.262024, 0.322006, 
0.133417, 0.283025), V3 = c(0.214082, 0.166895, 0.132547, 0.147361, 
0.09174, 0.169093), V4 = c(0.358085, 0.307898, 0.258352, 0.243688, 
0.379224, 0.2657), V5= c(-0.142223, 0.010895, 0.14655, 
0.08152, 0.02116, 0.030083), V6 = c(0.096408, -0.091896,

-0.331229, -0.446603, -0.088493, -0.262037), V7` = c(1.680946, 
1.649559, 1.534401, 1.130529, 3.441356, 1.211815), V8 = c("NC_000834",  "NC_000844",
"NC_000845", "NC_000846", "NC_000857",
"NC_000860" ), V9 = c("Chordata",
"Arthropoda", "Chordata", "Chordata", 
"Arthropoda", "Chordata"), V10 =
c("???:???", "Diplostraca", 
"???:???", "Rheiformes", "Diptera",
"Salmoniformes"), V11 = c("???:???",
"Branchiopoda", "Mammalia", "Aves",
"Insecta", "Actinopterygii" )), .Names
= c("V1", "V2", "V3", "V4", "V5", "V6",  "V7",
"V8", "V9", "V10",
"V11"), row.names = c(NA,  6L),
class = "data.frame")

I dati sono molto grandi, e questo è il thread che ho iniziato e mi hanno detto che potrebbe essere sbagliato farlo

Nota Questa domanda proviene da tex.SE: generazione di output PDFcontain R all'interno della tabella di lattice


2
Non ci dici quali sono i tuoi dati, ma sarei molto sospettoso di qualsiasi procedura che aggiunga rumore casuale ai dati e quindi esegua un test statistico su di essi. Inoltre, sei sicuro che il tuo codice faccia quello che pensi che faccia? La mia lettura è che, nonostante il tuo ciclo, restituirà un singolo valore p - quello di x = y = {lastvaluof} (uni)
Andrie

@Andrie: grazie per il tuo aiuto, ma non è il codice completo, fa parte della funzione che calcola il test wilcox e il codice produce valori diversi di p-value per ciascuno (xp, yp), questo è un link di un parte dei miei dati, puoi visualizzarli e verificare se posso farlo, grazie in anticipo. mediafire.com/?mnj26kp4bv5lcr5

1
Sarei molto sospettoso dei collegamenti a dati che richiedono il reindirizzamento ad altri collegamenti, specialmente quando R fornisce l'utilissimo dput() funzione che elimina qualsiasi necessità di farlo. Fornisci un esempio riproducibile per ricevere assistenza.
Insegui il


@weblover Quando ho suggerito (su tex.SE) di porre qui la tua domanda sulle statistiche, non sapevo che tu lo avessi già fatto su SO. Elimina uno dei tuoi due post (probabilmente su SO, dato che si tratta di una domanda sulle statistiche).
chl

Risposte:


6

C'è un thread nell'elenco R-help su questo; vedi ad esempio: http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9200.html

Il primo suggerimento è quello di ripetere il test un gran numero di volte con diversi jitter e quindi combinare i valori p per ottenere un valore p complessivo, prendendo una media o un massimo. Suggeriscono anche che potrebbe essere usato un semplice test di permutazione (dei due, è quello che preferirei). Vedi la domanda Quale implementazione del test di permutazione in R usare al posto dei test t (accoppiati e non accoppiati)? per alcuni esempi di test di permutazione.

Altrove in quel thread, Greg Snow scrive: Aggiungere rumore casuale ai dati per evitare un avvertimento è come rimuovere le batterie da un rilevatore di fumo per silenziarlo piuttosto che indagare su ciò che sta causando l'allarme. (Vedi http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9195.html )


grazie per la tua risposta, ma non ho capito il punto, cosa devo fare ora? cambia il test o regola i dati in base a qualcosa e cos'è questo ???
weblover,

Riassumo la pagina a cui mi sono collegato.
Aaron ha lasciato Stack Overflow il

3

(dichiarazione di non responsabilità: non ho controllato il codice, la mia risposta si basa solo sulla tua descrizione)

Ho la sensazione che quello che vuoi fare sia una pessima idea . Wilcoxon è un test di ricampionamento (o randomizzazione) per gradi. Cioè, prende il rango dei valori e confronta questi ranghi con tutte le possibili permutazioni dei ranghi (vedi ad esempio, qui ).

Quindi, come hai capito, i legami sono piuttosto cattivi in ​​quanto non ne ottieni gradi. Tuttavia, l'aggiunta di rumore casuale (jitter) ai tuoi dati trasformerà tutti i ranghi, in modo che abbiano ranghi casuali! Cioè, distorce gravemente i tuoi dati.

Pertanto: è sbagliato farlo .


grazie per la tua risposta, ma cosa devo fare in questo caso ??
weblover

2

Hai chiesto a molte persone cosa dovresti fare ora. A mio avviso, ciò che dovresti fare ora è accettare che il valore p corretto qui sia 1.000. I tuoi gruppi non differiscono.


ciao, è razionale accettarlo ?? perché tutti i gruppi e sottogruppi, se confrontati insieme, danno lo stesso valore p, non è logico perché in ogni caso sto testando 1 variabile, ad esempio: test ("Ph", V1), quindi il valore p non dovrebbe essere lo stesso per tutti . qualche idea ??
weblover,

Certo, potrebbe essere razionale. Un valore p di 1 significa che i due gruppi sono il più vicino possibile allo stesso. Se hai quasi tutti i legami, questo potrebbe essere vero.
Aaron ha lasciato Stack Overflow il

@Aaron @Web Questi dati (da V1 a V7) non sono collegati. Un errore deve essere stato fatto da qualche parte nell'ottenere valori di p di 1. Ottengo molti valori di p di 0,036 quando li paragono con il test di ranghi firmati Wilcoxon.
whuber

L'OP ha pubblicato solo le prime poche righe dei dati; apparentemente ci devono essere ulteriori legami, sebbene ciò sembri improbabile poiché i dati arrivano a sei cifre decimali. Quindi sì, sembra che potrebbe esserci un errore nell'analisi, anche se non esattamente quello che fai notare.
Aaron ha lasciato Stack Overflow il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.