Kruskal Wallis 检验和子集化
Posted
技术标签:
【中文标题】Kruskal Wallis 检验和子集化【英文标题】:Kruskal Wallis Test and subsetting 【发布时间】:2018-02-14 21:02:50 【问题描述】:您能否使用我的数据子集协助执行 Krustal Wallis 测试?我希望能够测试“生产者”之间“N”的差异。
names(Isotope.Data)
[1] "Species" "Name" "Group" "Simple_Group" "Trophic_Group"
[6] "Sample" "N" "C"
在我的 csv.file 中,我有一列“Trophic Group”,它将消费者和生产者分开。
table(Isotope.Data$Trophic_Group)
Consumer Producers
61 18
在 Simple_Group 列标题下,我有三个生产者 - 红藻门、海草和褐藻门
table(Isotope.Data$Simple_Group)
Abalone Loliginidae Octopus Phaeophyceae Rhodophyta Seagrass Teleost
24 2 12 6 9 3 20
Tunicate
3
我尝试了很多东西,但我收到了各种错误消息。 有人可以改进以下代码吗?
kruskal.test(C ~ Simple_Group, data = Isotope.Data, subset = Isotope.Data$Trophic_Group = "Producers")
附:我创建了一个单独的 CSV.file,其中仅包含 Primary Producers。然而,随后的多重比较邓恩检验,用于确定哪些水平彼此不同,为包括消费者和生产者的那些水平提供了不同的显着性水平。
【问题讨论】:
我有几个问题:当您调用kruskal.test
时,C 是什么?运行代码时收到的错误信息是什么?
C 指碳,N 指氮。我将运行单独的测试来测试消费者和生产者之间 C 和 N 的差异
错误是:错误:意外'=' in "kruskal.test(C ~ Simple_Group, data = Isotope.Data, subset = Isotope.Data$Trophic_Group ="
你需要使用==
而不是=
。
谢谢 Roman,我也试过了。我收到以下错误.... kruskal.test.default(numeric(0), integer(0)) 中的错误:所有观察结果都在同一个组中
【参考方案1】:
也许这个答案会有所帮助?基于@user295691 的回答:
Kruskal-Wallis test: create lapply function to subset data.frame?
您可以在此处确定要测试的各个组之间的差异,并使用拆分来正确定义数据框的子集。
虚拟示例:
# create data
val<-runif(60, min = 0, max = 100)
distance<-floor(runif(60, min=1, max=3))
phase<-rep(c("a", "b", "c"), 20)
df<-data.frame(val, distance, phase)
# get unique groups
ii<-unique(df$phase)
# run Kruskal test, specify the subset
kruskal.test(df$val ~df$distance,
subset = phase == "c")
现在使用split
将kruskal.test
应用于每个组:
lapply(split(df, df$phase), function(d) kruskal.test(val ~ distance, data=d) )
或者创建一个函数:
lapply(ii, function(i) kruskal.test(df$val ~ df$distance, subset=df$phase==i ))
两者都为每个组生成测试结果:
[[1]]
Kruskal-Wallis rank sum test
data: df$val by df$distance
Kruskal-Wallis chi-squared = 0.14881, df = 1, p-value = 0.6997
[[2]]
Kruskal-Wallis rank sum test
data: df$val by df$distance
Kruskal-Wallis chi-squared = 0.11688, df = 1, p-value = 0.7324
[[3]]
Kruskal-Wallis rank sum test
data: df$val by df$distance
Kruskal-Wallis chi-squared = 0.0059524, df = 1, p-value = 0.9385
或者只是获取p值(注意在kruskal.test
之后添加$p.value
):
lapply(ii, function(i)
kruskal.test(df$val ~ df$distance,
subset=df$phase==i )$p.value
)
【讨论】:
以上是关于Kruskal Wallis 检验和子集化的主要内容,如果未能解决你的问题,请参考以下文章
使用 Kruskal-Wallis 秩和检验的 kruskalmc 的 R pgirmess 替代方案
Kruskal - 具有 R 的数据子集的 Wallis p 值矩阵
python秩和检验(Kruskal-Wallis H Test)
R语言Kruskal-Wallis检验以及Dunn’s检验实战:Kruskal-Wallis检验是单因素方差分析的非参数等价方法Dunn’s检验以确定哪些组的中位数是有确定的统计差异的