在for循环中执行多个Kruskal测试

kx5bkwkv  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(68)

我想对多个变量执行kruskal_test。我已经能够用anova测试做到这一点,如下所示:

vars = c("Sepal.Length" , "Sepal.Width" ,"Petal.Length" ,  "Petal.Width")

for (i in vars) {
  
  f <- reformulate(paste(i,'~Species'))
  test = aov(data = iris, f )
  
  print(i)
  print(summary(test))

字符串
但我似乎不能对rstatix::kruskal_testkruskal.test使用相同的方法:

for (i in vars) {
  
  f <- reformulate(paste(i,'~Species'))
  test = kruskal.test(data = iris,formula= f )
  test = kruskal_test(data = iris,formula= f )
  print(i)
  print(summary(test))
  
}


在kruskal.test.default(data = iris,formula = f)中出现错误:参数“x”丢失,没有默认值

kruskal.test.formula(formula,data = data,...)中的错误:'formula'缺失或不正确

but5z9lq

but5z9lq1#

aov中你需要这样的公式,

> reformulate(paste('Petal.Width','~Species'))
~(Petal.Width ~ Species)

字符串
而在kruskal.test

> reformulate('Petal.Width', 'Species')
Species ~ Petal.Width


泛型函数在其方法调度机制中似乎有一个意想不到的问题,表明其方法选择过程中可能存在错误(R 4.3.2)。尽管参数被命名,但顺序很重要(默认顺序是kruskal.test(formula, data),我们有kruskal.test(data, formula)):

> kruskal.test(formula=Petal.Width ~ Species, data=iris)

    Kruskal-Wallis rank sum test

data:  Petal.Width by Species
Kruskal-Wallis chi-squared = 131.19, df = 2, p-value < 2.2e-16


然而:

> kruskal.test(data=iris, formula=Petal.Width ~ Species)
Error in kruskal.test.default(data = iris, formula = Petal.Width ~ Species) : 
  argument "x" is missing, with no default


如果你直接使用这个方法,

> for (i in vars) {
+   f <- reformulate(i, 'Species')
+   test <- stats:::kruskal.test.formula(data=iris, formula=f)
+   print(test)
+ }

    Kruskal-Wallis rank sum test

data:  Species by Sepal.Length
Kruskal-Wallis chi-squared = 107.29, df = 34, p-value = 1.596e-09

    Kruskal-Wallis rank sum test

data:  Species by Sepal.Width
Kruskal-Wallis chi-squared = 47.879, df = 22, p-value = 0.001125
...


最好使用**lapply**:

> lapply(vars, \(v) stats:::kruskal.test.formula(data=iris, formula=reformulate(v, 'Species')))
[[1]]

    Kruskal-Wallis rank sum test

data:  Species by Sepal.Length
Kruskal-Wallis chi-squared = 107.29, df = 34, p-value = 1.596e-09

[[2]]

    Kruskal-Wallis rank sum test

data:  Species by Sepal.Width
Kruskal-Wallis chi-squared = 47.879, df = 22, p-value = 0.001125
...

相关问题