Apakah mungkin untuk menentukan model lmer tanpa efek tetap?

9

Dalam R, bagaimana cara menentukan model lmer tanpa efek tetap global? Misalnya, jika saya mengatakan sesuatu seperti

lmer(y ~ (1 | group) + (0 + x | group), data = my_df)

model yang pas akan

yij=a+αi+βixij

Bagaimana saya cocok dengan model

ysayaj=αsaya+βsayaxsayaj ?

Leo
sumber
Jawaban si kneejerk saya adalah itu lmer(y~0+(1|group)+(0+x|group))akan berhasil, tetapi ini menghasilkan kesalahan.
Mike Lawrence
4
Saya tidak berpikir mungkin untuk menentukan model tanpa efek tetap dengan lmer karena paket lme4 didedikasikan untuk model campuran saja (dengan setidaknya satu efek tetap dan satu efek acak). Saya tidak ingat melihat model efek acak dalam dokumentasi, dalam hal apa pun. Mungkin berguna untuk memintanya dalam daftar model R-sig-mixed-models ( stat.ethz.ch/mailman/listinfo/r-sig-mixed-models )
maxTC
1
Hanya ingin tahu, mengapa Anda ingin melakukannya? Mungkin ada cara lain untuk mendekati tujuan mendasar Anda.
Jbowman
2
tengah ydulu :)
Makro

Jawaban:

8

Seperti @Mike Lawrence menyebutkan hal yang jelas harus dilakukan ketika mendefinisikan model tanpa efek tetap adalah sesuatu dalam bentuk:

lmer(y ~ -1 + (1|GroupIndicator))

yang sebenarnya cukup mudah; satu tidak mendefinisikan intersep atau X matrix. Alasan dasar mengapa hal ini tidak berhasil adalah karena @maxTC menunjukkan " paket lme4 didedikasikan untuk model campuran saja ".

Khususnya apa yang dilakukan lmer () adalah menghitung penyimpangan yang diprofilkan dengan menyelesaikan regresi kuadrat terkecil yang dihukum antara y^ dan y serta efek acak bola kamu dan 0(Persamaan (11), Ref. (2)). Secara komputasional, prosedur optimisasi ini menghitung dekomposisi Cholesky dari sistem yang sesuai yang mengeksploitasi struktur blok sistem (Persamaan (5), Rujukan (1)). Pengaturan tidak ada efek tetap global secara praktis mendistorsi struktur blok sedemikian rupa sehingga kode lmer () tidak dapat mengatasinya. Antara lain nilai ekspektasi bersyarat darikamu berdasarkan pada β^Tapi pemecahan untuk β^ meminta solusi sistem matriks yang tidak pernah ada (matriks RXX dalam Acuan (1), atau L.Xdalam Referensi (2)). Jadi Anda mendapatkan kesalahan seperti:

Error in mer_finalize(ans) : 
  Cholmod error 'invalid xtype' at file:../Cholesky/cholmod_solve.c, line 970

karena bagaimanapun juga tidak ada yang perlu dipecahkan.

Dengan asumsi Anda tidak ingin menulis ulang lmer () profil fungsi biaya penyimpangan, solusi termudah didasarkan pada aksioma CS-101: sampah masuk, sampah keluar .

 N = length(y); Garbage <- rnorm(N); 
 lmer(y ~ -1 + Garbage + (1|GroupIndicator));

Jadi yang kita lakukan adalah mendefinisikan variabel GSebuahrbSebuahgeitu hanyalah kebisingan; seperti sebelum lmer () diinstruksikan untuk tidak menggunakan intersep tetap tetapi hanya matriks X yang mendefinisikan kita (dalam hal ini matriks kolom tunggal Sampah). Variabel Gaussian noise ekstra ini akan diharapkan tidak berkorelasi dengan kesalahan pengukuran sampel kami serta dengan varians efek acak Anda. Tidak perlu dikatakan bahwa semakin banyak struktur model Anda memiliki semakin kecil kemungkinan untuk mendapatkan korelasi acak yang tidak diinginkan tetapi signifikan secara statistik.

Jadi lmer () memiliki plasebo X variabel (matriks) untuk bermain, Anda berharap akan mendapatkan terkait βmenjadi nol dan Anda tidak perlu menormalkan data dengan cara apa pun (memusatkannya, memutihkannya, dll.). Mungkin mencoba beberapa inisialisasi acak dari plaseboXMatriks juga tidak akan sakit. Catatan terakhir untuk "Garbage": menggunakan Gaussian noise bukanlah "kebetulan"; ia memiliki entropi terbesar di antara semua variabel acak dengan varian yang sama sehingga peluang paling kecil untuk memberikan informasi.

Jelas, ini lebih merupakan trik komputasi daripada solusi, tetapi memungkinkan pengguna untuk secara efektif menentukan model lmer tanpa efek tetap global. Permintaan maaf karena berharap di sekitar dua referensi. Secara umum saya pikir Pustaka (1) adalah taruhan terbaik bagi siapa pun untuk menyadari apa yang dilakukan tir (), tetapi Pustaka (2) lebih dekat dengan semangat kode aktual.

Berikut sedikit kode show-casing ide di atas:

library(lme4)
N= 500;                 #Number of Samples
nlevA = 25;             #Number of levels in the random effect 
set.seed(0)             #Set the seed
e = rnorm(N); e = 1*(e - mean(e) )/sd(e); #Some errors

GroupIndicator =  sample(nlevA, N, replace=T)   #Random Nvel Classes 

Q = lmer( rnorm(N) ~ (1| GroupIndicator ));      #Dummy regression to get the matrix Zt easily
Z = t(Q@Zt);            #Z matrix

RA <-  rnorm(nlevA )                        #Random Normal Matrix
gammas =c(3*RA/sd(RA))                      #Colour this a bit

y = as.vector(  Z %*% gammas +  e )         #Our measurements are the sum of measurement error (e) and Group specific variance

lmer_native <- lmer(y ~ -1 +(1| GroupIndicator)) #No luck here.
Garbage <- rnorm(N)                              #Prepare the garbage

lmer_fooled <- lmer(y ~ -1 + Garbage+(1| GroupIndicator)) #OK...
summary(lmer_fooled)                             #Hey, it sort of works!

Referensi:

  1. Model campuran linier dan kuadrat terkecil yang dihukum oleh DM Bates dan S. DebRoy, Jurnal Analisis Multivariat, Volume 91 Edisi 1, Oktober 2004 ( Tautan ke pracetak )
  2. Metode komputasi untuk model campuran oleh Douglas Bates, Juni 2012. ( Tautan ke sumber )
usεr11852
sumber
Apakah ada alasan untuk lebih menyukai pendekatan yang Anda kemukakan daripada pendekatan yang disebutkan oleh Marco dalam komentar?
russellpierce
2
Iya; Anda tidak mengubah data sehingga tidak ada transformasi kembali yang diperlukan. Akibatnya semua diagnostik standar dan barang oleh lmer () misalnya. variabel pas, residu, tingkat efek acak dll. dll. langsung dapat ditafsirkan karena sesuai dengan dataset "benar" Anda dan bukan "yang diubah".
usεr11852