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
Bagaimana saya cocok dengan model
?
y
dulu :)
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
Bagaimana saya cocok dengan model
?
y
dulu :)
Jawaban:
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 dan serta efek acak bola dan (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 dari berdasarkan pada Tapi pemecahan untuk meminta solusi sistem matriks yang tidak pernah ada (matriks dalam Acuan (1), atau dalam 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 itu 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 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 plaseboMatriks 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:
lmer(y~0+(1|group)+(0+x|group))
akan berhasil, tetapi ini menghasilkan kesalahan.