Неверно ли дрожать перед выполнением теста Уилкоксона?


9

Я написал скрипт для проверки данных, используя wilcox.test, но когда я получил результаты, все значения p были равны 1. На некоторых веб-сайтах я читал, что перед тестированием данных можно использовать джиттер (чтобы избежать связей, как они сказали), Я сделал это, и теперь у меня есть приемлемый результат. Это неправильно делать это?

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


Это вывод 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")

Данные очень большие, и это тема, которую я начал, и они сказали мне, что это может быть неправильно

Примечание. Этот вопрос возник из tex.SE: создание вывода PDFcontain R внутри латексной таблицы.


2
Вы не сообщаете нам, каковы ваши данные, но я очень подозрительно отношусь к любой процедуре, которая добавляет случайный шум к данным, а затем запускает статистический тест для них. Кроме того, вы уверены, что ваш код делает то, что вы думаете, что он делает? Мое чтение таково, что, несмотря на ваш цикл, он вернет одно значение p.value - x = y = {lastvaluof} (uni)
Andrie

@Andrie: спасибо за вашу помощь, но это не полный код, это часть функции, которая вычисляет тест Уилкокса, и код, выдающий различные значения p-значения для каждого (xp, yp), это ссылка часть моих данных, вы можете просмотреть и проверить, могу ли я это сделать, заранее спасибо. mediafire.com/?mnj26kp4bv5lcr5

1
Я бы очень подозрительно относился к ссылкам на данные, которые требуют перенаправления на другие ссылки, особенно когда R предоставляет очень полезную dput()функцию, которая устраняет необходимость в этом. Пожалуйста, приведите воспроизводимый пример для получения помощи.
Погоня


@weblover Когда я предложил (на tex.SE) задать вопрос о вашей статистике здесь, я не знал, что вы уже спрашивали о SO. Пожалуйста, удалите одно из ваших двух сообщений (возможно, на SO, так как это вопрос статистики).
хл

Ответы:


6

В списке R-help есть ветка об этом; см. например: http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9200.html

Первое предложение - повторить тест большое количество раз с различным джиттером, а затем объединить p-значения, чтобы получить общее p-значение, взяв среднее или максимальное значение. Они также предполагают, что вместо этого можно использовать простой тест перестановки (из двух, это то, что я бы предпочел). См. Вопрос Какую реализацию теста перестановки в R использовать вместо t-тестов (парных и непарных)? для некоторых примеров тестов перестановки.

В другом месте этой темы Грег Сноу пишет: «Добавление случайных шумов к данным во избежание предупреждения - это все равно, что извлечь батареи из детектора дыма, чтобы заставить его замолчать, вместо того, чтобы исследовать, что вызывает срабатывание будильника». (См. Http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9195.html ).


спасибо за ваш ответ, но я не понял, что мне теперь делать? изменить тест или скорректировать данные на основе чего-либо, и что это за что-то ???
weblover

Я подведу итог страницы, на которую я ссылался.
Аарон оставил переполнение стека

3

(отказ от ответственности: я не проверял код, мой ответ основан только на вашем описании)

У меня такое ощущение, что то, что ты хочешь сделать - это действительно плохая идея . Уилкоксон - это критерий повторной выборки (или рандомизации) для рангов. То есть он берет ранг значений и сравнивает эти ранги со всеми возможными перестановками рангов (см., Например, здесь ).

Итак, как вы поняли, связи довольно плохие, потому что вы не получаете рангов из них. Однако добавление случайного шума (джиттера) к вашим данным преобразует все ранги, так что они имеют случайные ранги! То есть это сильно искажает ваши данные.

Поэтому: это неправильно .


Спасибо за ответ, но что мне делать в этом случае?
weblover

2

Вы спросили нескольких людей, что вы должны делать сейчас. На мой взгляд, то, что вы должны сделать сейчас, это принять то, что правильное значение p здесь составляет 1.000. Ваши группы не отличаются.


привет, разумно ли это принять ?? поскольку все группы и подгруппы при сравнении вместе дают одно и то же значение p, это не логично, потому что в каждом случае я тестирую 1 переменную, например: test ("Ph", V1), поэтому значение p не должно быть одинаковым для все . Любые идеи ??
weblover

Конечно, это может быть рациональным. Значение p, равное 1, означает, что две группы максимально близки к одинаковым. Если у вас есть почти все связи, это может быть правдой.
Аарон оставил переполнение стека

@Aaron @Web Эти данные (от V1 до V7) не связаны. Должно быть, где-то была допущена ошибка при получении значений p, равных 1. Я получаю множество значений p, равных 0,036, при сравнении их с тестом рангового ранга Уилкоксона.
whuber

ОП опубликовал только первые несколько строк данных; очевидно, что в дальнейшем должны быть связи, хотя это кажется маловероятным, поскольку данные идут до шести десятичных знаков. Так что да, похоже, что в анализе может быть ошибка, но не совсем та, на которую вы указали.
Аарон оставил переполнение стека
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.