我正在寻找返回R中的方差分析模型的R平方的方法/函数。
到目前为止找不到任何东西。
谢谢

最佳答案

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)现在,方差分析与线性模型直接相关,因此让我们获取它并从中找到方差分析:
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

关于r - 如何从R中的方差分析中获得rsquare,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45461298/

10-12 16:32