Saya mencoba menggunakan lme4::glmer()
agar sesuai dengan model campuran binomial umum (GLMM) dengan variabel dependen yang bukan biner, tetapi variabel kontinu antara nol dan satu. Orang dapat menganggap variabel ini sebagai probabilitas; sebenarnya itu adalah probabilitas sebagaimana dilaporkan oleh subyek manusia (dalam percobaan yang saya bantu analisis). Yaitu itu bukan fraksi "diskrit", tetapi variabel kontinu.
glmer()
Panggilan saya tidak berfungsi seperti yang diharapkan (lihat di bawah). Mengapa? Apa yang dapat saya?
Sunting nanti: jawaban saya di bawah ini lebih umum daripada versi asli pertanyaan ini, jadi saya memodifikasi pertanyaannya menjadi lebih umum juga.
Keterangan lebih lanjut
Tampaknya dimungkinkan untuk menggunakan regresi logistik tidak hanya untuk DV biner tetapi juga untuk DV kontinu antara nol dan satu. Memang saat saya lari
glm(reportedProbability ~ a + b + c, myData, family="binomial")
Saya mendapat pesan peringatan
Warning message:
In eval(expr, envir, enclos) : non-integer #successes in a binomial glm!
tetapi kecocokan yang sangat masuk akal (semua faktor bersifat kategoris, jadi saya dapat dengan mudah memeriksa apakah prediksi model dekat dengan lintas-subjek-rata-rata, dan semuanya).
Namun, apa yang sebenarnya ingin saya gunakan adalah
glmer(reportedProbability ~ a + b + c + (1 | subject), myData, family="binomial")
Ini memberi saya peringatan identik, mengembalikan model, tetapi model ini jelas sangat tidak aktif; perkiraan efek tetap sangat jauh dari glm()
yang dan dari lintas subjek berarti. (Dan saya perlu memasukkan glmerControl(optimizer="bobyqa")
ke dalam glmer
panggilan, kalau tidak itu tidak menyatu sama sekali.)
glmmadmb(reportedProbability ~ a + b + c + (1 | subject), myData, family="beta")
, saya mendapatkan interval kepercayaan dan kewajaran yang benar, tetapi konvergensi gagal peringatan: - / Mencoba mencari cara untuk meningkatkan jumlah iterasi. Beta mungkin cocok untuk saya karena saya tidak memiliki DV = 0 atau DV = 1 case.+ (1 | rowid)
panggilan telepon saya dan ini menghasilkan perkiraan stabil dan interval kepercayaan stabil, terlepas dari pilihan berat badan saya (saya mencoba 100 dan 500). Saya juga mencoba menjalankan lmer pada logit (melaporkanProbabilitas) dan saya mendapatkan hal yang hampir persis sama. Jadi kedua solusi tampaknya bekerja dengan baik! Beta MM dengan glmmadmb juga memberikan hasil yang sangat dekat, tetapi karena beberapa alasan gagal untuk menyatu sepenuhnya dan membutuhkan waktu lama untuk berjalan. Pertimbangkan memposting jawaban yang mencantumkan opsi ini dan menjelaskan sedikit perbedaan dan pro / kontra! (Interval kepercayaan yang saya sebutkan semuanya Wald.)Jawaban:
Masuk akal untuk memulai dengan kasus sederhana tanpa efek acak.
Ada empat cara untuk berurusan dengan variabel respons nol-ke-satu terus-menerus yang berperilaku seperti pecahan atau probabilitas ( ini adalah utas kami yang paling kanonik / terunggul / dilihat pada topik ini, tetapi sayangnya tidak semua keempat opsi dibahas di sana):
n
Logit mengubah respons dan menggunakan regresi linier. Ini biasanya tidak disarankan.
Cocok dengan model binomial tapi kemudian hitung kesalahan standar dengan memperhitungkan over-dispersi. Kesalahan standar dapat dihitung dengan berbagai cara:
(a) meningkatkan kesalahan standar melalui estimasi penayangan berlebih ( satu , dua ). Ini disebut "quasi-binomial" GLM.
(B) kesalahan standar yang kuat melalui estimator sandwich ( satu , dua , tiga , empat ). Ini disebut "log fraksional" dalam ekonometrik.
(A) dan (b) tidak identik (lihat komentar ini , dan bagian 3.4.1 dan 3.4.2 dalam buku ini , dan pos SO ini dan juga yang ini dan yang ini ), tetapi cenderung memberikan hasil yang serupa. Opsi (a) diimplementasikan
glm
sebagai berikut:Empat cara yang sama tersedia dengan efek acak.
Menggunakan
weights
argumen ( satu , dua ):Menurut tautan kedua di atas, mungkin ide yang baik untuk memodelkan penayangan berlebih, lihat di sana (dan juga # 4 di bawah).
Menggunakan model beta campuran:
atau
Jika ada nol atau satu dalam data respons, maka seseorang dapat menggunakan model beta nol / satu meningkat
glmmTMB
.Menggunakan transformasi logit dari respons:
Akuntansi untuk penyebaran berlebihan dalam model binomial. Ini menggunakan trik yang berbeda: menambahkan efek acak untuk setiap titik data:
Untuk beberapa alasan ini tidak berfungsi sebagaimana mestinya karena
glmer()
mengeluh tentang non-integerp
dan menghasilkan perkiraan yang tidak masuk akal. Solusi yang saya buat adalah dengan menggunakan konstanta palsuweights=k
dan memastikan bahwap*k
selalu bilangan bulat. Ini membutuhkan pembulatanp
tetapi dengan memilihk
yang cukup besar itu seharusnya tidak terlalu menjadi masalah. Hasilnya tampaknya tidak tergantung pada nilaik
.Pembaruan kemudian (Jan 2018): Ini mungkin pendekatan yang tidak valid. Lihat diskusi di sini . Saya harus menyelidiki ini lebih lanjut.
Dalam kasus khusus saya, opsi # 1 tidak tersedia.
Opsi # 2 sangat lambat dan memiliki masalah dengan konvergensi:Pembaruan: Saya mencobaglmmadmb
membutuhkan lima-sepuluh menit untuk berjalan (dan masih mengeluh bahwa itu tidak konvergen!), Sedangkanlmer
bekerja dalam sepersekian detik danglmer
membutuhkan beberapa detik.glmmTMB
seperti yang disarankan dalam komentar oleh @BenBolker dan berfungsi hampir secepatglmer
, tanpa masalah konvergensi. Jadi ini yang akan saya gunakan.Opsi # 3 dan # 4 menghasilkan perkiraan yang sangat mirip dan interval kepercayaan Wald yang sangat mirip (diperoleh dengan
confint
). Saya bukan penggemar # 3 karena itu agak curang. Dan # 4 terasa agak berantakan.Terima kasih banyak kepada @ Harun yang mengarahkan saya ke # 3 dan # 4 dalam komentarnya.
sumber
devtools::install_github("glmmTMB/glmmTMB",sub="glmmTMB")
, menggunakanglmmTMB(p ~ a+b+c + (1|subject), myData, family=list(family="beta",link="logit"))
harus bekerja ...glmmTMB
lebih cepat dan lebih stabil daripadaglmmADMB
, dan di bawah (sedikit) pengembangan lebih aktif, meskipun tidak matang.