Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用effect()函数提取多变量的边际均值?_R_Lapply_Ancova - Fatal编程技术网

R 如何使用effect()函数提取多变量的边际均值?

R 如何使用effect()函数提取多变量的边际均值?,r,lapply,ancova,R,Lapply,Ancova,我是R的初学者,我想在包含200多列结果变量的数据集中执行ANCOVA对我来说,最重要的是提取这些变量的p值和边际均值。我在lappy()函数的帮助下成功地提取了p值,但是当我提取边际均值时,我在eval(predvars,data,env)中得到了这样的错误错误:找不到对象“x” 这里,我使用内置数据集“iris”作为示例来显示我的问题 data("iris") #加载我将使用的包 library(car); library(compute.es); library(ef

我是R的初学者,我想在包含200多列结果变量的数据集中执行ANCOVA对我来说,最重要的是提取这些变量的p值和边际均值。我在lappy()函数的帮助下成功地提取了p值,但是当我提取边际均值时,我在eval(predvars,data,env)中得到了这样的错误
错误:找不到对象“x”

这里,我使用内置数据集“iris”作为示例来显示我的问题

data("iris")
#加载我将使用的包

library(car); library(compute.es); library(effects); library(ggplot2);
library(multcomp); library(pastecs); library(WRS)
#设置以下ANCOVA测试的对比度:

contrasts(iris$Species) <- contr.poly(3)
由于超过200列的结果变量,我想提取一次边际均值,而不是逐个提取

非常感谢你的帮助


Ella

您会收到该错误,因为函数
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))
})

list2非常感谢您!它确实有用!但是,当我将代码调整为stack()函数时,仍然出现了一个错误。代码是:
means.all Hi@Ella\u may,我不太熟悉stack()或者你想用它实现什么。我相信这超出了你原来问题的范围。您可以将此作为单独的问题发布。再次表示歉意,我真的不知道用stack()来表示感谢,@StupidWolf。stack函数用于将数据框或列表中作为独立列提供的数据转换为单个列。我想使用
stack()
summary(effect())
的输出表中提取边际平均值。正如我在问题描述中所写,我在
stack()
lapply
的帮助下成功地提取了ancova主测试的p值,但边缘平均值提取失败。非常感谢,您仍然指出了关键点,使我离解决问题又近了一步。
stack()
单独工作,但与
lappy()
组合失败。我不知道为什么会这样。没有错误的代码是:
anova_-fit=aov(重新格式化(c(“花瓣宽度”,“种类”),“萼片长度”),data=iris)
<代码>意思1产生错误的原因是,即使有lappy,返回的列表中的每个元素都不是向量。请参见
str(list2[[1]])
,这是一个包含不同元素的列表。您希望“堆叠”哪个元素?我看到有人在张贴的新问题中回答了你的问题。。我想这或多或少是我处理此事的方式
pvalues <- stack(lapply(iris[, 1:3], function(x) Anova(aov(x ~ Petal.Width  + Species, data = iris), type="III")[3, 4]))[2:1]
list2 <- lapply(iris[, 1:3], function(x) summary(effect("Species", aov(x ~ Petal.Width + Species, data = iris)), se=TRUE))
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]
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
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))
})