使用方差分析测量回归系数的贡献

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 最重要的变量,但我会选择其他模型,如套索回归来做到这一点。