Czy źle jest wstrząsać przed wykonaniem testu Wilcoxona?

9

Napisałem skrypt testujący dane przy użyciu wilcox.test, ale kiedy otrzymałem wyniki, wszystkie wartości p były równe 1. Czytam na niektórych stronach internetowych, że możesz użyć jittera przed przetestowaniem danych (aby uniknąć powiązań, jak powiedzieli), Zrobiłem to i teraz mam akceptowalny wynik. Czy to źle?

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


To jest wynik działania 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")

Dane są bardzo duże i to jest wątek, który zacząłem i powiedzieli mi, że może to być złe

Uwaga To pytanie pochodzi od tex.SE: generowanie danych wyjściowych PDFcontain R w tabeli lateksowej

weblover
źródło
2
Nie mówisz nam, jakie są twoje dane, ale byłbym bardzo podejrzliwy wobec jakiejkolwiek procedury, która dodaje losowy szum do danych, a następnie przeprowadza na nich test statystyczny. Ponadto, czy jesteś pewien, że Twój kod działa tak, jak myślisz? Mój odczyt jest taki, że pomimo twojej pętli zwróci pojedynczą wartość p - wartość x = y = {lastvaluof} (uni)
Andrie
@Andrie: dziękuję za pomoc, ale to nie jest kompletny kod, to część funkcji, która oblicza test Wilcoxa, i kod wytwarzający różne wartości wartości p dla każdego (xp, yp), to link do część moich danych, możesz je wyświetlić i sprawdzić, czy mogę to zrobić, z góry dzięki. mediafire.com/?mnj26kp4bv5lcr5
1
Byłbym bardzo podejrzliwy wobec linków do danych, które wymagają przekierowania do innych linków, szczególnie gdy R zapewnia bardzo przydatną dput()funkcję, która eliminuje jakąkolwiek potrzebę robienia tego. Podaj powtarzalny przykład, aby uzyskać pomoc.
Chase
skrzyżowane posty: stackoverflow.com/questions/5554037/…
Chase
@weblover Kiedy zasugerowałem (na tex.SE), aby zadać pytanie dotyczące statystyk tutaj, nie wiedziałem, że już je zadałeś na SO. Usuń jeden ze swoich dwóch postów (prawdopodobnie na SO, ponieważ jest to pytanie dotyczące statystyk).
Chl 5'11

Odpowiedzi:

6

Jest na ten temat wątek na liście pomocy R; patrz na przykład: http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9200.html

Pierwszą sugestią jest powtórzenie testu wiele razy z różnymi drganiami, a następnie połączenie wartości p, aby uzyskać ogólną wartość p, przyjmując średnią lub maksimum. Sugerują również, że zamiast tego można zastosować bezpośredni test permutacji (z tych dwóch, to wolałbym). Zobacz pytanie Jakiej implementacji testu permutacji w R użyć zamiast testów t (sparowanych i niesparowanych)? dla niektórych przykładów testów permutacyjnych.

W innym miejscu tego wątku Greg Snow pisze: Dodanie losowego szumu do danych w celu uniknięcia ostrzeżenia jest jak wyjęcie baterii z czujki dymu w celu ich wyciszenia, a nie zbadanie przyczyny alarmu. (Zobacz http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9195.html )

Aaron opuścił Stack Overflow
źródło
dzięki za odpowiedź, ale nie rozumiem, co mam teraz zrobić? zmień test lub dostosuj dane na podstawie czegoś, a co to jest?
weblover
Podsumuję stronę, do której linkuję.
Aaron opuścił Stack Overflow
3

(wyłączenie odpowiedzialności: Nie sprawdziłem kodu, moja odpowiedź jest oparta tylko na twoim opisie)

Mam wrażenie, że to, co chcesz zrobić, to naprawdę zły pomysł . Wilcoxon to test ponownego próbkowania (lub randomizacji) dla rang. Oznacza to, że bierze rangę wartości i porównuje te rangi ze wszystkimi możliwymi kombinacjami rang (patrz np. Tutaj ).

Jak więc sobie uświadomiłeś, więzi są dość złe, ponieważ nie dostajesz od nich rang. Jednak dodanie losowego szumu (fluktuacji) do danych przekształci wszystkie rangi, dzięki czemu będą miały losowe rangi! Oznacza to, że poważnie zniekształca dane.

Dlatego: Jest to niewłaściwe .

Henrik
źródło
dziękuję za odpowiedź, ale co powinienem zrobić w tym przypadku?
weblover
2

Zapytałeś kilka osób, co powinieneś teraz zrobić. Moim zdaniem, powinieneś teraz zaakceptować, że właściwa wartość p wynosi tutaj 1.000. Twoje grupy się nie różnią.

Peter Flom
źródło
cześć, czy racjonalne jest zaakceptowanie tego? ponieważ wszystkie grupy i podgrupy w porównaniu razem dają tę samą wartość p, nie jest to logiczne, ponieważ w każdym przypadku testuję 1 zmienną, np .: test („Ph”, V1), więc wartość p nie powinna być taka sama dla wszystko . jakieś pomysły ??
weblover
Jasne, to może być racjonalne. Wartość p wynosząca 1 oznacza, że ​​dwie grupy są jak najbardziej zbliżone do siebie. Jeśli masz prawie wszystkie więzi, może to być prawda.
Aaron opuścił Stack Overflow
@Aaron @Web Te dane (od V1 do V7) nie są powiązane. Gdzieś musiał zostać popełniony błąd w uzyskiwaniu wartości p wynoszących 1. Dostaję dużo wartości p wynoszących 0,036, porównując je z testem rang Wilcoxona ze znakiem.
whuber
PO opublikował tylko kilka pierwszych wierszy danych; najwyraźniej muszą istnieć dalsze powiązania, choć wydaje się to mało prawdopodobne, ponieważ dane są podawane z dokładnością do sześciu miejsc po przecinku. Tak, wydaje się, że w analizie może wystąpić błąd, choć nie dokładnie ten, na który zwracasz uwagę.
Aaron opuścił Przepełnienie Stosu