Ist es falsch, vor dem Wilcoxon-Test zu zittern?


9

Ich habe ein Skript geschrieben, das die Daten mit dem testet wilcox.test, aber als ich die Ergebnisse erhielt, waren alle p-Werte gleich 1. Ich habe auf einigen Websites gelesen, dass Sie vor dem Testen der Daten Jitter verwenden könnten (um Verbindungen zu vermeiden, wie sie sagten). Ich habe das getan und jetzt habe ich ein akzeptables Ergebnis. Ist es falsch das zu tun?

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


Dies ist die Ausgabe von 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")

Die Daten sind sehr groß, und das ist der Thread, den ich gestartet habe, und sie sagten mir, dass es falsch sein könnte, dies zu tun

Hinweis Diese Frage stammt von tex.SE: Generieren von PDFcontain R-Ausgaben in Latex-Tabellen


2
Sie sagen uns nicht, was Ihre Daten sind, aber ich wäre sehr misstrauisch gegenüber jedem Verfahren, das Daten zufälliges Rauschen hinzufügt und dann einen statistischen Test darauf durchführt. Sind Sie außerdem sicher, dass Ihr Code das tut, was Sie denken? Ich lese, dass trotz Ihrer Schleife ein einzelner p.-Wert zurückgegeben wird - der von x = y = {lastvaluof} (uni)
Andrie

@Andrie: Danke für deine Hilfe, aber das ist nicht der vollständige Code, das ist ein Teil der Funktion, die den Wilcox-Test berechnet, und der Code, der unterschiedliche Werte für den p-Wert für jeden (xp, yp) erzeugt, das ist ein Link von a Als Teil meiner Daten können Sie sie anzeigen und prüfen, ob ich dies tun kann. Vielen Dank im Voraus. mediafire.com/?mnj26kp4bv5lcr5

1
Ich wäre sehr misstrauisch gegenüber Links zu Daten, die auf andere Links umgeleitet werden müssen, insbesondere wenn R die sehr nützliche dput()Funktion bietet, die dies überflüssig macht. Bitte geben Sie ein reproduzierbares Beispiel an, um Unterstützung zu erhalten.
Chase


@weblover Als ich (auf tex.SE) vorschlug, Ihre Statistikfrage hier zu stellen, war mir nicht bewusst, dass Sie bereits auf SO gefragt haben. Bitte löschen Sie einen Ihrer beiden Beiträge (wahrscheinlich auf SO, da dies eine Statistikfrage ist).
Chl

Antworten:


6

Es gibt einen Thread auf der R-Hilfeliste darüber; Siehe zum Beispiel: http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9200.html

Der erste Vorschlag besteht darin, den Test viele Male mit unterschiedlichem Jittering zu wiederholen und dann die p-Werte zu kombinieren, um einen Gesamt-p-Wert zu erhalten, entweder indem ein Durchschnitt oder ein Maximum genommen wird. Sie schlagen auch vor, dass stattdessen ein einfacher Permutationstest verwendet werden könnte (von den beiden würde ich das vorziehen). Siehe die Frage Welche Permutationstestimplementierung in R soll anstelle von t-Tests (gepaart und nicht gepaart) verwendet werden? für einige Beispiele für Permutationstests.

An anderer Stelle in diesem Thread schreibt Greg Snow: Das Hinzufügen von zufälligem Rauschen zu Daten, um eine Warnung zu vermeiden, ist wie das Entfernen der Batterien aus einem Rauchmelder, um ihn zum Schweigen zu bringen, anstatt zu untersuchen, was den Alarm auslöst. (Siehe http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9195.html )


Vielen Dank für Ihre Antwort, aber ich habe nicht verstanden, was soll ich jetzt tun? Ändern Sie den Test oder passen Sie die Daten basierend auf etwas an, und was ist das für ein Ding ???
Weblover

Ich werde die Seite zusammenfassen, auf die ich verlinkt habe.
Aaron verließ Stack Overflow

3

(Haftungsausschluss: Ich habe den Code nicht überprüft, meine Antwort basiert nur auf Ihrer Beschreibung)

Ich habe das Gefühl, dass das, was Sie tun möchten, eine wirklich schlechte Idee ist . Wilcoxon ist ein Resampling- (oder Randomisierungs-) Test für Ränge. Das heißt, es nimmt den Rang der Werte und vergleicht diese Ränge mit allen möglichen Permutationen der Ränge (siehe z . B. hier ).

Wie Sie festgestellt haben, sind Krawatten also ziemlich schlecht, da Sie keine Ränge daraus ziehen. Wenn Sie Ihren Daten jedoch zufälliges Rauschen (Jitter) hinzufügen, werden alle Ränge so transformiert, dass sie zufällige Ränge haben! Das heißt, es verzerrt Ihre Daten erheblich.

Deshalb: Es ist falsch, dies zu tun .


Danke für deine Antwort, aber was soll ich in diesem Fall tun?
Weblover

2

Sie haben mehrere Personen gefragt, was Sie jetzt tun sollen. Meiner Ansicht nach sollten Sie jetzt akzeptieren, dass der richtige p-Wert hier 1.000 beträgt. Ihre Gruppen unterscheiden sich nicht.


Hallo, ist es vernünftig, das zu akzeptieren? Da alle Gruppen und Untergruppen im Vergleich denselben p-Wert ergeben, ist dies nicht logisch, da ich jeweils 1 Variable teste, z. B.: test ("Ph", V1), soo sollte der p-Wert nicht gleich sein alle . irgendwelche Ideen ??
Weblover

Sicher, es könnte rational sein. Ein p-Wert von 1 bedeutet, dass die beiden Gruppen so nahe wie möglich beieinander liegen. Wenn Sie fast alle Bindungen haben, könnte dies wahr sein.
Aaron verließ Stack Overflow

@Aaron @Web Diese Daten (V1 bis V7) sind nicht gebunden. Irgendwo muss ein Fehler beim Erhalten von p-Werten von 1 gemacht worden sein. Ich erhalte viele p-Werte von 0,036, wenn ich sie mit dem Wilcoxon-Signed-Rank-Test vergleiche.
whuber

Das OP hat nur die ersten Zeilen der Daten veröffentlicht. Anscheinend muss es weiter Verbindungen geben, obwohl dies unwahrscheinlich erscheint, da die Daten auf sechs Dezimalstellen gehen. Ja, es scheint, dass die Analyse einen Fehler enthält, wenn auch nicht genau den, auf den Sie hinweisen.
Aaron verließ Stack Overflow
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.