Saya ingin mundur vektor B terhadap masing-masing kolom dalam matriks A. Ini sepele jika tidak ada data yang hilang, tetapi jika matriks A berisi nilai yang hilang, maka regresi saya terhadap A dibatasi untuk menyertakan hanya baris di mana semua nilai ada ( perilaku default na.omit ). Ini menghasilkan hasil yang salah untuk kolom tanpa data yang hilang. Saya bisa mundur matriks B kolom terhadap kolom individu dari matriks A, tapi saya punya ribuan regresi yang harus dilakukan, dan ini sangat lambat dan tidak elegan. Fungsi na.exclude tampaknya dirancang untuk kasus ini, tapi saya tidak bisa membuatnya berfungsi. Apa yang saya lakukan salah di sini? Menggunakan R 2.13 pada OSX, jika itu penting.
A = matrix(1:20, nrow=10, ncol=2)
B = matrix(1:10, nrow=10, ncol=1)
dim(lm(A~B)$residuals)
# [1] 10 2 (the expected 10 residual values)
# Missing value in first column; now we have 9 residuals
A[1,1] = NA
dim(lm(A~B)$residuals)
#[1] 9 2 (the expected 9 residuals, given na.omit() is the default)
# Call lm with na.exclude; still have 9 residuals
dim(lm(A~B, na.action=na.exclude)$residuals)
#[1] 9 2 (was hoping to get a 10x2 matrix with a missing value here)
A.ex = na.exclude(A)
dim(lm(A.ex~B)$residuals)
# Throws an error because dim(A.ex)==9,2
#Error in model.frame.default(formula = A.ex ~ B, drop.unused.levels = TRUE) :
# variable lengths differ (found for 'B')
r
missing-data
linear-model
David Quigley
sumber
sumber
Jawaban:
Sunting: Saya salah mengerti pertanyaan Anda. Ada dua aspek:
a)
na.omit
danna.exclude
keduanya melakukan penghapusan dengan santai sehubungan dengan prediktor dan kriteria. Mereka hanya berbeda dalam fungsi ekstraktor yang sukaresiduals()
ataufitted()
akanNA
mengisi output mereka dengan s untuk kasus yang dihilangkanna.exclude
, sehingga memiliki output dengan panjang yang sama dengan variabel input.b) Masalah sebenarnya bukan dengan perbedaan antara
na.omit
danna.exclude
, Anda tampaknya tidak ingin penghapusan dengan santai yang memperhitungkan variabel kriteria, yang keduanya lakukan.Hasil regresi tergantung pada matriks (pseudoinverse dari matriks desain , koefisien ) dan topi matriks , nilai yang dipasang ). Jika Anda tidak ingin penghapusan dengan santai, Anda memerlukan matriks desain berbeda untuk setiap kolom , jadi tidak ada jalan lain untuk menyesuaikan regresi terpisah untuk setiap kriteria. Anda dapat mencoba menghindari overhead dengan melakukan sesuatu di sepanjang baris berikut ini: X β = X + Y H = X X + Y = H Y X YX+= ( X′X)- 1X′ X β^= X+Y H= XX+ Y^= HY X Y
lm()
Perhatikan bahwa mungkin ada cara yang lebih baik secara numerik untuk menghitung dan , Anda dapat memeriksa dekomposisi- sebagai gantinya. Pendekatan SVD dijelaskan di sini di SE . Saya belum waktunya pendekatan di atas dengan matriks besar terhadap benar-benar menggunakan . H Q R YX+ H Q R Y
lm()
sumber
Saya bisa memikirkan dua cara. Salah satunya adalah menggabungkan data menggunakan
na.exclude
dan kemudian memisahkan data lagi:Cara lain adalah dengan menggunakan
data
argumen dan membuat formula.Jika Anda melakukan banyak regresi, cara pertama harus lebih cepat, karena lebih sedikit sihir latar belakang yang dilakukan. Meskipun jika Anda hanya perlu koefisien dan residu saya sarankan menggunakan
lsfit
, yang jauh lebih cepat daripadalm
. Cara kedua sedikit lebih baik, tetapi pada laptop saya mencoba untuk melakukan ringkasan tentang regresi yang menghasilkan kesalahan. Saya akan mencoba melihat apakah ini bug.sumber
Contoh berikut menunjukkan cara membuat prediksi dan residu yang sesuai dengan kerangka data asli (menggunakan opsi "na.action = na.exclude" dalam lm () untuk menentukan bahwa NA harus ditempatkan dalam vektor residual dan prediksi di mana bingkai data asli memiliki nilai yang hilang. Hal ini juga menunjukkan bagaimana menentukan apakah prediksi harus mencakup hanya pengamatan di mana variabel penjelas dan variabel dependen lengkap (yaitu, prediksi sampel ketat) atau observasi di mana variabel penjelas lengkap, dan karenanya prediksi Xb dimungkinkan, ( yaitu, termasuk prediksi out-of-sample untuk pengamatan yang memiliki variabel penjelas lengkap tetapi tidak ada variabel dependen).
Saya menggunakan cbind untuk menambahkan prediksi dan variabel sisa ke dataset asli.
sumber