【问题标题】:Looping many one-sided ANOVA in R在R中循环许多单侧方差分析
【发布时间】:2015-01-09 10:32:12
【问题描述】:

我想为不同的数字向量运行 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)
.....
.....

我的循环技巧很差,所以请善待。

【问题讨论】:

    标签: r loops statistics anova


    【解决方案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>
    

    【讨论】:

    • 我应该写到我有很多 NA:s,当我手动执行 ANOVA 时,R 会忽略它们。我不想将 NA 视为 0。
    • Roland 的这个回答和@Tothal 下面的回答都符合我的目的,但是我有自己的问题。一个人将如何扩展以运行多个事后测试的方法?线性模型有效,但信息结果的结构使得 Post Hoc 测试无法轻松运行和“堆叠”。有什么想法吗?
    • 这取决于您打算运行什么样的事后测试。您只是想调整此答案中显示的 p 值,还是想对每个模型进行测试?对于后者,使用 thothal 所示的方法。
    【解决方案2】:

    或者,您可以遍历响应以创建一个列表,其中每个元素对应一个模型,而不是来自 Roland 的出色答案,它生成具有多个响应的“单个”模型。如果您想(在后面的步骤中)单独使用生成的模型,这可能很有用:

    responseList <- names(iris)[-5]
    modelList    <- lapply(responseList, function(resp) {
                               mF <- formula(paste(resp, " ~ Species"))
                               aov(mF, data = iris)
                    })
    

    然后您可以再次使用lapplyaov 模型上运行summary

    lapply(modelList, summary)
    

    如前所述,Roland 的解决方案为您提供了一个多响应模型 (class(fit)),而上述解决方案为您提供了一个(单)响应模型列表。无论您喜欢什么,主要取决于您希望如何处理结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-04
      • 2019-10-26
      • 1970-01-01
      • 2014-11-15
      • 2020-07-21
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多