处理 agricolae Kruskal 测试中的关系,R
Posted
技术标签:
【中文标题】处理 agricolae Kruskal 测试中的关系,R【英文标题】:Dealing with ties in agricolae Kruskal test, R 【发布时间】:2016-11-05 16:49:33 【问题描述】:我正在使用agricolae
包对一些非正常数据运行kruskal.test
。一些组具有完全相同的值。 kruskal
测试不能很好地处理这个问题,我收到错误 Error in if (s) : missing value where TRUE/FALSE needed
。起初,我认为这是因为所有值都是 0,但是当我将它们都设为相同的大数(以进行测试)时,会出现相同的错误并且函数将 stop
(通过循环运行函数)并且不会t 评估第一个绑定变量之外的任何内容。
显然,在这些组上运行统计数据没有任何意义,因为不会有任何区别,但我使用agricolae:kruskal
生成的信息来生成汇总表,并且我需要包含这些变量。我宁愿继续使用这个包,因为它给了我很多有价值的信息。有什么办法可以让它通过绑定变量运行吗?
dput(example)
structure(list(TREATMENT = c("A", "A", "A", "B", "B", "C", "C",
"C", "D", "D"), W = c(0, 1.6941524646937, 1.524431531984, 0.959282869723864,
1.45273122733115, 0, 1.57479386520925, 0.421759202661462, 1.34235435984449,
1.52131484305823), X = c(0, 0.663872820198758, 0.202935807030853,
0.836223346381214, 0.750767193777965, 1.18128574225979, 2.03622986392828,
3.56466682539425, 0.919751117364462, 0.917347336682722), Y = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0), Z = c(2.1477548118197, 2.0111754022729,
3.14642815196242, 4.46967452127494, 1.53715421615569, 2.36274861406182,
2.33262528044302, 2.50970456594739, 2.96088598025103, 2.22841740590261
)), class = "data.frame", row.names = c(NA, 10L), .Names = c("TREATMENT",
"W", "X", "Y", "Z"))
library(agricolae)
example<-as.data.frame(example)
for(i in 2:(ncol(example)))
krusk <- kruskal(example[,i],TREATMENT,group=TRUE)
print(krusk)
【问题讨论】:
您能否提供一个可重现的示例? ***.com/help/mcve***.com/questions/5963269/… @Hack-R 你的愿望就是我的命令。 谢谢。它使尝试帮助和理解问题变得更加容易。 【参考方案1】:for(i in 2:(ncol(example)))
if(var(example[,i]) > 0)
krusk <- kruskal(example[,i],example$TREATMENT,group=TRUE)
print(krusk)
【讨论】:
哇哦!太感谢了。这行得通!然后我通常会创建一个data frame
并使用rownames(df)<-colnames(example[-1])
来命名行。你知道是否可以将相同的IF
条件应用于此函数,以便我可以排除在kruskal
测试中已排除的列?
@J.Con 好吧,您可以在函数中添加另一行,该函数接受一个名为 tmp
的空对象并将当前列的名称添加到其中(tmp <- c(colnames(example)[i],tmp)
),然后将该对象分配给之后的行名。
知道了! tmp
必须先走。所以tmp<-c(tmp,colnames(example[i]))
以上是关于处理 agricolae Kruskal 测试中的关系,R的主要内容,如果未能解决你的问题,请参考以下文章
在进行 Kruskal-Wallis 之后,我应该进行哪些事后测试?
如何为数据框中的多列循环 Bartlett 测试和 Kruskal 测试? [复制]
Kruskal 测试 kruskal.test.default(e, f) 中的错误:“x”和“g”必须具有相同的长度