R: Anova-test (aov), for-Loop和paste的组合导致错误



我已经构建了一个for循环,用于对一组因变量和自变量进行anova测试。为了循环这些变量,它们都位于我的数据框main中,我创建了两个具有因变量和自变量的向量(分别为DependentVariablesAnovaIndependentVariablesAnova)。

我还合并了粘贴函数,以便相应地命名结果测试。

for(i in 1:length(DependentVariablesAnova)){
for(j in 1:length(IndependentVariablesAnova)){
paste("Anova", c(DependentVariablesAnova[i]), c(IndependentVariablesAnova[j])) <- aov(c(DependentVariablesAnova[i]) ~ c(IndependentVariablesAnova[j]), data = main)
}
}

上述代码将导致以下错误消息:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels
In addition: Warning message:
In storage.mode(v) <- "double" :
Show Traceback

Rerun with Debug
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels 

我认为有一个相当简单的快速解决我的问题。如果不是这样,需要一个工作样品,请随时告诉我。

这是一种使用purrr包中的map的方法。
如果你愿意,你也可以在base R中使用apply的相同方法,尽管这会使标记DVs变得有点困难。

library(tidyverse)
map_df(dvs, function(dv) {
map_df(ivs, function(iv) {
frm <- as.formula(paste(dv, "~", iv))
aov(frm, data = main) %>% broom::tidy(.)
})
}, .id = "dv")

输出
# A tibble: 8 x 7
dv    term         df  sumsq meansq statistic p.value
<chr> <chr>     <dbl>  <dbl>  <dbl>     <dbl>   <dbl>
1 w     x             2  1.53   0.764     0.827  0.440 
2 w     Residuals    97 89.6    0.923    NA     NA     
3 w     z             2  3.54   1.77      1.96   0.146 
4 w     Residuals    97 87.5    0.903    NA     NA     
5 y     x             2  5.49   2.74      3.13   0.0481
6 y     Residuals    97 85.0    0.876    NA     NA     
7 y     z             2  0.992  0.496     0.538  0.586 
8 y     Residuals    97 89.5    0.923    NA     NA     

数据:

n <- 100
main <- tibble(w = rnorm(n), 
x = sample(letters[1:3], n, replace = TRUE) %>% as.factor,
y = rnorm(n),
z = sample(letters[4:6], n, replace = TRUE) %>% as.factor)
dvs <- c("w", "y") %>% set_names()
ivs <- c("x", "z")

相关内容

  • 没有找到相关文章

最新更新