我是R的初学者,我想在具有200多列结果变量的数据集中执行ANCOVA。对我来说,最重要的是提取这些变量的 p 值和边际平均值。我在 lapply(( 函数的帮助下成功提取了 p 值,但是当我提取边际意味着我得到了这样的错误Error in eval(predvars, data, env) : object 'x' not found
。
在这里,我使用内置数据集"iris"作为示例来显示我的问题。
data("iris")
#load 我会使用的软件包
library(car); library(compute.es); library(effects); library(ggplot2);
library(multcomp); library(pastecs); library(WRS)
以下ANCOVA测试的 #set 对比:
contrasts(iris$Species) <- contr.poly(3)
同时 #perform 多个结果变量的ANCOVA(在这里,我比较不同Specie水平的多个结果变量,以Petal.Width为协变量(
list1 <- lapply(iris[, 1:3], function(x) Anova(aov(x ~ Petal.Width + Species, data = iris), type="III"))
str(list1)
#extract 主要测试的 p 值
pvalues <- stack(lapply(iris[, 1:3], function(x) Anova(aov(x ~ Petal.Width + Species, data = iris), type="III")[3, 4]))[2:1]
上面的代码运行良好,但是当我使用 effect(( 函数提取边际意味着我得到错误:#extract 边际意味着
list2 <- lapply(iris[, 1:3], function(x) summary(effect("Species", aov(x ~ Petal.Width + Species, data = iris)), se=TRUE))
eval(predvars, data, env( 中的错误:找不到对象 'x'
marginal.means <- stack(lapply(iris[, 1:3], function(x) summary(effect("Species", aov(x ~ Petal.Width + Species, data = iris)), se=TRUE)[[5]][[1]][1]))[2:1]
eval(predvars, data, env( 中的错误:找不到对象 'x'
#当我提取某个变量(例如 Sepal.Length(的边际平均值时,不使用 <lapply((,它的工作原理是:>
marginal.mean1 <- summary(effect("Species", aov(Sepal.Length ~ Petal.Width + Species, data = iris)), se=TRUE)
marginal.mean1
输出:
Species
setosa versicolor virginica
5.880113 5.819859 5.830028
Lower 95 Percent Confidence Limits
Species
setosa versicolor virginica
5.490905 5.676927 5.485953
Upper 95 Percent Confidence Limits
Species
setosa versicolor virginica
6.269322 5.962791 6.174102
由于结果变量有 200 多列,我想提取一次边际均值,而不是逐个提取它们。
非常感谢您的帮助,
艾拉
您会收到该错误,因为该函数effect()
调用update()
并尝试重新拟合模型,此时,它无法再访问您的x
。(好吧,也许我没有解释得太好(你可以阅读本书的章节来了解函数是如何工作的。
尝试将所有内容保留在 data.frame 中,而是提供公式来适应不同的变量:
list2 <- lapply(colnames(iris)[1:3], function(x){
anova_fit = aov(reformulate(c("Petal.Width","Species"),x), data = iris)
summary(effect("Species",anova_fit, se=TRUE))
})
如您所见,这也可以应用于您的其他功能。