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
r
nonparametric
ties
weblover
źródło
źródło
dput()
funkcję, która eliminuje jakąkolwiek potrzebę robienia tego. Podaj powtarzalny przykład, aby uzyskać pomoc.Odpowiedzi:
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 )
źródło
(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 .
źródło
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ą.
źródło