Biarkan saya memberi warna pada gagasan bahwa OLS dengan kategori ( dummy-coded ) regressor setara dengan faktor - faktor dalam ANOVA. Dalam kedua kasus ada tingkat (atau kelompok dalam kasus ANOVA).
Dalam regresi OLS, biasanya juga memiliki variabel kontinu dalam regressor. Ini secara logis memodifikasi hubungan dalam model fit antara variabel kategori dan variabel dependen (DC). Tetapi tidak sampai membuat paralelnya tidak dapat dikenali.
Berdasarkan mtcars
kumpulan data, pertama-tama kita dapat memvisualisasikan model lm(mpg ~ wt + as.factor(cyl), data = mtcars)
sebagai kemiringan yang ditentukan oleh variabel kontinu wt
(berat), dan berbagai intersep memproyeksikan pengaruh variabel kategorikal cylinder
(empat, enam atau delapan silinder). Bagian terakhir inilah yang membentuk paralel dengan ANOVA satu arah.
Mari kita lihat secara grafis pada sub-plot ke kanan (tiga sub-plot ke kiri dimasukkan untuk perbandingan sisi-ke-sisi dengan model ANOVA yang dibahas segera sesudahnya):
Setiap mesin silinder diberi kode warna, dan jarak antara garis yang dipasang dengan intersep yang berbeda dan data cloud adalah setara dengan variasi dalam-kelompok dalam ANOVA. Perhatikan bahwa intersep dalam model OLS dengan variabel kontinu ( weight
) tidak secara matematis sama dengan nilai rata-rata dalam-kelompok berarti dalam ANOVA, karena efek weight
dan matriks model yang berbeda (lihat di bawah): rata-rata mpg
untuk 4-silinder mobil, misalnya, mean(mtcars$mpg[mtcars$cyl==4]) #[1] 26.66364
, sedangkan OLS "dasar" intercept (mencerminkan oleh konvensi cyl==4
(terendah ke angka tertinggi memesan di R)) sangat berbeda: summary(fit)$coef[1] #[1] 33.99079
. Kemiringan garis adalah koefisien untuk variabel kontinu weight
.
Jika Anda mencoba menekan efek weight
dengan meluruskan garis-garis ini secara mental dan mengembalikannya ke garis horizontal, Anda akan berakhir dengan plot ANOVA dari model aov(mtcars$mpg ~ as.factor(mtcars$cyl))
pada tiga sub-plot di sebelah kiri. The weight
regressor sekarang keluar, tapi hubungan dari titik ke penyadapan yang berbeda kira-kira diawetkan - kita hanya berputar berlawanan arah jarum jam dan menyebar plot sebelumnya tumpang tindih untuk setiap tingkat yang berbeda (sekali lagi, hanya sebagai perangkat visual untuk "melihat" koneksi; bukan sebagai persamaan matematis, karena kami membandingkan dua model yang berbeda!).
cylinder
20x
Dan melalui penjumlahan segmen vertikal inilah kita dapat menghitung residu secara manual:
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)
Hasilnya: SumSq = 301.2626
dan TSS - SumSq = 824.7846
. Dibandingkan dengan:
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
Hasil yang persis sama dengan pengujian dengan ANOVA model linier dengan hanya kategori cylinder
sebagai regressor:
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
Jadi, yang kita lihat adalah bahwa residual - bagian dari total varians yang tidak dijelaskan oleh model - serta variansnya sama apakah Anda memanggil OLS dari tipe lm(DV ~ factors)
, atau ANOVA ( aov(DV ~ factors)
): ketika kita menghapus model variabel kontinu kita berakhir dengan sistem yang identik. Demikian pula, ketika kita mengevaluasi model secara global atau sebagai ANOVA omnibus (bukan level demi level), kita secara alami mendapatkan nilai-p yang sama F-statistic: 39.7 on 2 and 29 DF, p-value: 4.979e-09
.
Ini tidak berarti bahwa pengujian tingkat individu akan menghasilkan nilai p yang identik. Dalam kasus OLS, kami dapat meminta summary(fit)
dan mendapatkan:
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
Pada akhirnya, tidak ada yang lebih meyakinkan daripada mengintip mesin di bawah kap, yang tidak lain adalah matriks model, dan proyeksi di ruang kolom. Ini sebenarnya cukup sederhana untuk ANOVA:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢y1y2y3⋮⋮⋮.yn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢11⋮00⋮.0000⋮11⋮.0000⋮00⋮.11⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎡⎣⎢μ1μ2μ3⎤⎦⎥+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢ε1ε2ε3⋮⋮⋮.εn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥(1)
cyl 4
cyl 6
cyl 8
yij=μi+ϵijμijiyij
Di sisi lain, model matriks untuk regresi OLS adalah:
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢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
β0weight
β11cyl 4
cyl 4
11(1),cyl 6
cyl 8
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢y1y2y3y4y5⋮yn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢11111⋮1x1x2x3x4x5⋮xn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[β0β1]+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢11100⋮000011⋮1⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[μ~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