Lme4 (> 1.0) ile donatılmış bir binom GLMM'nin uygunluğu nasıl değerlendirilir?


19

Ben bir binom dağılımı ve logit bağlantı fonksiyonu ile bir GLMM var ve verilerin önemli bir yönünün modelde iyi temsil olmadığını hissediyorum.

Bunu test etmek için, verilerin logit ölçeğinde doğrusal bir fonksiyon tarafından iyi tanımlanıp tanımlanmadığını bilmek istiyorum. Bu nedenle, artıkların iyi davranıp davranmadığını bilmek istiyorum. Ancak, hangi artıkların arsa çizileceğini ve arsanın nasıl yorumlanacağını bulamıyorum.

Lme4 ( GitHub geliştirme sürümü ) yeni sürümünü kullanıyorum unutmayın :

packageVersion("lme4")
## [1] ‘1.1.0’

Sorum şu: Binit genelleştirilmiş doğrusal karışık modellerin kalıntılarını logit link fonksiyonu ile nasıl inceleyebilir ve yorumlayabilirim?

Aşağıdaki veriler gerçek verilerimin sadece% 17'sini temsil ediyor, ancak takma makinemde yaklaşık 30 saniye sürüyor, bu yüzden böyle bırakıyorum:

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

dat <- read.table("http://pastebin.com/raw.php?i=vRy66Bif")
dat$V1 <- factor(dat$V1)

m1 <- glmer(true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1), dat, family = binomial)

En basit çizim ( ?plot.merMod) aşağıdakileri üretir:

plot(m1)

resim açıklamasını buraya girin

Bu bana zaten bir şey söylüyor mu?


1
Ben belki geri gelip bu bir çatlak almak için zaman bulmak, ama sanırım genel cevabım ikili modellerden artıklar ile büyük bir anlaşma yapmak zor olmasıdır. Benim asıl keşif şimdiye kadar yukarıda olması arsa üzerinde biraz üzerinde yakınlaştırma ve pürüzsüz bir çizgi eklemesini (kullanarak type=c("p","smooth")içinde plot.merModveya hareket ggplotsize güven aralıkları istiyorsanız) küçük ama önemli desen var gibi, görünüyor ki seni farklı bir bağlantı işlevi benimseyerek düzeltebilir. Şimdiye kadar ...
Ben Bolker

@BenBolker Teşekkürler. Ve sadece bunu ve soruya bir cevap olarak freakonomi bağlantısını gönderemez misiniz? Sonra en azından 150 puan alırsınız.
Henrik

3
Bu CV dizisini , stats.stackexchange.com/questions/63566/… , çok yararlı buldum . Gönderi, R'de ikili bir artık arsalarının nasıl oluşturulacağını açıklıyor
Nova

@Henrik Modelin nasıl çalıştığını açıklar true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1)mısınız? Will modeli vermek arasındaki etkileşimin tahmini distance*consequent, distance*direction, distance*distve eğimi directionve dist o değişir V1? Meydandaki kare ne anlama geliyor (consequent+direction+dist)^2?
ABC

@Henrik Kodunuzu çalıştırdım ve gösterir Warning message: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : Model failed to converge with max|grad| = 0.123941 (tol = 0.001, component 1). Neden ?
ABC

Yanıtlar:


18

Daha iyi bir zamanım olmadığından kısa cevap: bu zor bir sorundur; İkili veriler neredeyse her zaman uyum iyiliğini değerlendirmek için bir tür binning veya yumuşatma gerektirir. fortify.lmerMod(Sahip olduğunuz lme4, deneysel) ile birlikte kullanmak ggplot2ve özellikle geom_smooth()de yukarıda sahip olduğunuz aynı artık-takılı arsa çizmek için biraz yardımcı oldu , ancak güven aralıklarıyla (ayrıca y sınırlarını yakınlaştırmak için biraz daralttım ( -5,5) bölge). Bu, link fonksiyonunu değiştirerek geliştirilebilecek bazı sistematik varyasyonlar önerdi. (Ayrıca diğer tahmin edicilere karşı kalıntılar çizmeye çalıştım, ama çok kullanışlı değildi.)

Modeli tüm 3-yollu etkileşimlerle uydurmaya çalıştım, ancak sapma veya düzeltilmiş artık eğri şeklinde bir gelişme değildi.

(lojistik(x))λλ

## uses (fragile) internal C calls for speed; could use plogis(),
##  qlogis() for readability and stability instead
logitpower <- function(lambda) {
    L <- list(linkfun=function(mu)
              .Call(stats:::C_logit_link,mu^(1/lambda),PACKAGE="stats"),
              linkinv=function(eta)
              .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")^lambda,
              mu.eta=function(eta) {
                  mu <-  .Call(stats:::C_logit_linkinv,eta,PACKAGE="stats")
                  mu.eta <-  .Call(stats:::C_logit_mu_eta,eta,PACKAGE="stats")
                  lambda*mu^(lambda-1)*mu.eta
              },
              valideta = function(eta) TRUE ,
              name=paste0("logit-power(",lambda,")"))
    class(L) <- "link-glm"
    L
}

λ

Ayrıca bkz: http://freakonometrics.hypotheses.org/8210


3

Bu, biyoistatistik / epidemiyoloji derslerinde çok yaygın bir temadır ve temel olarak modelin doğası nedeniyle bunun için çok iyi çözümler yoktur. Çoğu zaman çözüm, kalıntıları kullanarak ayrıntılı teşhislerden kaçınmak olmuştur.

Ben, teşhislerin genellikle binning veya yumuşatma gerektirdiğini zaten yazdı. Kalıntıların çökeltilmesi R paket kolunda mevcuttu (veya mevcuttu), bakınız örneğin bu iplik . Ayrıca, öngörülen olasılıkları kullanan bazı çalışmalar da vardır; bir olasılık, bu konu başlığında daha önce tartışılan ayırma grafiğidir . Bunlar sizin davanızda doğrudan yardımcı olabilir veya olmayabilir, ancak yorumlamaya yardımcı olabilir.


-1

Modelin uyumunu kontrol etmek için artık arsalar yerine AIC kullanabilirsiniz. Komut R: AIC (model1) size bir sayı verecektir ... o zaman bunu başka bir modelle karşılaştırmanız gerekir (örneğin daha fazla yordayıcı ile) - AIC (model2), başka bir sayı verir. İki çıkışı karşılaştırdığınızda, modeli daha düşük AIC değerine sahip olacaksınız.

Bu arada, glmer modelinizin özetini aldığınızda AIC ve log olabilirlik oranı gibi şeyler zaten listelenir ve her ikisi de size modelin uyumu hakkında yararlı bilgiler verecektir. Boşluk hipotezini reddetmek için günlük olabilirlik oranı için büyük bir negatif sayı istiyorsunuz.


3
OP rakip modelleri karşılaştırmaya çalışıyorsa bu daha yararlı olurdu, ancak yapmaya çalıştıkları gibi görünmüyor ve AIC mutlak model uyumunu değerlendirmek için kullanılamıyor.
Patrick Coulombe

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.