Почему ANOVA эквивалентен линейной регрессии?


50

Я читал, что ANOVA и линейная регрессия - это одно и то же. Как это может быть, учитывая, что выход ANOVA представляет собой некоторое значение и некоторое значение на основании которого вы заключаете, что выборка означает, что для разных выборок значения одинаковы или различны.pFp

Но если предположить, что средние значения не равны (отвергнуть нулевую гипотезу), ANOVA ничего не говорит вам о коэффициентах линейной модели. Так как же линейная регрессия такая же, как ANOVA?

Ответы:


44

ANOVA и линейная регрессия эквивалентны, когда две модели проверяют одни и те же гипотезы и используют идентичное кодирование. Модели различаются по своей основной цели: 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

Как видно из этого сценария, результаты точно такие же. Минутная числовая разница обусловлена ​​тем, что дизайн не является идеально сбалансированным, а также процедурой оценки подложки; ANOVA накапливает числовые ошибки более агрессивно. Для этого мы подходим к перехвату LRbetas(1); мы могли бы соответствовать модели без перехватов, но это не было бы «стандартной» линейной регрессией. (В этом случае результаты будут еще ближе к ANOVA.)

В -статистики (соотношение средств) в случае ANOVA и в случае линейной регрессии будет также быть тем же самым для приведенного выше примера:F

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

Это связано с тем, что процедуры проверяют одну и ту же гипотезу, но с разными формулировками: ANOVA качественно проверит, достаточно ли « соотношение достаточно, чтобы предположить, что никакая группировка неправдоподобна », а линейная регрессия качественно проверит, достаточно ли это соотношение, чтобы предложить только перехват модель возможно неадекватна ".
(Это несколько свободная интерпретация « возможности увидеть значение, равное или большее, чем значение, наблюдаемое при нулевой гипотезе », и это не подразумевается как определение из учебника.)

Возвращаясь к заключительной части вашего вопроса о том, что « ANOVA ничего не говорит (говорит вам) о коэффициентах линейной модели (при условии, что средние значения не равны »), я надеюсь, что теперь вы можете видеть, что ANOVA, в случае, если ваш дизайн прост / сбалансирован , говорит вам все, что линейная модель будет. Доверительные интервалы для групповых значений будут такими же, как и для вашейβи т. д. Очевидно, что когда кто-то начинает добавлять несколько ковариат в своей регрессионной модели, простой односторонний ANOVA не имеет прямой эквивалентности. В этом случае можно дополнить информацию, используемую для расчета среднего отклика линейной регрессии, информацией, которая не доступна напрямую для одностороннего ANOVA. Я считаю, что можно еще раз выразить вещи в терминах ANOVA, но это в основном академическое упражнение.

Интересным документом по этому вопросу является документ Гельмана 2005 года под названием: « Анализ отклонений - почему он важнее, чем когда-либо» . Некоторые важные вопросы подняты; Я не полностью поддерживаю эту статью (я думаю, что лично я гораздо больше согласен с мнением МакКаллаха), но это может быть конструктивное прочтение.

И последнее замечание: сюжет утолщается, когда у вас смешанные модели эффектов . Там у вас есть различные понятия о том, что может считаться неудобством или реальной информацией относительно группировки ваших данных. Эти проблемы выходят за рамки этого вопроса, но я думаю, что они достойны одобрения.


6
Принятый ответ на этой странице с перекрестной проверкой также довольно хорошо показывает связь между ANOVA и регрессией посредством математического подхода, который прекрасно дополняет практический подход этого ответа.
EdM

+1. О да, ответ @ MichaelHardy довольно хорош в этой теме. Спасибо за упоминание этого!
usεr11852 говорит восстановить Monic

+1, кроме того, я чувствую, что эта цифра в этом ответе действительно полезна для преодоления разрыва между ANOVA и линейной регрессией
Haitao Du

Согласитесь ли вы, что ANOVA - это гауссовский GLM с категориальными предикторами?
Digio

@Digio: нет, это упрощает их использование; Я бы не показывал GLM.
usεr11852 говорит восстановить Monic

55

Позвольте мне немного покраснеть идею о том, что OLS с категориальными ( фиктивно-кодированными ) регрессорами эквивалентна факторам в ANOVA. В обоих случаях существуют уровни (или группы в случае ANOVA).

При регрессии МНК чаще всего в регрессорах также присутствуют непрерывные переменные. Они логически изменяют отношение в модели соответствия между категориальными переменными и зависимой переменной (DC). Но не настолько, чтобы сделать параллель неузнаваемой.

Основываясь на mtcarsнаборе данных, мы можем сначала визуализировать модель lm(mpg ~ wt + as.factor(cyl), data = mtcars)как наклон, определяемый непрерывной переменной wt(весом), и различные перехваты, проецирующие влияние категориальной переменной cylinder(четыре, шесть или восемь цилиндров). Именно эта последняя часть образует параллель с односторонним ANOVA.

Давайте посмотрим на это графически на вспомогательном графике справа (три вспомогательных графика слева включены для параллельного сравнения с моделью ANOVA, обсуждавшейся сразу после этого):

введите описание изображения здесь

Каждый двигатель цилиндра имеет цветовую кодировку, а расстояние между подобранными линиями с различными точками пересечения и облаком данных является эквивалентом внутригрупповых изменений в ANOVA. Обратите внимание, что перехваты в модели OLS с непрерывной переменной ( weight) не являются математически такими же, как значения различных внутригрупповых средних в ANOVA, из-за эффекта weightи различных матриц модели (см. Ниже): среднее значение mpgдля 4-цилиндровые машины, например, mean(mtcars$mpg[mtcars$cyl==4]) #[1] 26.66364, в то время как МНК «базовой линия» перехват (отражающий по соглашению cyl==4( от низкого к высоким цифрам упорядочения в R)) заметно отличаются: summary(fit)$coef[1] #[1] 33.99079. Наклон линий - это коэффициент для непрерывной переменной weight.

Если вы попытаетесь подавить эффект weightпутем умственного выпрямления этих линий и возврата их к горизонтальной линии, вы получите график ANOVA модели aov(mtcars$mpg ~ as.factor(mtcars$cyl))на трех вспомогательных участках слева. weightРегрессор теперь вне, но отношения от точек к различным перехватывает грубо сохраняется - мы просто вращается против часовой стрелки и разводя ранее перекрывающихся участков для каждого различного уровня (опять же , только в качестве визуального устройства «видеть» связь, а не как математическое равенство, так как мы сравниваем две разные модели!).

Каждый уровень в коэффициенте cylinderявляется отдельным, а вертикальные линии представляют остатки или ошибки внутри группы: расстояние от каждой точки в облаке и среднее значение для каждого уровня (горизонтальная линия с цветовой кодировкой). Цветовой градиент дает нам представление о том, насколько значимы уровни при проверке модели: чем больше кластеризованы точки данных вокруг их групповых значений, тем более вероятно, что модель ANOVA будет статистически значимой. Горизонтальная черная линия около на всех графиках является средним для всех факторов. Числа в оси являются просто номером / идентификатором-заполнителем для каждой точки на каждом уровне и не имеют никакой другой цели, кроме как разделять точки вдоль горизонтальной линии, чтобы обеспечить отображение графика, отличного от коробчатых.20x

И именно через сумму этих вертикальных сегментов мы можем вручную вычислить невязки:

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.2626а TSS - 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

Точно такой же результат, как и при тестировании с помощью ANOVA линейной модели с использованием только категориального 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 ***

Это невозможно в ANOVA, которая является скорее сводным тестом. Чтобы получить эти типы оценок значения, нам нужно выполнить тест достоверной разницы Tukey Honest, который попытается уменьшить вероятность ошибки типа I в результате выполнения нескольких парных сравнений (следовательно, " "), что приведет к совершенно другой вывод: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

В конечном счете, нет ничего более обнадеживающего, чем взглянуть на двигатель под капотом, который является не чем иным, как матрицами моделей и проекциями в пространстве колонн. На самом деле это довольно просто в случае ANOVA:

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

Это было бы односторонний ANOVA модель матрицы с тремя уровнями (например cyl 4, cyl 6, cyl 8), суммированы , где является средним на каждом уровне или группы: когда добавляется ошибка или остаток для наблюдения группы или уровня , мы получаем фактическое наблюдение DV .yij=μ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(другими словами, один столбец, кроме столбца единиц матрица модели, отсекаемый отрезок и наклон для , ). Столбец по умолчанию будет соответствовать перехвату. Опять же, его значение не идентично среднему значению ANOVA для группы , наблюдение, которое не должно удивлять, сравнивая столбец в матрице модели OLS (ниже) с первым столбцомβ0weightβ11cyl 4cyl 411находится в матрице модели ANOVA которая выбирает только примеры с 4 цилиндрами. Перехват будет смещен посредством фиктивного кодирования, чтобы объяснить эффект и следующим образом:(1),cyl 6cyl 8

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

Теперь, когда третий столбец равен мы будем систематически на указывает на то, что, как и в случае с «базовой линии» перехвата в модели МНК не быть идентична группе среднего 4-цилиндровых автомобилей, но отражает его, различия между уровнями в модели МНК не являются математически межгрупповые различия в значении: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)

Аналогичным образом, когда четвертый столбец равен , фиксированное значение будет добавлено к перехвату. Следовательно, матричное уравнение будет . Следовательно, переход с этой модели на модель ANOVA - это всего лишь вопрос избавления от непрерывных переменных и понимания того, что перехват по умолчанию в OLS отражает первый уровень в ANOVA.1μ~3yi=β0+β1xi+μ~i+ϵi


6
+1, я люблю твою графическую иллюстрацию !! качество публикации!
Haitao Du

@ hxd1011 Это очень мило с вашей стороны. Я ценю это.
Антони Пареллада

6

Антони Пареллада и usεr11852 дали очень хороший ответ. Я рассмотрю ваш вопрос для перспективы кодирования с R.

ANOVA ничего не говорит о коэффициентах линейной модели. Так как же линейная регрессия такая же, как 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 заключается в том, как распечатка, сводка и т. Д. Обрабатывают подгонку: это выражается в традиционном языке анализа отклонений, а не в линейных моделях.


1

Если мы возьмем все записи данных и расположим их в одном столбце Y, а остальные столбцы будут переменными-индикаторами 1 {i-ые данные - это элемент j-го столбца в исходной компоновке anova}, то с помощью простой линейной регрессии Y на В любом другом столбце (скажем, в столбце B) вы должны получить те же статистические данные теста DF, SS, MS и F, что и в задаче ANOVA.

Таким образом, ANOVA может рассматриваться как линейная регрессия путем записи данных с помощью двоичных переменных. Также обратите внимание, что коэффициент регрессии, скажем, для регрессии Y на B должен быть таким же, как среднее значение. столбца B, рассчитывается с использованием исходных данных.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.