Memperoleh prediksi efek-tetap hanya dari model campuran pada data baru di R

8

Saya ingin membuat prediksi untuk model campuran (logistik melalui glmer) pada kumpulan data baru hanya menggunakan efek tetap, menahan efek acak ke 0. Tapi saya mengalami kesulitan menyiapkan model matriks untuk dapat menghitungnya.

Karena kelas mer tidak memiliki metode prediksi, dan karena saya ingin menghilangkan efek acak untuk prediksi pada set data baru, saya pikir saya perlu membuat matriks model untuk efek tetap dari struktur yang sama yang digunakan dalam aslinya model, tetapi menggunakan data baru. Kemudian kalikan dengan koefisien efek tetap dalam model.

Bagian efek tetap dari rumus model saya berisi faktor dan istilah interaksi antara efek tetap numerik, jadi ini sedikit lebih rumit daripada hanya mengekstraksi variabel tetap dari matriks. mis. Saya perlu memastikan ekspansi kontras faktor sama dengan aslinya, istilah interaksi dicantumkan dengan benar, dll.

Jadi pertanyaan saya adalah: apa pendekatan umum yang lebih mudah untuk membangun matriks model baru yang meniru struktur matriks model asli yang digunakan dalam membuat model?

Saya sudah mencoba model.matrix (my.model, data = newdata) tetapi itu tampaknya mengembalikan matriks model asli, bukan yang didasarkan pada data baru.

Kode sampel:

library(lme4)

cake2 <- head(cake) # cake2 is "new" data frame for future predictions

# recipe is a fixed effect factor, temp is fixed effect numeric, replicate is random effect
m <- lmer(angle ~ temp + recipe + (1 | replicate), data=cake)
summary(m)

nrow(cake2)         # but new data frame has 6 rows
nrow(cake)          # original data frame has 270 rows

# attempt to make new model matrix using different data frame
mod.mat.cake2 <- model.matrix(m, data=cake2)
nrow(mod.mat.cake2) # 270 rows, same as orig data frame

Saya mencoba metode lain seperti mengekstraksi istilah dari rumus dan membangun formula baru dari itu, tetapi tampaknya terlalu berbelit-belit, dan rapuh dalam menangani faktor dan istilah interaksi.

Bagaimana saya bisa mendapatkan mod.mat.cake2 menjadi matriks model efek tetap berdasarkan rumus dalam m, tetapi menggunakan nilai dari cake2? Atau adakah cara yang lebih mudah untuk mendapatkan prediksi fixed-effect only dari model lmer?

Semua bantuan dihargai. Terima kasih.

colonel.triq
sumber
pendekatan yang sangat kasar tetapi sederhana: jika waktu komputasi bukan merupakan faktor utama (yaitu Anda tidak harus melakukan ini satu ton kali), Anda dapat memasukkan data baru lm()dan mengekstrak matriks model dari fit, dan menerapkannya pada koefisien model dari fit sebelumnya.
Makro

Jawaban:

13

Mungkin ini curang, tapi

fixedformula <- as.formula(lme4.0:::nobars(formula(m))[-2])
model.matrix(fixedformula,newdata=cake2)

catatan:

  • Saya menggunakan lme4.0di sini, yang merupakan versi r-peleburan "tua" (CRAN) lme4: Anda dapat menggantikan lme4untuk lme4.0dalam kode di atas
  • versi baru (r-forge / development) dari lme4memiliki predictmetode: dalam kasus itu

    predict(m,re.form=NA,newdata=cake2)

berfungsi dengan baik ( re.form=NAsetel semua efek acak menjadi nol, setara dengan level=0yang lama predict.lme)

Ben Bolker
sumber
1
Ben terima kasih. Saya kesulitan mendapatkan solusi pertama yang berfungsi dengan baik. Tetapi beralih ke versi dev lme4 dan menggunakan fungsi predict / REform = NA melakukan trik tanpa harus mengacaukan rincian matriks model. Ada beberapa fitur yang tampaknya belum diimplementasikan dalam versi dev yang saya gunakan dalam kode saya (khususnya, saya tidak bisa mengekstrak efek acak postVars dengan mudah), tetapi saya lebih suka dapat menggunakan fungsi prediksi dan menunggu sampai lme4 baru selesai untuk bagian lainnya.
colonel.triq
Mungkin sudah jelas, tetapi jika Anda dapat menulis contoh kecil (mandiri) tentang apa yang ingin Anda lakukan yang tidak berfungsi dalam versi dev dan mengirimkannya kepada saya, itu akan berguna
Ben Bolker