如何对R中的删失变量进行Kruskal Wallis检验

时间:2016-11-14 18:13:42

标签: r statistics

我在不同品牌的瓶装水中有一套Chromium测量数据。我想应用Kruskal-Wallis H检验来确定铬品牌之间是否存在统计学上的显着差异,但测量数据中有许多删失值。

有没有办法在这个删失变量上应用Kruskal-Wallis H检验。我们的数据集df粘贴在下方:

df <- structure(list(
       Brand = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
           1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
           2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
           3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
           4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
           5L, 5L, 5L, 5L), .Label = c("B1", "B2", "B3", "B4", "B5"), class = "factor"), 
       Chromium = c(0.4, 0.4, 0.4, 0.9, 0.4, 1.3, 1.3, 0.4, 2.6, 
           0.4, 0.6, 0.6, 0.4, 2.1, 0.4, 0.4, 0.4, 0.4, 0.6, 0.4, 1.3, 
           1.3, 0.4, 2.6, 0.4, 0.7, 0.7, 0.4, 1.7, 0.4, 0.6, 0.4, 0.4,            
           0.4, 0.4, 1.3, 1.3, 0.4, 2.6, 0.4, 1.1, 1, 0.4, 1.5, 0.4, 
           0.7, 0.4, 0.4, 1, 0.4, 1.3, 1.3, 0.4, 2.6, 0.4, 1, 1.1, 0.4, 
           2.2, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 1.3, 1.3, 0.4, 2.6, 0.4, 
           0.6, 0.7, 0.4, 1.8, 0.4)), .Names = c("Brand", "Chromium"), 
           class = "data.frame", row.names = c(NA, -75L))

head(df)
#   Brand Chromium
# 1    B1      0.4
# 2    B1      0.4
# 3    B1      0.4
# 4    B1      0.9
# 5    B1      0.4
# 6    B1      1.3

3 个答案:

答案 0 :(得分:1)

< 0.4Chromium在您的数据中可以采用的最小值。 Kruskal-Wallis测试依赖于值的等级,而不是实际值。这意味着您只需将< 0.4替换为0.39,因为它们将像以前一样分配给它们。实际上,您可以使用小于0.4的任何值替换< 0.4

在代码中,那将是:

df$Chromium[df$Chromium == "< 0.4"] <- 0.4

确保您的数据是数字,然后您就可以运行:

kruskal.test(Chromium ~ Brand, 
         data = df)
# Kruskal-Wallis rank sum test

# data:  Chromium by Brand
# Kruskal-Wallis chi-squared = 0.51334, df = 4, p-value = 0.9722

答案 1 :(得分:1)

虽然我同意第一个答案(原则上替换<0.4乘0.4),但检测限以下的大量值(最终为排名中的关系)可能会降低Kruskal-Wallis测试的功效相当。 作为替代方案,您可以考虑使用卡方检验来查看高于阈值水平的值的比例是否因品牌而异。就你的例子而言:

xm<-rbind(c(8,8,4),c(7,7,1))
dimnames(xm)<-list(scores=c("Low","High"),brand=c("B1","B2","B3"))
print(xm)
(xmcs<-chisq.test(xm,simulate.p.value = T))

产生:

> print(xm)
      brand
scores B1 B2 B3
  Low   8  8  4
  High  7  7  1
> (xmcs<-chisq.test(xm,simulate.p.value = T))

    Pearson's Chi-squared test with simulated p-value (based on 2000 replicates)

data:  xm
X-squared = 1.2444, df = NA, p-value = 0.7216

Kruskal-Wallis测试中品牌之间的差异同样显着

答案 2 :(得分:1)

您可以考虑NADA package for R中的“cendiff”功能。根据文档,它相当于Peto&amp; Peto修改Gehan-Wilcoxon检验(广义Wilcoxon检验)。这是一项评分测试,旨在使用生存分析处理在多个报告限制下审查的数据。 Dennis R. Helsel的书“使用Minitab和R的截尾环境数据统计”第9.4节中有更广泛的描述,第二版。