我有一个通过Dunnett测试按组(4个级别)测试的25列的列表。我能够使用sapply函数使Dunnett按组用于所有列,并且在将p值放入表中时遇到了一些麻烦。以下是使用虹膜数据集尝试执行的示例。

iris <- iris

iris$group <- ifelse(iris$Species =='setosa', 1,
               ifelse(iris$Species =='versicolor', 2,
               ifelse(iris$Species =='virginica', 3,
               0)))

iris$group <- as.factor(iris$group)
summary(glht(aov(Sepal.Length ~ group, iris), linfct=mcp(group="Dunnett" )))
test

iris$Species

dunnet_model_iris <- sapply(iris[-c(5,6)], function(y, f) summary(glht(aov(y ~ f, iris), linfct=mcp(f="Dunnett"))), f = iris$Species)

names(dunnet_model_iris[[10]]$pvalues)

p_value <- dunnet_model[[10]]$pvalues
p_value


我能够通过dunnet_model [[10]] $ pvalues获得每列的p值(每列相隔10行(例如:第二列将是dunnet_model [[20]] $ pvalues)。 ,我的数据集有25列,所以我将从10-250拉出。我想创建一个表,如下所示:

                2-1       3-1
Sepal.Length  1.44E-15  2.22E-16
Sepal.Width   1.44E-15  2.22E-16
Petal.Length  1.44E-15  2.22E-16


问题:如何将每一列的所有Dunnett比较P值提取到一个表中?

我在寻找答案时遇到了一些麻烦。如果有人有什么建议,将不胜感激。我不希望任何代码,只是一些想法可以帮助我了解情况。

最佳答案

使用test$pvalues将模型保留在list中后,我们需要提取lapply

library(multcomp)
dunnet_model_iris <- lapply(iris[-c(5,6)], function(y, f)
      summary(glht(aov(y ~ f, iris), linfct=mcp(f="Dunnett"))), f = iris$Species)
t(sapply(dunnet_model_iris, function(x) x$test$pvalues))
#                      [,1]         [,2]
#Sepal.Length  1.443290e-15 2.220446e-16
#Sepal.Width   5.551115e-16 9.074667e-10
#Petal.Length  1.110223e-16 2.220446e-16
#Petal.Width  -2.220446e-16 1.110223e-16




或使用OP的方法创建“ dunnet_model_iris”

t(sapply(dunnet_model_iris["test",], `[[`, "pvalues"))

关于r - 通过变量将Dunnett检验的P值提取到表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48407931/

10-11 08:22