为什么方差分析等同于线性回归?


50

我读到方差分析和线性回归是一回事。考虑到方差分析的输出是一些值和一些值,您将基于该结论得出结论,即样本在不同样本中的均值是相同还是不同。pFp

但是,假设均值不相等(拒绝零假设),则ANOVA不会告诉您有关线性模型系数的任何信息。那么线性回归与ANOVA有何相同?

Answers:


44

当两个模型针对相同的假设进行检验并使用相同的编码时,ANOVA和线性回归是等效的。这些模型的基本目的有所不同:方差分析主要用于表示数据中类别均值之间的差异,而线性回归主要用于估计样本均值响应和相关的。σ2

从某种程度上说,可以将ANOVA描述为具有虚拟变量的回归。我们可以很容易地看到,在使用分类变量的简单回归中就是这种情况。分类变量将被编码为指标矩阵(0/1取决于对象是否属于给定组的矩阵),然后直接用于线性回归描述的线性系统的解。让我们看一个5组的例子。为了论证,我将假定均值group1等于1,均值group2等于2,...和均值group5等于5。(我使用MATLAB,但在R中完全相同)。

rng(123);               % Fix the seed
X = randi(5,100,1);     % Generate 100 random integer U[1,5]
Y = X + randn(100,1);   % Generate my response sample
Xcat = categorical(X);  % Treat the integers are categories

% One-way ANOVA
[anovaPval,anovatab,stats] = anova1(Y,Xcat);
% Linear regression
fitObj = fitlm(Xcat,Y);

% Get the group means from the ANOVA
ANOVAgroupMeans = stats.means
% ANOVAgroupMeans =
% 1.0953    1.8421    2.7350    4.2321    5.0517

% Get the beta coefficients from the linear regression
LRbetas = [fitObj.Coefficients.Estimate'] 
% LRbetas =
% 1.0953    0.7468    1.6398    3.1368    3.9565

% Rescale the betas according the intercept
scaledLRbetas = [LRbetas(1) LRbetas(1)+LRbetas(2:5)]
% scaledLRbetas =
% 1.0953    1.8421    2.7350    4.2321    5.0517

% Check if the two results are numerically equivalent
abs(max( scaledLRbetas - ANOVAgroupMeans)) 
% ans =
% 2.6645e-15

在这种情况下可以看到结果完全相同。微小的数值差异是由于设计未达到完美平衡以及底层估算程序所致;方差分析会更积极地累积数值误差。为此,我们安装了拦截器LRbetas(1);我们可以拟合无截距模型,但这不是“标准”线性回归。(在那种情况下,结果甚至更接近方差分析。)

对于上述示例,在方差分析和线性回归的情况下,统计量(均值的比率)也将相同:F

abs( fitObj.anova.F(1) - anovatab{2,5} )
% ans =
% 2.9132e-13 

这是因为程序检验了相同的假设,但使用了不同的措辞:ANOVA将定性检查“ 比率是否足够高,表明没有分组是不可信的 ”,而线性回归将定性检查“ 比率是否足够高,以表明仅拦截”模型可能不足 ”。
(这是对“ 看到等于或大于在原假设下观察到的值的可能性的可能性 ”的某种自由解释,并不意味着是教科书的定义。)

回到关于“ 方差分析 ”的问题的最后部分,即线性设计的系数(假设均值不相等 ”,您什么都不知道),希望您现在可以在设计的情况下看到方差分析非常简单/ 平衡,可以告诉您线性模型可以做到的所有事情。组均值的置信区间将与β等等。显然,当人们开始在他的回归模型中添加多个协变量时,简单的单向方差分析就没有直接等价性。在那种情况下,使用一种方法不能直接获得的信息来扩充用于计算线性回归平均响应的信息。我相信人们可以再次以方差分析的方式表达事物,但这主要是一项学术活动。

关于此事的一篇有趣的论文是盖尔曼(Gelman)在2005年发表的一篇论文:《方差分析-为什么它比以往任何时候都更重要》。提出了一些要点;我不完全支持该论文(我个人更赞同麦卡拉赫的观点),但可以作为有益的阅读。

最后一点:当您有混合效果模型时,图会变厚。在那里,您对数据的分组有什么误解或实际信息有不同的概念。这些问题不在本问题的讨论范围之内,但我认为它们值得我们点头。


6
此交叉验证页面上可接受的答案还通过数学方法很好地显示了ANOVA与回归之间的关系,该数学方法很好地补充了该答案的实际方法。
EdM 2015年

+1。哦,是的,@ MichaelHardy在该主题中的回答非常好。感谢您提及它!
恢复单胞菌usεr11852说,

+1,除此之外,我觉得这个数字这个答案是非常有帮助弥合方差分析和线性回归之间的差距
杜海涛

您是否同意ANOVA是具有分类预测变量的高斯GLM?
Digio

@Digio:不,这会简化使用它们的适当性。我会让GLM脱颖而出。
usεr11852说恢复单胞菌

55

让我对带有分类(伪编码)回归的OLS 等同于ANOVA中的因子的想法进行一些说明。在这两种情况下,有水平(或团体在方差分析的情况下)。

在OLS回归中,最通常的是在回归器中也包含连续变量。它们在逻辑上修改了拟合模型中分类变量和因变量(DC)之间的关系。但这并非使平行无法识别的地步。

根据mtcars数据集,我们可以首先将模型可视lm(mpg ~ wt + as.factor(cyl), data = mtcars)化为由连续变量wt(权重)确定的斜率,然后通过不同的截距投影出分类变量cylinder(四个,六个或八个圆柱体)的效果。这是与单向方差分析平行的最后一部分。

让我们在右侧的子图中以图形方式查看它(包括左侧的三个子图,以便与随后讨论的ANOVA模型进行左右比较):

在此处输入图片说明

每个汽缸发动机都用颜色编码,具有不同截距的拟合线与数据云之间的距离等于ANOVA中组内变化的等效值。请注意,在与连续的变量(OLS模型截距weight)不是数学上相同的不同组内是指在ANOVA的值,由于效果weight与不同的模型矩阵(见下文):均值mpg为以4缸汽车为例,mean(mtcars$mpg[mtcars$cyl==4]) #[1] 26.66364而OLS的“基线”截距(按惯例反映cyl==4(R中从低到高的数字顺序))截然不同:summary(fit)$coef[1] #[1] 33.99079。线的斜率是连续变量的系数weight

如果您试图weight通过在脑海上拉直这些线并将它们返回到水平线来抑制的影响,那么最终aov(mtcars$mpg ~ as.factor(mtcars$cyl))将在左侧的三个子图中获得模型的ANOVA图。该weight回归是现在,但是从点到不同的截距的关系大致保持-我们简单地旋转逆时针和铺开之前重叠绘制每个不同级别(再次,只能作为一种视觉设备“看到”连接;不是数学上的等式,因为我们正在比较两个不同的模型!)。

cylinder20x

通过这些垂直部分的总和,我们可以手动计算残差:

mu_mpg <- mean(mtcars$mpg)                      # Mean mpg in dataset
TSS <- sum((mtcars$mpg - mu_mpg)^2)             # Total sum of squares
SumSq=sum((mtcars[mtcars$cyl==4,"mpg"]-mean(mtcars[mtcars$cyl=="4","mpg"]))^2)+
sum((mtcars[mtcars$cyl==6,"mpg"] - mean(mtcars[mtcars$cyl=="6","mpg"]))^2)+
sum((mtcars[mtcars$cyl==8,"mpg"] - mean(mtcars[mtcars$cyl=="8","mpg"]))^2)

结果:SumSq = 301.2626TSS - SumSq = 824.7846。相比于:

Call:
   aov(formula = mtcars$mpg ~ as.factor(mtcars$cyl))

Terms:
                as.factor(mtcars$cyl) Residuals
Sum of Squares               824.7846  301.2626
Deg. of Freedom                     2        29

与仅使用分类cylinder作为回归变量的线性模型进行方差分析进行测试的结果完全相同:

fit <- lm(mpg ~ as.factor(cyl), data = mtcars)
summary(fit)
anova(fit)

Analysis of Variance Table

Response: mpg
               Df Sum Sq Mean Sq F value    Pr(>F)    
as.factor(cyl)  2 824.78  412.39  39.697 4.979e-09 ***
Residuals      29 301.26   10.39 

那么,我们看到的是,无论您调用类型为OLS lm(DV ~ factors)还是ANOVA(aov(DV ~ factors))的残差(模型未解释的总方差的一部分)以及方差都是相同的:连续变量模型最终得到一个相同的系统。同样,当我们全局评估模型或作为综合ANOVA(而不是逐级评估)时,我们自然会得到相同的p值F-statistic: 39.7 on 2 and 29 DF, p-value: 4.979e-09

这并不意味着测试各个级别将产生相同的p值。对于OLS,我们可以调用summary(fit)并获取:

lm(formula = mpg ~ as.factor(cyl), data = mtcars)

                Estimate Std. Error t value                           Pr(>|t|)    
(Intercept)      26.6636     0.9718  27.437                           < 2e-16 ***
as.factor(cyl)6  -6.9208     1.5583  -4.441                           0.000119 ***
as.factor(cyl)8 -11.5636     1.2986  -8.905                           8.57e-10 ***

pp adjusted

  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = mtcars$mpg ~ as.factor(mtcars$cyl))

$`as.factor(mtcars$cyl)`
          diff        lwr        upr                                      p adj
6-4  -6.920779 -10.769350 -3.0722086                                    0.0003424
8-4 -11.563636 -14.770779 -8.3564942                                    0.0000000
8-6  -4.642857  -8.327583 -0.9581313                                    0.0112287

最终,没有什么比放开引擎盖下的引擎更放心的了,除了模型矩阵和列空间中的投影之外,这无非是。对于方差分析,这些实际上非常简单:

(1)[y1y2y3.yn]=[100100010010...001001][μ1μ2μ3]+[ε1ε2ε3.εn]

cyl 4cyl 6cyl 8yij=μi+ϵijμijiyij

另一方面,OLS回归的模型矩阵为:

[y1y2y3y4yn]=[1x12x131x22x231x32x331x42x431xn2xn3][β0β1β2]+[ε1ε2ε3ε4εn]

yi=β0+β1xi1+β2xi2+ϵiβ0β1β2weightdisplacement

lm(mpg ~ wt + as.factor(cyl), data = mtcars)weightβ0weightβ11cyl 4cyl 411(1),cyl 6cyl 8

[y1y2y3y4y5yn]=[1x11x21x31x41x51xn][β0β1]+[101010010101][μ~2μ~3]+[ε1ε2ε3ε4ε5εn]

1μ~2.~

fit <- lm(mpg ~ wt + as.factor(cyl), data = mtcars)
summary(fit)$coef[3] #[1] -4.255582 (difference between intercepts cyl==4 and cyl==6 in OLS)
fit <- lm(mpg ~ as.factor(cyl), data = mtcars)
summary(fit)$coef[2] #[1] -6.920779 (difference between group mean cyl==4 and cyl==6)

1μ~3yi=β0+β1xi+μ~i+ϵi


6
+1,我喜欢你的图解!出版质量!
海涛杜

@ hxd1011这对你很好。我很感激。
安东尼·帕雷拉达

6

Antoni Parellada和usεr11852的回答很好。我将使用来解决您的编码角度问题R

方差分析不会告诉您有关线性模型系数的任何信息。那么线性回归与ANOVA有何相同?

实际上,我们可以使用的aov功能R可以与相同lm。这里有些例子。

> lm_fit=lm(mpg~as.factor(cyl),mtcars)

> aov_fit=aov(mpg~as.factor(cyl),mtcars)

> coef(lm_fit)
    (Intercept) as.factor(cyl)6 as.factor(cyl)8 
      26.663636       -6.920779      -11.563636 

> coef(aov_fit)
    (Intercept) as.factor(cyl)6 as.factor(cyl)8 
      26.663636       -6.920779      -11.563636 

> all(predict(lm_fit,mtcars)==predict(aov_fit,mtcars))
[1] TRUE

如您所见,就像线性模型一样,我们不仅可以从ANOVA模型获得系数,而且可以将其用于预测。

如果我们检查帮助文件的aov功能,它会说

为lm提供了一个包装,用于将线性模型拟合到平衡或不平衡的实验设计中。与lm的主要区别在于打印,摘要等处理拟合的方式:这是用传统的方差分析语言而不是线性模型来表达的。


1

如果我们将所有数据条目都放入一个单独的Y列中,其余的列则是指示变量1 {该数据是原始方差分析中第j列的元素},则可以对Y进行简单的线性回归在任何其他列(例如B列)中,您应该获得与ANOVA问题中相同的DF,SS,MS和F测试统计量。

因此,通过使用二进制变量写入数据,可以将ANOVA视为“线性回归”。还要注意,例如,Y在B上的回归的回归系数应与平均值相同。使用原始数据计算出的B列的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.