Bagaimana cara mengatasi pemisahan kuasi-lengkap dalam GLMM logistik?

8

Pembaruan : Karena saya sekarang tahu bahwa masalah saya disebut pemisahan semu-lengkap, saya memperbarui pertanyaan untuk mencerminkan hal ini (terima kasih kepada Aaron).


Saya memiliki dataset dari percobaan di mana 29 peserta manusia (faktor code) bekerja pada satu set uji coba dan responseitu adalah 1 atau 0. Selain itu, kami memanipulasi bahan sehingga kami memiliki tiga faktor silang, p.validity(valid versus tidak valid), type(afirmasi versus penolakan), dan counterexamples(sedikit versus banyak):

d.binom <- read.table("http://pastebin.com/raw.php?i=0yDpEri8")
str(d.binom)
## 'data.frame':   464 obs. of  5 variables:
##      $ code           : Factor w/ 29 levels "A04C","A14G",..: 1 1 1 1 1 1 1 1 1 1 ...
##      $ response       : int  1 1 1 1 0 1 1 1 1 1 ...
##      $ counterexamples: Factor w/ 2 levels "few","many": 2 2 1 1 2 2 2 2 1 1 ...
##      $ type           : Factor w/ 2 levels "affirmation",..: 1 2 1 2 1 2 1 2 1 2 ...
##      $ p.validity     : Factor w/ 2 levels "invalid","valid": 1 1 2 2 1 1 2 2 1 1 ...

Secara keseluruhan hanya ada sejumlah kecil 0s:

mean(d.binom$response)
## [1] 0.9504

Satu hipotesis adalah bahwa ada pengaruh validity, bagaimanapun, analisis pendahuluan menunjukkan bahwa mungkin ada efek counterexamples. Karena saya memiliki data dependen (setiap peserta mengerjakan semua percobaan), saya ingin menggunakan GLMM pada data tersebut. Sayangnya, counterexampleskuasi-sepenuhnya memisahkan data (setidaknya untuk satu level):

with(d.binom, table(response, counterexamples))
##         counterexamples
## response few many
##        0   1   22
##        1 231  210

Ini juga tercermin dalam model:

require(lme4)
options(contrasts=c('contr.sum', 'contr.poly'))


m2 <- glmer(response ~ type * p.validity * counterexamples + (1|code), 
            data = d.binom, family = binomial)
summary(m2)
## [output truncated]
## Fixed effects:
##                                      Estimate Std. Error z value Pr(>|z|)
##   (Intercept)                            9.42     831.02    0.01     0.99
##   type1                                 -1.97     831.02    0.00     1.00
##   p.validity1                            1.78     831.02    0.00     1.00
##   counterexamples1                       7.02     831.02    0.01     0.99
##   type1:p.validity1                      1.97     831.02    0.00     1.00
##   type1:counterexamples1                -2.16     831.02    0.00     1.00
##   p.validity1:counterexamples1           2.35     831.02    0.00     1.00
##   type1:p.validity1:counterexamples1     2.16     831.02    0.00     1.00

Kesalahan standar untuk parameter hanya gila. Karena tujuan akhir saya adalah untuk menilai apakah efek tertentu signifikan atau tidak, kesalahan standar tidak sepenuhnya tidak penting.

  • Bagaimana saya bisa menangani pemisahan kuasi lengkap? Apa yang saya inginkan adalah mendapatkan perkiraan yang dapat saya nilai dari pengaruh tertentu atau tidak (misalnya menggunakan PRmodcompdari paket pkrtest, tetapi ini adalah langkah lain yang tidak dijelaskan di sini).

Pendekatan menggunakan paket lain juga baik-baik saja.

Henrik
sumber
2
Untuk memulainya, coba ini: ats.ucla.edu/stat/mult_pkg/faq/general/…
Aaron meninggalkan Stack Overflow
@ Harun Tampak hebat. Menjadikan ini sebagai jawaban setidaknya akan membawa Anda satu suara ...
Henrik
Tapi sebenarnya bukan jawaban, tapi terima kasih!
Aaron meninggalkan Stack Overflow
@ Henrik Anda dapat mengunggulkan komentar juga.
Peter Flom
Lihat makalah ini oleh Paul Allison. Meskipun dia menekankan SAS, poin yang sama akan berlaku dalam bahasa lain.
Peter Flom

Jawaban:

8

Saya khawatir ada kesalahan ketik pada judul Anda: Anda tidak harus berusaha menyesuaikan model campuran, apalagi model campuran nonlinier, dengan hanya 30 cluster. Tidak, kecuali Anda yakin Anda dapat menyesuaikan distribusi normal hingga 30 poin terhalang oleh kesalahan pengukuran, nonlinier, dan pemisahan hampir lengkap (alias prediksi sempurna).

Apa yang akan saya lakukan di sini adalah menjalankan ini sebagai regresi logistik reguler dengan koreksi Firth :

library(logistf)
mf <- logistf(response ~ type * p.validity * counterexamples + as.factor(code),
      data=d.binom)

Koreksi Firth terdiri dari menambahkan penalti ke kemungkinan, dan merupakan bentuk penyusutan. Dalam istilah Bayesian, estimasi yang dihasilkan adalah mode posterior model dengan Jeffrey sebelumnya. Dalam istilah frequentist, hukuman adalah penentu dari matriks informasi yang sesuai dengan pengamatan tunggal, dan karenanya menghilang secara asimptotik.

Tugas
sumber
4
Sebenarnya saya percaya pada model campuran pas dengan kurang dari 30 cluster. Namun analisis tersebut tampaknya menjanjikan (+1). Atau adakah metode Firth untuk GLMM?
Henrik
2
Benar, Anda adalah penggemar persyaratan ukuran sampel minimal ... Koreksi Firth hanya berfungsi dengan data iid. Anda dapat mempercayai apa saja, tetapi Anda lebih baik menjalankan beberapa simulasi untuk melihat apakah keyakinan tertentu dibenarkan dalam situasi data tertentu. Dengan kumpulan data yang sangat seimbang dan tanggapan terus-menerus, MUNGKIN berfungsi dengan baik. Dengan kumpulan data yang sangat tidak seimbang, dalam hal respons, Anda hanya melihat ekor paling kiri dari distribusi normal dari efek acak, dan Anda bersedia bertaruh pada ekor ini yang didekati dengan baik oleh Laplace satu titik di *lmer??? : - \
StasK
5

Anda dapat menggunakan pendekatan posteriori Bayesian maksimum dengan yang lemah sebelumnya pada efek tetap untuk mendapatkan efek yang kira-kira sama. Secara khusus, paket blme untuk R (yang merupakan pembungkus tipis di sekitar lme4paket) melakukan hal ini, jika Anda menentukan prior untuk efek tetap seperti dalam contoh di sini (cari "pemisahan lengkap"):

cmod_blme_L2 <- bglmer(predation~ttt+(1|block),data=newdat,
                       family=binomial,
                       fixef.prior = normal(cov = diag(9,4)))

Contoh ini dari percobaan di mana tttefek tetap kategorikal dengan 4 level, jadiβ vektor akan memiliki panjang 4. Matriks varians-kovarians yang ditentukan sebelumnya adalah Σ=9I, yaitu parameter efek tetap memiliki independen N(μ=0,σ2=9) (atau σ, yaitu standar devation, =3) prior. Ini berfungsi cukup baik, meskipun tidak identik dengan koreksi Firth (karena Firth sesuai dengan Jeffrey sebelumnya , yang tidak persis sama).

Contoh yang ditautkan menunjukkan bahwa Anda juga dapat melakukannya dengan MCMCglmmpaket tersebut, jika Anda ingin ...

Ben Bolker
sumber