在进行 Wilcoxon 测试之前进行抖动是错误的吗?

机器算法验证 r 非参数 领带
2022-03-26 13:04:51

我写了一个脚本使用 测试数据wilcox.test,但是当我得到结果时,所有的 p 值都等于 1。我在一些网站上读到你可以在测试数据之前使用 jitter (以避免他们所说的关系),我这样做了,现在我有一个可以接受的结果。这样做有错吗?

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输出

3个回答

R-help 列表上有一个关于此的线程;例如:http ://tolstoy.newcastle.edu.au/R/e8/help/09/12/9200.html

第一个建议是使用不同的抖动多次重复测试,然后通过取平均值或最大值来组合 p 值以获得整体 p 值。他们还建议可以使用简单的置换测试来代替(在这两个测试中,这是我更喜欢的)。请参阅问题which permutation test implementation in R to use instead of t-tests (paired and non-paired)? 有关置换测试的一些示例。

在该线程的其他地方,Greg Snow 写道:向数据中添加随机噪声以避免警告就像从烟雾探测器中取出电池以使其静音,而不是调查导致警报响起的原因。(见http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9195.html

(免责声明:我没有检查代码,我的回答只是基于您的描述)

我有一种感觉,你想做的是一个非常糟糕的主意Wilcoxon 是等级的重采样(或随机化)检验。也就是说,它获取值的等级并将这些等级与所有可能的等级排列进行比较(例如,参见此处)。

因此,正如您意识到的那样,关系非常糟糕,因为您无法从中获得排名。但是,向您的数据添加随机噪声(抖动)将转换所有等级,使它们具有随机等级!也就是说,它会严重扭曲您的数据。

因此:这样做是错误的

你已经问了几个人你现在应该做什么。在我看来,你现在应该做的是接受这里正确的 p 值是 1.000。你的组没有区别。