我想为不同的数字向量运行100 ANOVA。
我的数据向量是来自我的data.frame
的(ruy,fjr,akf ....)aa=aov(data.frame$ruy~data.frame$Group)
anova(aa)
ab=aov(data.frame$fjr~data.frame$Group)
anova(ab)
ac=aov(data.frame$akf~data.frame$Group)
anova(ac)
.....
.....
我的循环技巧很差所以请你好。
答案 0 :(得分:1)
由于aov
基于lm
,您可以在LHS上使用cbind
因变量,从而导致运行单独的模型:
formula <- as.formula(paste0("cbind(", paste(names(iris)[-5], collapse = ","), ") ~ Species"))
fit <- aov(formula, data=iris)
summary(fit)
# Response Sepal.Length :
# Df Sum Sq Mean Sq F value Pr(>F)
#Species 2 63.212 31.606 119.26 < 2.2e-16 ***
#Residuals 147 38.956 0.265
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Response Sepal.Width :
# Df Sum Sq Mean Sq F value Pr(>F)
#Species 2 11.345 5.6725 49.16 < 2.2e-16 ***
#Residuals 147 16.962 0.1154
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#</snip>
答案 1 :(得分:0)
或者,您可以循环回复以创建一个列表,其中每个元素对应一个模型,而不是Roland的优秀答案,它产生一个单一的&#39;具有多个响应的模型。如果你想要(在后面的步骤中)单独使用生成的模型,这可能是usefule:
responseList <- names(iris)[-5]
modelList <- lapply(responseList, function(resp) {
mF <- formula(paste(resp, " ~ Species"))
aov(mF, data = iris)
})
然后,您可以再次使用lapply
在summary
模型上运行aov
:
lapply(modelList, summary)
如前所述,Roland的解决方案为您提供了一个多响应模型(class(fit)
),而上面的解决方案为您提供了(单个)响应模型列表。无论您喜欢什么,主要取决于您希望如何处理结果。