Come valutare l'adattamento di un GLMM binomiale dotato di lme4 (> 1.0)?


19

Ho un GLMM con una distribuzione binomiale e una funzione di collegamento logit e ho la sensazione che un aspetto importante dei dati non sia ben rappresentato nel modello.

Per verificarlo, vorrei sapere se i dati sono ben descritti o meno da una funzione lineare sulla scala logit. Quindi, vorrei sapere se i residui sono ben educati. Tuttavia, non riesco a scoprire in quale trama di trama tracciare e come interpretare la trama.

Nota che sto usando la nuova versione di lme4 ( la versione di sviluppo di GitHub ):

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

La mia domanda è: come posso ispezionare e interpretare i residui di un modello misto lineare binomiale generalizzato con una funzione di collegamento logit?

I seguenti dati rappresentano solo il 17% dei miei dati reali, ma il montaggio richiede già circa 30 secondi sulla mia macchina, quindi lascio così:

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)

La trama più semplice ( ?plot.merMod) produce quanto segue:

plot(m1)

inserisci qui la descrizione dell'immagine

Questo mi dice già qualcosa?


1
Ho potuto trovare il tempo per tornare indietro e prendere una crepa a questo, ma penso che il generale risposta è che è difficile fare molto con i residui di modelli binari. La mia scoperta principale così lontano da zoom in su un po 'sulla trama si dispone sopra, e l'aggiunta di una linea livellato (usando type=c("p","smooth")in plot.merMod, o in movimento per ggplotse si vuole intervalli di confidenza) è che sembra che ci sia un piccolo ma significativo modello, che si potrebbe essere in grado di risolvere adottando una diversa funzione di collegamento. Fin qui è tutto ...
Ben Bolker,

@BenBolker Grazie. E non puoi semplicemente pubblicare questo e il link al freakonomics come risposta alla domanda? Quindi almeno otterresti i 150 punti.
Henrik,

3
Ho trovato questo thread CV, stats.stackexchange.com/questions/63566/… , molto utile. Il post spiega come creare un diagramma dei residui in scatola in R.
Nova,

@Henrik Per favore, mi spieghi come funziona il modello true ~ distance*(consequent+direction+dist)^2 + (direction+dist|V1)? Sarà il modello give stima di interazione tra distance*consequent, distance*direction, distance*diste la pendenza directione dist che varia con V1? Cosa indica la piazza in (consequent+direction+dist)^2?
ABC

@Henrik Ho eseguito il tuo codice e mostra il 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). Perché ?
ABC,

Risposte:


18

Risposta breve dato che non ho tempo per migliorare: questo è un problema impegnativo; i dati binari richiedono quasi sempre una sorta di binning o smoothing per valutare la bontà di adattamento. È stato in qualche modo utile usare fortify.lmerMod(da lme4, sperimentale) insieme ggplot2e in particolare geom_smooth()per disegnare essenzialmente lo stesso diagramma residuo vs adattato che hai sopra, ma con intervalli di confidenza (ho anche ristretto un po 'i limiti di y per ingrandire il ( -5,5) regione). Ciò ha suggerito alcune variazioni sistematiche che potrebbero essere migliorate modificando la funzione di collegamento. (Ho anche provato a tracciare i residui contro gli altri predittori, ma non è stato troppo utile.)

Ho provato ad adattare il modello a tutte le interazioni a 3 vie, ma non è stato un grande miglioramento né nella devianza né nella forma della curva residua levigata.

(logistic(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
}

λ

Vedi anche: http://freakonometrics.hypotheses.org/8210


3

Questo è un tema molto comune sui corsi di biostatistica / epidemiologia e non ci sono ottime soluzioni, fondamentalmente a causa della natura del modello. Spesso la soluzione è stata quella di evitare una diagnostica dettagliata utilizzando i residui.

Ben ha già scritto che la diagnostica spesso richiede binning o smoothing. Il binning dei residui è (o era) disponibile nel braccio del pacchetto R, vedere ad esempio questa discussione . Inoltre, ci sono alcuni lavori che utilizzano le probabilità previste; una possibilità è il diagramma di separazione che è stato discusso in precedenza in questo thread . Questi potrebbero o meno aiutare direttamente nel tuo caso, ma potrebbero aiutare l'interpretazione.


-1

È possibile utilizzare AIC invece di grafici residui per verificare l'adattamento del modello. Comando in R: AIC (modello1) ti darà un numero ... quindi devi confrontarlo con un altro modello (con più predittori, ad esempio) - AIC (modello2), che produrrà un altro numero. Confronta le due uscite e vorrai il modello con il valore AIC più basso.

A proposito, cose come AIC e rapporto di verosimiglianza sono già elencati quando ottieni il riassunto del tuo modello glmer, ed entrambi ti forniranno informazioni utili sull'adattamento del modello. Volete un grande numero negativo per il rapporto di verosimiglianza per rifiutare l'ipotesi nulla.


3
Ciò sarebbe più utile se OP stesse cercando di confrontare modelli concorrenti, ma non sembra che sia quello che stanno cercando di fare e l'AIC non può essere utilizzato per valutare l'adattamento assoluto del modello.
Patrick Coulombe,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.