【问题标题】:How can I obtain the rsquare out of an anova in R如何从 R 中的方差分析中获得 rsquare
【发布时间】:2018-01-09 16:57:08
【问题描述】:

我正在寻找在 R 中返回方差分析模型的 de Rsquared 的方法/函数。

目前找不到任何东西。

谢谢

【问题讨论】:

    标签: r anova


    【解决方案1】:

    如果您想计算 调整后的 R 平方,则可以应用以下公式(来自 https://www.statisticshowto.datasciencecentral.com/adjusted-r2/):

    s <- summary(LM)
    r2 <- s$r.squared
    n <- dim(migraine)[1]
    k <- 2
    #adjusted R-square
    1 - ((1-r2)*(n-1)/(n-k-1))
    #the same as
    s$adj.r.squared
    

    调整意味着对附加变量(公式中的“k”)的惩罚,就像在 AIC 计算的情况下一样。如果拟合优度,估计与残差的比率不会通过添加新的自变量而显着增加,那么你不应该包括它。

    因此,R-square 将始终通过涉及越来越多的变量而增加,而 Adjusted R-square 将在一定数量的回归器后停止改善。

    【讨论】:

      【解决方案2】:

      tl;dr:可以通过查看对应线性模型的汇总输出得到方差分析的 R 平方

      让我们一步一步来:

      1) 让我们使用来自here的数据

      pain <- c(4, 5, 4, 3, 2, 4, 3, 4, 4, 6, 8, 4, 5, 4, 6, 5, 8, 6, 6, 7, 6, 6, 7, 5, 6, 5, 5)
      drug <- c(rep("A", 9), rep("B", 9), rep("C", 9))
      migraine <- data.frame(pain, drug)
      

      2) 让我们得到方差分析:

      AOV <- aov(pain ~ drug, data=migraine)
      
      summary(AOV)
      
      ##             Df Sum Sq Mean Sq F value   Pr(>F)    
      ## drug         2  28.22  14.111   11.91 0.000256 ***
      ## Residuals   24  28.44   1.185                     
      ## ---
      ## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
      

      3) 现在,anova 与线性模型直接相关,所以让我们获取它并从中找到 anova:

      LM <- lm(pain ~ drug, data=migraine)
      
      anova(LM)
      
      ## Analysis of Variance Table
      ## 
      ## Response: pain
      ##           Df Sum Sq Mean Sq F value    Pr(>F)    
      ## drug       2 28.222 14.1111  11.906 0.0002559 ***
      ## Residuals 24 28.444  1.1852                      
      ## ---
      ## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
      

      正如预期的那样,结果完全相同。这意味着……

      3) 我们可以从线性模型中得到 R 平方:

      summary(LM)
      
      ## Call:
      ## lm(formula = pain ~ drug, data = migraine)
      ## 
      ## Residuals:
      ##     Min      1Q  Median      3Q     Max 
      ## -1.7778 -0.7778  0.1111  0.3333  2.2222 
      ## 
      ## Coefficients:
      ##             Estimate Std. Error t value Pr(>|t|)    
      ## (Intercept)   3.6667     0.3629  10.104 4.01e-10 ***
      ## drugB         2.1111     0.5132   4.114 0.000395 ***
      ## drugC         2.2222     0.5132   4.330 0.000228 ***
      ## ---
      ## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
      ## 
      ## Residual standard error: 1.089 on 24 degrees of freedom
      ## Multiple R-squared:  0.498,  Adjusted R-squared:  0.4562 
      ## F-statistic: 11.91 on 2 and 24 DF,  p-value: 0.0002559
      

      所以 R 平方为 0.498

      但如果我们不相信这一点呢?

      4) 什么是 R 平方?它是回归平方和除以总平方和(即回归的平方和加上残差的平方和)。所以让我们在方差分析中找到这些数字并直接计算 R 平方:

      # We use the tidy function from the broom package to extract values
      library(broom)
      
      tidy_aov <- tidy(AOV)
      tidy_aov
      
      ##        term df    sumsq    meansq statistic      p.value
      ## 1      drug  2 28.22222 14.111111  11.90625 0.0002558807
      ## 2 Residuals 24 28.44444  1.185185        NA           NA
      
      # The values we need are in the sumsq column of this data frame
      
      sum_squares_regression <- tidy_aov$sumsq[1]
      sum_squares_residuals <- tidy_aov$sumsq[2]
      
      R_squared <- sum_squares_regression /
                  (sum_squares_regression + sum_squares_residuals)
      
      R_squared
      
      ## 0.4980392
      

      所以我们得到相同的结果:R 平方为 0.4980392

      【讨论】:

        猜你喜欢
        • 2014-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多