Mengapa ANOVA setara dengan regresi linier?

50

Saya membaca bahwa ANOVA dan regresi linier adalah hal yang sama. Bagaimana bisa, mengingat bahwa output ANOVA adalah beberapa nilai dan beberapa p- nilai berdasarkan yang Anda simpulkan jika sampel berarti di sampel yang berbeda adalah sama atau berbeda.Fp

Tetapi dengan asumsi cara tidak sama (menolak hipotesis nol), ANOVA tidak memberi tahu Anda tentang koefisien model linier. Jadi bagaimana regresi linier sama dengan ANOVA?

Pemenang
sumber

Jawaban:

44

ANOVA dan regresi linier adalah setara ketika kedua model menguji terhadap hipotesis yang sama dan menggunakan pengkodean identik. Model berbeda dalam tujuan dasar mereka: ANOVA sebagian besar bersangkutan dengan perbedaan hadir antara sarana kategori dalam data sementara regresi linier sebagian besar perhatian untuk memperkirakan respon berarti sampel dan terkait .σ2

Agaknya orang bisa menggambarkan ANOVA sebagai regresi dengan variabel dummy. Kita dapat dengan mudah melihat bahwa ini adalah kasus dalam regresi sederhana dengan variabel kategori. Variabel kategorikal akan dikodekan sebagai matriks indikator (matriks 0/1tergantung pada apakah subjek merupakan bagian dari kelompok tertentu atau tidak) dan kemudian digunakan langsung untuk solusi sistem linear yang dijelaskan oleh regresi linier. Mari kita lihat contoh dengan 5 grup. Demi argumen, saya akan berasumsi bahwa rata-rata group1sama dengan 1, rata-rata group2sama dengan 2, ... dan rata-rata group5sama dengan 5. (saya menggunakan MATLAB, tetapi hal yang persis sama adalah setara dalam 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

Seperti yang bisa dilihat dalam skenario ini hasilnya di mana persis sama. Perbedaan numerik menit disebabkan oleh desain yang tidak seimbang sempurna serta prosedur estimasi yang mendasari; ANOVA mengakumulasikan kesalahan numerik sedikit lebih agresif. Untuk hal itu kita cocok intercept, LRbetas(1); kita bisa cocok dengan model intersep-free tapi itu tidak akan menjadi regresi linier "standar". (Namun hasilnya akan lebih dekat dengan ANOVA.)

F

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

Ini karena prosedur menguji hipotesis yang sama tetapi dengan susunan kata yang berbeda: ANOVA akan memeriksa secara kualitatif apakah " rasionya cukup tinggi untuk menunjukkan bahwa tidak ada pengelompokan yang tidak masuk akal " sementara regresi linier secara kualitatif akan memeriksa apakah " rasionya cukup tinggi untuk menyarankan penyadapan saja." model mungkin tidak memadai ".
(Ini adalah interpretasi yang agak bebas dari " kemungkinan untuk melihat nilai sama atau lebih besar daripada yang diamati di bawah hipotesis nol " dan itu tidak dimaksudkan sebagai definisi buku teks.)

Kembali ke bagian akhir dari pertanyaan Anda tentang " ANOVA memberi tahu Anda apa-apa tentang koefisien model linier (dengan asumsi berarti tidak sama ") Saya harap Anda sekarang dapat melihat bahwa ANOVA, dalam hal desain Anda sederhana / cukup seimbang , memberi tahu Anda segala sesuatu yang model linear lakukan. Interval kepercayaan untuk rata-rata grup akan sama dengan yang Anda miliki untuk Andaβ, dll. Jelas ketika seseorang mulai menambahkan beberapa kovariat dalam model regresi, ANOVA satu arah yang sederhana tidak memiliki kesetaraan langsung. Dalam hal ini seseorang menambah informasi yang digunakan untuk menghitung respon rata-rata regresi linier dengan informasi yang tidak tersedia secara langsung untuk ANOVA satu arah. Saya percaya bahwa seseorang dapat mengekspresikan kembali hal-hal dalam istilah ANOVA sekali lagi tetapi sebagian besar merupakan latihan akademis.

Makalah yang menarik tentang masalah ini adalah makalah Gelman 2005 berjudul: Analisis Varians - Mengapa itu lebih penting dari sebelumnya . Beberapa poin penting diangkat; Saya tidak sepenuhnya mendukung makalah ini (saya pikir saya secara pribadi lebih selaras dengan pandangan McCullach) tetapi ini bisa menjadi bacaan yang konstruktif.

Sebagai catatan akhir: Plot mengental ketika Anda memiliki model efek campuran . Di sana Anda memiliki konsep berbeda tentang apa yang dapat dianggap sebagai gangguan atau informasi aktual mengenai pengelompokan data Anda. Masalah-masalah ini berada di luar cakupan pertanyaan ini tetapi saya pikir mereka layak menerima anggukan.

usεr11852 kata Reinstate Monic
sumber
6
Jawaban yang diterima pada halaman Cross Validated ini juga menunjukkan hubungan antara ANOVA dan regresi dengan cukup baik, melalui pendekatan matematika yang dengan baik melengkapi pendekatan praktis dari jawaban ini.
EdM
+1. Oh iya, jawaban MichaelHardy cukup bagus di utas itu. Terima kasih telah menyebutkannya!
usεr11852 mengatakan Reinstate Monic
+1, di samping itu, saya merasa angka ini dalam jawaban ini sangat membantu untuk menjembatani kesenjangan antara ANOVA dan regresi linier
Haitao Du
Apakah Anda setuju bahwa ANOVA adalah Gaussian GLM dengan prediktor kategoris?
Digio
@Digio: Tidak, itu akan terlalu menyederhanakan ketepatan penggunaannya; Saya akan menjauhkan GLM dari gambar.
usεr11852 mengatakan Reinstate Monic
55

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 mtcarskumpulan 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):

masukkan deskripsi gambar di sini

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 weightdan matriks model yang berbeda (lihat di bawah): rata-rata mpguntuk 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 weightdengan 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 weightregressor 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!).

cylinder20x

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.2626dan 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 cylindersebagai 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:

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

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

Di sisi lain, model matriks untuk regresi OLS adalah:

[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

Antoni Parellada
sumber
6
+1, saya suka ilustrasi grafis Anda !! kualitas publikasi!
Haitao Du
@ hxd1011 Ini sangat baik dari Anda. Saya menghargainya.
Antoni Parellada
6

Antoni Parellada dan usεr11852 memiliki jawaban yang sangat bagus. Saya akan menjawab pertanyaan Anda untuk mengkode perspektif R.

ANOVA tidak memberi tahu Anda apa pun tentang koefisien model linier. Jadi bagaimana regresi linier sama dengan ANOVA?

Bahkan, kita bisa aovberfungsi dalam Rdapat digunakan sama seperti lm. Berikut ini beberapa contohnya.

> 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

Seperti yang Anda lihat, tidak hanya kita bisa mendapatkan koefisien dari model ANOVA, tetapi juga kita bisa menggunakannya untuk prediksi, seperti model linear.

Jika kami memeriksa file bantuan untuk aovfungsi yang tertulis

Ini memberikan pembungkus ke lm untuk pemasangan model linier ke desain eksperimental yang seimbang atau tidak seimbang. Perbedaan utama dari lm adalah dalam cara mencetak, ringkasan dan seterusnya menangani kesesuaian: ini dinyatakan dalam bahasa tradisional dari analisis varian daripada dari model linier.

Haitao Du
sumber
1

Jika kita mengambil semua entri data dan mengaturnya menjadi satu kolom tunggal Y, dengan sisa kolom menjadi variabel indikator 1 {data ith adalah elemen kolom ke-j dalam pengaturan anova asli} kemudian dengan mengambil regresi linear sederhana Y pada salah satu dari kolom lain (katakanlah kolom B), Anda harus memperoleh statistik uji DF, SS, MS dan F yang sama seperti pada masalah ANOVA Anda.

Dengan demikian ANOVA dapat 'diperlakukan sebagai' Regresi Linier dengan menulis data dengan variabel biner. Perhatikan juga bahwa koefisien regresi untuk, katakanlah, regresi Y pada B harus sama dengan rata-rata. dari kolom B, dihitung dengan data asli.

J. Taschereau
sumber