使用方差分析测量回归系数的贡献
Measuring regression coefficients contribution using anova
我想问一下anova F检验。这个测试可以用来衡量系数对因变量的贡献吗?
方差分析比较特定组之间和特定组内的变化,在线性回归中,我们用它来测试所有回归系数(除了截距)都等于零。
我的问题是我们是否可以比较回归中使用的每个项的残差和平方和,如下所示:
library(tidyverse)
mtcars %>%
lm(hp ~ factor(gear) + factor(am) + qsec + wt, data = .) %>%
aov() %>%
broom::tidy() %>%
mutate(contribution = sumsq/sum(sumsq))
我们能否将此摘要输出解释为:gear 解释因变量中大约 44% 的可变性? qsec 解释了大约 25% 的可变性?这种方法可以在实践中使用吗?如果我们必须只选择一个变量来解释因变量,我们应该在这个例子中选择 gear with only this variables?
我想问一下这是否正确,最重要的是为什么
是的,您的解释是正确的。一种看待这一点的方法是,如果我们取所有 sumsq
的总和,减去残差的 sumsq
并将该数量除以 sumsq
的总和,我们得到 R 平方回归(因此我们的模型解释的总方差的百分比)。
mtcars %>%
lm(hp ~ factor(gear) + factor(am) + qsec + wt, data = .) %>%
aov() %>%
broom::tidy() %>%
mutate(contribution = sumsq/sum(sumsq),
r_squared = (sum(sumsq) - sumsq[term == "Residuals"]) / sum(sumsq))
# A tibble: 5 x 8
term df sumsq meansq statistic p.value contribution r_squared
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 factor(gear) 2 64213. 32106. 33.3 0.0000000680 0.441 0.828
2 factor(am) 1 759. 759. 0.787 0.383 0.00521 0.828
3 qsec 1 36567. 36567. 37.9 0.00000165 0.251 0.828
4 wt 1 19098. 19098. 19.8 0.000144 0.131 0.828
5 Residuals 26 25090. 965. NA NA 0.172 0.828
mtcars %>%
lm(hp ~ factor(gear) + factor(am) + qsec + wt, data = .) %>%
summary() %>% .["r.squared"]
$r.squared
[1] 0.8278279
由一个主效应(或交互效应)解释的方差比例称为 "eta squared",是一种 effect size 度量。有计算这个的函数,例如 lsr
包:
aov_model <- aov(hp ~ (gear) + (am) + qsec + wt, data = mtcars)
library(lsr)
etaSquared(aov_model, type = 1)
eta.sq eta.sq.part
gear 0.440638981 0.7190454
am 0.005210947 0.0293768
qsec 0.250925660 0.5930678
wt 0.131052319 0.4321958
你可以在实践中使用它来 select 最重要的变量,但我会选择其他模型,如套索回归来做到这一点。
我想问一下anova F检验。这个测试可以用来衡量系数对因变量的贡献吗?
方差分析比较特定组之间和特定组内的变化,在线性回归中,我们用它来测试所有回归系数(除了截距)都等于零。
我的问题是我们是否可以比较回归中使用的每个项的残差和平方和,如下所示:
library(tidyverse)
mtcars %>%
lm(hp ~ factor(gear) + factor(am) + qsec + wt, data = .) %>%
aov() %>%
broom::tidy() %>%
mutate(contribution = sumsq/sum(sumsq))
我们能否将此摘要输出解释为:gear 解释因变量中大约 44% 的可变性? qsec 解释了大约 25% 的可变性?这种方法可以在实践中使用吗?如果我们必须只选择一个变量来解释因变量,我们应该在这个例子中选择 gear with only this variables?
我想问一下这是否正确,最重要的是为什么
是的,您的解释是正确的。一种看待这一点的方法是,如果我们取所有 sumsq
的总和,减去残差的 sumsq
并将该数量除以 sumsq
的总和,我们得到 R 平方回归(因此我们的模型解释的总方差的百分比)。
mtcars %>%
lm(hp ~ factor(gear) + factor(am) + qsec + wt, data = .) %>%
aov() %>%
broom::tidy() %>%
mutate(contribution = sumsq/sum(sumsq),
r_squared = (sum(sumsq) - sumsq[term == "Residuals"]) / sum(sumsq))
# A tibble: 5 x 8
term df sumsq meansq statistic p.value contribution r_squared
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 factor(gear) 2 64213. 32106. 33.3 0.0000000680 0.441 0.828
2 factor(am) 1 759. 759. 0.787 0.383 0.00521 0.828
3 qsec 1 36567. 36567. 37.9 0.00000165 0.251 0.828
4 wt 1 19098. 19098. 19.8 0.000144 0.131 0.828
5 Residuals 26 25090. 965. NA NA 0.172 0.828
mtcars %>%
lm(hp ~ factor(gear) + factor(am) + qsec + wt, data = .) %>%
summary() %>% .["r.squared"]
$r.squared
[1] 0.8278279
由一个主效应(或交互效应)解释的方差比例称为 "eta squared",是一种 effect size 度量。有计算这个的函数,例如 lsr
包:
aov_model <- aov(hp ~ (gear) + (am) + qsec + wt, data = mtcars)
library(lsr)
etaSquared(aov_model, type = 1)
eta.sq eta.sq.part
gear 0.440638981 0.7190454
am 0.005210947 0.0293768
qsec 0.250925660 0.5930678
wt 0.131052319 0.4321958
你可以在实践中使用它来 select 最重要的变量,但我会选择其他模型,如套索回归来做到这一点。