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


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)的p.value
Andrie

@Andrie:谢谢您的帮助,但这不是完整的代码,它是计算wilcox测试的函数的一部分,并且该代码为每个(xp,yp)产生不同的p值,这是a的链接。在我的部分数据中,您可以查看并检查我是否可以这样做,谢谢。 mediafire.com/?mnj26kp4bv5lcr5

1
对于需要重定向到其他链接的数据链接,我会非常怀疑,特别是当R提供了非常有用的dput()功能而无需这样做的时候。请提供可复制的示例以获取帮助。
Chase


@weblover当我建议(在tex.SE上)在此处询问您的统计问题时,我不知道您是否已在SO上被询问过。请删除您的两个帖子之一(可能是SO,因为这是一个统计问题)。
chl

Answers:


6

R帮助列表中有一个与此相关的主题;参见例如:http : //tolstoy.newcastle.edu.au/R/e8/help/09/12/9200.html

第一个建议是重复进行多次具有不同抖动的测试,然后将p值组合起来,以求平均值或最大值,从而获得总体p值。他们还建议可以使用简单的置换测试(在这两者中,这是我希望的)。看到问题,使用R中的哪个置换测试实现而不是t检验(配对和非配对)?有关排列测试的一些示例。

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


感谢您的答复,但我没明白我的意思,现在我该怎么办?更改测试,或根据某些内容调整数据,这是什么?
weblover 2011年

我将总结链接到的页面。
亚伦(Aaron)

3

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

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

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

因此:这样做是错误的


thnx为您回答,但是在这种情况下我该怎么办?
weblover 2011年

2

您已经问过几个人您现在应该做什么。我认为,您现在应该做的就是接受此处正确的p值为1.000。您的组没有不同。


你好,接受这个是否合理?因为所有组和子组一起比较时,都会给出相同的p值,这是不合逻辑的,因为在每种情况下,我都在测试1个变量,例如:test(“ Ph”,V1),因此p值不应该相同全部。有任何想法吗 ??
weblover 2011年

当然,这可能是合理的。p值为1表示两组尽可能接近。如果您几乎拥有所有联系,那可能是对的。
亚伦(Aaron)

@Aaron @Web这些数据(V1至V7)未绑定。在获得1的p值时一定发生了错误。将其与Wilcoxon符号秩检验进行比较时,我得到了0.036的很多p值。
whuber

OP仅发布数据的前几行;显然,必须继续保持联系,尽管随着数据达到小数点后六位,这似乎不太可能。因此,是的,虽然您指出的并非完全正确,但分析中似乎确实存在错误。
Aaron
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.