如何从 R 中的方差分析中获取 rsquare
How can I obtain the rsquare out of an anova in R
我正在寻找 method/function returns de Rsquared of anova model in 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-square,则可以应用以下公式(来自 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 计算的情况一样。如果 goodness-of-fit,估计值与残差比率不会通过添加新的自变量显着增加,那么您不应该包括它。
因此,R-square 将始终通过涉及越来越多的变量而增加,而 Adjusted R-square 将在一定数量的回归变量后停止改善。
我正在寻找 method/function returns de Rsquared of anova model in 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-square,则可以应用以下公式(来自 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 计算的情况一样。如果 goodness-of-fit,估计值与残差比率不会通过添加新的自变量显着增加,那么您不应该包括它。
因此,R-square 将始终通过涉及越来越多的变量而增加,而 Adjusted R-square 将在一定数量的回归变量后停止改善。