r - 我什么时候应该使用 aov() 以及什么时候使用 anova()?

标签 r anova

我已经引用了很多在线文献,但它增加了我的困惑。大部分讨论都过于技术性,涉及术语不平衡设计和 I、II 或 III 因子方差分析以及所有内容。

我只知道aov()用途 lm()在内部,对于带有因子的数据很有用。而anova()可用于同一数据集上的不同模型。
我的理解正确吗?

最佳答案

anovaaov 有本质区别.为什么不阅读 R 的文档 ?aov?anova ?简而言之:

  • aov拟合模型(正如您已经知道的,它在内部调用 lm ),因此它生成回归系数、拟合值、残差等;它产生一个主要类“aov”的对象,但也产生一个次要类“lm”。因此,它是“lm”对象的增强。
  • anova是一个泛型函数。在您的场景中,您指的是 anova.lmanova.lmlist (阅读 ?anova.lm 了解更多信息)。前者分析拟合模型(由 lmaov 生成),而后者分析几个嵌套(越来越大)拟合模型(由 lmaov 生成)。它们都旨在生成 I 型(顺序)方差分析表。

  • 在实践中,您首先使用 lm/aov拟合模型,然后使用 anova来分析结果。没有什么比尝试一个小例子更好的了:
    fit <- aov(sr ~ ., data = LifeCycleSavings)  ## can also use `lm`
    z <- anova(fit)
    

    现在,看看它们的结构。 aov返回一个大对象:
    str(fit)
    
    #List of 12
    # $ coefficients : Named num [1:5] 28.566087 -0.461193 -1.691498 -0.000337 0.409695
    #  ..- attr(*, "names")= chr [1:5] "(Intercept)" "pop15" "pop75" "dpi" ...
    # $ residuals    : Named num [1:50] 0.864 0.616 2.219 -0.698 3.553 ...
    #  ..- attr(*, "names")= chr [1:50] "Australia" "Austria" "Belgium" "Bolivia" ...
    # $ effects      : Named num [1:50] -68.38 -14.29 7.3 -3.52 -7.94 ...
    #  ..- attr(*, "names")= chr [1:50] "(Intercept)" "pop15" "pop75" "dpi" ...
    # $ rank         : int 5
    # $ fitted.values: Named num [1:50] 10.57 11.45 10.95 6.45 9.33 ...
    #  ..- attr(*, "names")= chr [1:50] "Australia" "Austria" "Belgium" "Bolivia" ...
    # $ assign       : int [1:5] 0 1 2 3 4
    # $ qr           :List of 5
    #  ..$ qr   : num [1:50, 1:5] -7.071 0.141 0.141 0.141 0.141 ...
    #  .. ..- attr(*, "dimnames")=List of 2
    #  .. .. ..$ : chr [1:50] "Australia" "Austria" "Belgium" "Bolivia" ...
    #  .. .. ..$ : chr [1:5] "(Intercept)" "pop15" "pop75" "dpi" ...
    #  .. ..- attr(*, "assign")= int [1:5] 0 1 2 3 4
    #  ..$ qraux: num [1:5] 1.14 1.17 1.16 1.15 1.05
    #  ..$ pivot: int [1:5] 1 2 3 4 5
    #  ..$ tol  : num 1e-07
    #  ..$ rank : int 5
    #  ..- attr(*, "class")= chr "qr"
    # $ df.residual  : int 45
    # $ xlevels      : Named list()
    # $ call         : language aov(formula = sr ~ ., data = LifeCycleSavings)
    # $ terms        :Classes 'terms', 'formula'  language sr ~ pop15 + pop75 + dpi + ddpi
    #  .. ..- attr(*, "variables")= language list(sr, pop15, pop75, dpi, ddpi)
    #  .. ..- attr(*, "factors")= int [1:5, 1:4] 0 1 0 0 0 0 0 1 0 0 ...
    #  .. .. ..- attr(*, "dimnames")=List of 2
    #  .. .. .. ..$ : chr [1:5] "sr" "pop15" "pop75" "dpi" ...
    #  .. .. .. ..$ : chr [1:4] "pop15" "pop75" "dpi" "ddpi"
    #  .. ..- attr(*, "term.labels")= chr [1:4] "pop15" "pop75" "dpi" "ddpi"
    #  .. ..- attr(*, "order")= int [1:4] 1 1 1 1
    #  .. ..- attr(*, "intercept")= int 1
    #  .. ..- attr(*, "response")= int 1
    #  .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
    #  .. ..- attr(*, "predvars")= language list(sr, pop15, pop75, dpi, ddpi)
    #  .. ..- attr(*, "dataClasses")= Named chr [1:5] "numeric" "numeric" "numeric" "numeric" ...
    #  .. .. ..- attr(*, "names")= chr [1:5] "sr" "pop15" "pop75" "dpi" ...
    # $ model        :'data.frame':	50 obs. of  5 variables:
    #  ..$ sr   : num [1:50] 11.43 12.07 13.17 5.75 12.88 ...
    #  ..$ pop15: num [1:50] 29.4 23.3 23.8 41.9 42.2 ...
    #  ..$ pop75: num [1:50] 2.87 4.41 4.43 1.67 0.83 2.85 1.34 0.67 1.06 1.14 ...
    #  ..$ dpi  : num [1:50] 2330 1508 2108 189 728 ...
    #  ..$ ddpi : num [1:50] 2.87 3.93 3.82 0.22 4.56 2.43 2.67 6.51 3.08 2.8 ...
    #  ..- attr(*, "terms")=Classes 'terms', 'formula'  language sr ~ pop15 + pop75 + dpi + ddpi
    #  .. .. ..- attr(*, "variables")= language list(sr, pop15, pop75, dpi, ddpi)
    #  .. .. ..- attr(*, "factors")= int [1:5, 1:4] 0 1 0 0 0 0 0 1 0 0 ...
    #  .. .. .. ..- attr(*, "dimnames")=List of 2
    #  .. .. .. .. ..$ : chr [1:5] "sr" "pop15" "pop75" "dpi" ...
    #  .. .. .. .. ..$ : chr [1:4] "pop15" "pop75" "dpi" "ddpi"
    #  .. .. ..- attr(*, "term.labels")= chr [1:4] "pop15" "pop75" "dpi" "ddpi"
    #  .. .. ..- attr(*, "order")= int [1:4] 1 1 1 1
    #  .. .. ..- attr(*, "intercept")= int 1
    #  .. .. ..- attr(*, "response")= int 1
    #  .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
    #  .. .. ..- attr(*, "predvars")= language list(sr, pop15, pop75, dpi, ddpi)
    #  .. .. ..- attr(*, "dataClasses")= Named chr [1:5] "numeric" "numeric" "numeric" "numeric" ...
    #  .. .. .. ..- attr(*, "names")= chr [1:5] "sr" "pop15" "pop75" "dpi" ...
    # - attr(*, "class")= chr [1:2] "aov" "lm"
    

    虽然 anova返回:
    str(z)
    
    #Classes ‘anova’ and 'data.frame':  5 obs. of  5 variables:
    # $ Df     : int  1 1 1 1 45
    # $ Sum Sq : num  204.1 53.3 12.4 63.1 650.7
    # $ Mean Sq: num  204.1 53.3 12.4 63.1 14.5
    # $ F value: num  14.116 3.689 0.858 4.36 NA
    # $ Pr(>F) : num  0.000492 0.061125 0.359355 0.042471 NA
    # - attr(*, "heading")= chr  "Analysis of Variance Table\n" "Response: sr"
    

    关于r - 我什么时候应该使用 aov() 以及什么时候使用 anova()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40823310/

    相关文章:

    r - 用值过滤因子

    仅适用于某些值的 R 频率表

    R rgl 轴刻度和刻度标签之间的距离

    r - 如何正确使用 ggstatsplot 包中的 grouped_ggwithinstats() 函数

    r - 从不同概率向量中采样的有效方法

    r - ggplot2 相当于 R 中 googleVis 中的 'factorization or categorization'

    r - 基于置换法的方差分析中 F 统计量的 Monte Carlo 估计

    r - 在 R 中对整齐数据同时执行多个方差分析

    r - R 中的边际方差分析检验

    java - 如何在Java中保存R统计测试的结果