Esiste un test per determinare se l'overdispersione GLM è significativa?


44

Sto creando GLM di Poisson in R. Per verificare la sovradispersione, sto esaminando il rapporto tra devianza residua e gradi di libertà forniti da summary(model.name).

Esiste un valore di interruzione o un test per questo rapporto da considerare "significativo?" So che se è> 1 i dati sono sovradispersi, ma se ho rapporti relativamente vicini a 1 [ad esempio, un rapporto di 1,7 (devianza residua = 25,48, df = 15) e un altro di 1,3 (r = = 324, df = 253)], dovrei ancora passare al binomio quasipoisson / negativo? Ho trovato qui questo test per il significato: 1-pchisq (devianza residua, df), ma l'ho visto solo una volta, il che mi rende nervoso. Ho anche letto (non riesco a trovare la fonte) che un rapporto <1,5 è generalmente sicuro. Opinioni?

Risposte:


45

Nel pacchetto R AER troverai la funzione dispersiontest, che implementa un Test per Overdispersion di Cameron & Trivedi (1990).

Segue una semplice idea: in un modello di Poisson, la media è e anche la varianza è . Sono uguali. Il test verifica semplicemente questa ipotesi come un'ipotesi nulla contro un'alternativa in cui cui la costante significa sottodispersione e significa sovradispersione. La funzione È una funzione monotona (spesso lineare o quadratica; la prima è l'impostazione predefinita). Il test risultante è equivalente al test vs. e la statistica del test utilizzata è un statistica che è asintoticamente normale normale sotto il valore nullo.E(Y)=μVar(Y)=μVar(Y)=μ+cf(μ)c<0c>0f(.)H0:c=0H1:c0t

Esempio:

R> library(AER)
R> data(RecreationDemand)
R> rd <- glm(trips ~ ., data = RecreationDemand, family = poisson)
R> dispersiontest(rd,trafo=1)

Overdispersion test

data:  rd
z = 2.4116, p-value = 0.007941
alternative hypothesis: true dispersion is greater than 0
sample estimates:
dispersion 
    5.5658 

Qui vediamo chiaramente che ci sono prove di sovradispersione (c è stimato essere 5,57) che parla abbastanza fortemente contro il presupposto di equidispersione (cioè c = 0).

Nota che se non lo usi trafo=1, eseguirà effettivamente un test di vs. con che ha ovviamente lo stesso risultato dell'altro test a parte la statistica del test spostata di una. La ragione di ciò, tuttavia, è che quest'ultima corrisponde alla parametrizzazione comune in un modello quasi-Poisson. H0:c=1H1:c1c=c+1


1
Ho dovuto usare glm(trips ~ 1, data = data, family = poisson)(cioè 1piuttosto che .per i miei dati), ma fantastico, grazie
Phil

12

Un'alternativa è odTestdalla pscllibreria che confronta i rapporti di verosimiglianza di una regressione binomiale negativa con la restrizione di una regressione di Poisson . Si ottiene il seguente risultato:μ=Var

>library(pscl)

>odTest(NegBinModel) 

Likelihood ratio test of H0: Poisson, as restricted NB model:
n.b., the distribution of the test-statistic under H0 is non-standard
e.g., see help(odTest) for details/references

Critical value of test statistic at the alpha= 0.05 level: 2.7055 
Chi-Square Test Statistic =  52863.4998 p-value = < 2.2e-16

Qui il nulla della restrizione di Poisson è respinto a favore della mia regressione binomiale negativa NegBinModel. Perché? Perché la statistica del test 52863.4998supera 2.7055con a p-value of < 2.2e-16.

Il vantaggio di AER dispersiontestè l'oggetto restituito della classe "htest" è più facile da formattare (ad esempio la conversione in LaTeX) rispetto al "odTest" senza classe.


5

Un'altra alternativa è utilizzare la P__dispfunzione dal msmepacchetto. La P__dispfunzione può essere utilizzata per calcolare le statistiche di dispersione di Pearson e Pearson dopo aver adattato il modello con o .χ2glmglm.nb


2

Un'altra opzione sarebbe quella di utilizzare un test del rapporto di verosimiglianza per dimostrare che un GLM quasipoisson con sovraispersione è significativamente migliore di un GLM poisson regolare senza sovraispersione:

fit = glm(count ~ treatment,family="poisson",data=data) 
fit.overdisp = glm(count ~ treatment,family="quasipoisson",data=data) 
summary(fit.overdisp)$dispersion # dispersion coefficient
pchisq(summary(fit.overdisp)$dispersion * fit$df.residual, fit$df.residual, lower = F) # significance for overdispersion
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.