Позвольте мне немного покраснеть идею о том, что 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:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢y1y2y3⋮⋮⋮.yn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢11⋮00⋮.0000⋮11⋮.0000⋮00⋮.11⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎡⎣⎢μ1μ2μ3⎤⎦⎥+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢ε1ε2ε3⋮⋮⋮.εn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥(1)
Это было бы односторонний ANOVA модель матрицы с тремя уровнями (например cyl 4
, cyl 6
, cyl 8
), суммированы , где является средним на каждом уровне или группы: когда добавляется ошибка или остаток для наблюдения группы или уровня , мы получаем фактическое наблюдение DV .yij=μi+ϵijμijiyij
С другой стороны, модельная матрица для регрессии OLS:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢y1y2y3y4⋮yn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1111⋮1x12x22x32x42⋮xn2x13x23x33x43⋮xn3⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎡⎣⎢β0β1β2⎤⎦⎥+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢ε1ε2ε3ε4⋮εn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
Это имеет вид с одним и двумя наклонами ( и ) каждый для различные непрерывные переменные, скажем, и .yi=β0+β1xi1+β2xi2+ϵiβ0β1β2weight
displacement
Теперь уловка состоит в том, чтобы увидеть, как мы можем создавать различные перехваты, как в первоначальном примере, lm(mpg ~ wt + as.factor(cyl), data = mtcars)
- поэтому давайте избавимся от второго наклона и придерживаемся исходной единственной непрерывной переменной weight
(другими словами, один столбец, кроме столбца единиц матрица модели, отсекаемый отрезок и наклон для , ). Столбец по умолчанию будет соответствовать перехвату. Опять же, его значение не идентично среднему значению ANOVA для группы , наблюдение, которое не должно удивлять, сравнивая столбец в матрице модели OLS (ниже) с первым столбцомβ0weight
β11cyl 4
cyl 4
11находится в матрице модели ANOVA которая выбирает только примеры с 4 цилиндрами. Перехват будет смещен посредством фиктивного кодирования, чтобы объяснить эффект и следующим образом:(1),cyl 6
cyl 8
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢y1y2y3y4y5⋮yn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢11111⋮1x1x2x3x4x5⋮xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[β0β1]+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢11100⋮000011⋮1⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[μ~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