Apakah ada cara untuk menggunakan matriks kovarian untuk mencari koefisien untuk regresi berganda?

23

Untuk regresi linier sederhana, koefisien regresi dapat dihitung langsung dari matriks varians-kovarians , oleh mana adalah indeks variabel dependen, dan adalah indeks variabel penjelas.C

Cd,eCe,e
de

Jika seseorang hanya memiliki matriks kovarians, apakah mungkin untuk menghitung koefisien untuk model dengan beberapa variabel penjelas?

ETA: Untuk dua variabel penjelas, tampak bahwa dan analog dengan . Saya tidak segera melihat cara memperluas ini ke tiga atau lebih variabel.

β1=Cov(y,x1)var(x2)Cov(y,x2)Cov(x1,x2)var(x1)var(x2)Cov(x1,x2)2
β2
David
sumber
3
Vektor koefisien β^ adalah solusi untuk XY=(XX)1β . Beberapa manipulasi aljabar mengungkapkan bahwa ini sebenarnya sama dengan rumus yang Anda berikan dalam kasus 2-koefisien. Ditata dengan baik di sini: stat.purdue.edu/~jennings/stat514/stat512notes/topic3.pdf . Tidak yakin apakah itu membantu sama sekali. Tapi saya berani menebak bahwa ini secara umum tidak mungkin didasarkan pada formula itu.
shadowtalker
1
@ David Apakah Anda mencari cara untuk memperluas ini ke sejumlah variabel penjelas (lebih dari 2)? Saya butuh ekspresi.
Jane Wayne
1
@JaneWayne Saya tidak yakin saya mengerti pertanyaan Anda: whuber memberikan solusi di bawah ini dalam bentuk matriks,C1(Cov(Xi,y))
David
1
ya saya mempelajarinya dan dia benar.
Jane Wayne

Jawaban:

36

Ya, matriks kovarians dari semua variabel - penjelas dan respons - berisi informasi yang diperlukan untuk menemukan semua koefisien, asalkan istilah intersep (konstan) dimasukkan dalam model. (Meskipun kovarian tidak memberikan informasi tentang istilah konstan, ia dapat ditemukan dari sarana data.)


Analisis

Biarkan data untuk variabel penjelas diatur sebagai vektor kolom berdimensi dan variabel respon menjadi vektor kolom , dianggap sebagai realisasi dari variabel acak . Estimasi kuadrat terkecil biasa dari koefisien dalam modelnx1,x2,,xpyYβ^

E(Y)=α+Xβ

diperoleh dengan merakit vektor kolom ke dalam array dan menyelesaikan sistem persamaan linearp+1X0=(1,1,,1),X1,,Xpn×p+1X

XXβ^=Xy.

Ini setara dengan sistem

1nXXβ^=1nXy.

Eliminasi gaussian akan menyelesaikan sistem ini. Ini melanjutkan dengan berdampingan dengan matriks dan vektor ke dalam array dan mengurangi baris. p+1×p+11nXXp+11nXyp+1×p+2A

Langkah pertama akan memeriksa . Menemukan ini bukan nol, maka hasil untuk mengurangi kelipatan yang tepat dari baris pertama dari baris yang tersisa untuk nol keluar entri yang tersisa di kolom pertama. Multiples ini akan menjadi dan jumlahnya dikurangi dari entri akan sama dengan . Ini hanya rumus untuk kovarians dan . Selain itu, angka yang tersisa di posisi sama dengan1n(XX)11=1nX0X0=1A1nX0Xi=X¯iAi+1,j+1=XiXjX¯iX¯jXiXji+1,p+21nXiyXi¯y¯, kovarian dengan .Xiy

Dengan demikian, setelah langkah pertama eliminasi Gaussian sistem dikurangi menjadi pemecahan

Cβ^=(Cov(Xi,y))

dan jelas - karena semua koefisien adalah kovarian - solusi itu dapat ditemukan dari matriks kovarians dari semua variabel.

(Ketika tidak dapat dibalik, solusinya dapat ditulis . Rumus yang diberikan dalam pertanyaan adalah kasus khusus dari ini ketika dan Menulis formula seperti itu secara eksplisit akan menjadi lebih dan lebih kompleks dengan tumbuh. Selain itu, mereka lebih rendah untuk perhitungan numerik, yang paling baik dilakukan dengan memecahkan sistem persamaan daripada dengan membalikkan matriks )CC1(Cov(Xi,y))p=1p=2pC

Istilah konstan akan menjadi perbedaan antara rata-rata dan nilai rata-rata yang diprediksi dari taksiran, .yXβ^


Contoh

Sebagai ilustrasi, Rkode berikut membuat beberapa data, menghitung kovariansi mereka, dan memperoleh estimasi koefisien kuadrat terkecil hanya dari informasi itu. Ini membandingkannya dengan estimasi yang diperoleh dari estimator kuadrat-terkecil lm.

#
# 1. Generate some data.
#
n <- 10        # Data set size
p <- 2         # Number of regressors
set.seed(17)
z <- matrix(rnorm(n*(p+1)), nrow=n, dimnames=list(NULL, paste0("x", 1:(p+1))))
y <- z[, p+1]
x <- z[, -(p+1), drop=FALSE]; 
#
# 2. Find the OLS coefficients from the covariances only.
#
a <- cov(x)
b <- cov(x,y)
beta.hat <- solve(a, b)[, 1]  # Coefficients from the covariance matrix
#
# 2a. Find the intercept from the means and coefficients.
#
y.bar <- mean(y)
x.bar <- colMeans(x)
intercept <- y.bar - x.bar %*% beta.hat  

Output menunjukkan kesepakatan antara dua metode:

(rbind(`From covariances` = c(`(Intercept)`=intercept, beta.hat),
       `From data via OLS` = coef(lm(y ~ x))))
                  (Intercept)        x1        x2
From covariances     0.946155 -0.424551 -1.006675
From data via OLS    0.946155 -0.424551 -1.006675
whuber
sumber
1
Terima kasih, @whuber! Ini persis apa yang saya cari, dan otak saya yang sudah berhenti berkembang tidak dapat mencapai. Sebagai tambahan, motivasi untuk pertanyaan ini adalah bahwa karena berbagai alasan kita pada dasarnya tidak memiliki lengkap yang tersedia, tetapi miliki dari perhitungan sebelumnya. Xcov(z)
David
7
Jawaban seperti ini menaikkan palang Salib ini Divalidasi
jpmuc
@whuber Dalam contoh Anda, Anda menghitung intersep dari ydan xdan beta.hat. Itu ydan xmerupakan bagian dari data asli. Apakah mungkin untuk mendapatkan intersep dari matriks kovarians dan cara sendiri? Bisakah Anda memberikan notasi?
Jane Wayne
@Jane Hanya diberikan sarana , terapkan pada mereka: Saya telah mengubah kode untuk mencerminkan hal ini. X¯β^
X¯β^=Xβ^¯.
whuber
+1 sangat membantu untuk kode
Michael