glm in R - quale valore rappresenta la bontà di adattamento dell'intero modello?


10

Sto eseguendo glms in R (modelli lineari generalizzati). Pensavo di conoscere i valori - fino a quando non ho visto che richiamare un riepilogo per un glm non ti dà un valore rappresentativo prevalente del modello nel suo insieme - almeno non nel luogo in cui lo fanno i modelli lineari.

Mi chiedo se questo sia dato come il valore per l'Intercettazione, in cima alla tabella dei coefficienti. Quindi nell'esempio seguente, mentre Wind.speed..knots e canopy_density possono essere significativi per il modello, come facciamo a sapere se il modello stesso è significativo? Come faccio a sapere se fidarmi di questi valori? Ho ragione a chiedermi che il Pr (> | z |) per (Intercetta) rappresenti il ​​significato del modello? Questo modello è significativo gente ??? Grazie!

Dovrei notare che l'esecuzione di un test F non fornirà un valore poiché ricevo un messaggio di errore che dice che l'esecuzione di test F su una famiglia binomiale è inappropriata.

Call:
glm(formula = Empetrum_bin ~ Wind.speed..knots. + canopy_density, 
    family = binomial, data = CAIRNGORM)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.2327  -0.7167  -0.4302  -0.1855   2.3194  

Coefficients:
                   Estimate Std. Error z value Pr(>|z|)  
(Intercept)          1.8226     1.2030   1.515   0.1298  
Wind.speed..knots.  -0.5791     0.2628  -2.203   0.0276 *
canopy_density      -2.5733     1.1346  -2.268   0.0233 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 59.598  on 58  degrees of freedom
Residual deviance: 50.611  on 56  degrees of freedom
  (1 observation deleted due to missingness)
AIC: 56.611

1
Se ricordo bene in una regressione binomiale dovresti usare un test di devianza, noto anche come test di verosimiglianza, analogo al test F utilizzato in una regressione lineare. Questo è il -2 * (Null LL - Saturated LL) che si adatta a una distribuzione chi-quadrata. Anche se non riesco a vedere un modello Log verosimiglianza nell'output di riepilogo. Si trova nell'oggetto modello ma non nell'output di riepilogo?
SamPassmore,

Risposte:


10

Puoi eseguire un test chi-quadrato asintotico di (59.598-50.611) contro un chi-quadrato con (58-56) df, oppure utilizzare anova()l'oggetto glm (che non esegue direttamente il test, ma almeno calcola ( 59.598-50.611) e (58-56) per te).

Questa è effettivamente un'analisi della devianza .

Ecco il tipo di calcoli che potresti fare (su un set di dati diverso, che viene fornito con R):

spray1=glm(count~spray,family=poisson,data=InsectSprays)  # full model
spray0=glm(count~1,family=poisson,data=InsectSprays)      # null model
with(anova(spray0,spray1),pchisq(Deviance,Df,lower.tail=FALSE)[2]) 

Il che dà il valore p per una statistica asintotica del chi quadro basata sulla devianza .

Oppure puoi usare le funzioni deviancee df.residualper fare questo:

 pchisq(deviance(spray0)-deviance(spray1),
     df.residual(spray0)-df.residual(spray1),
    lower.tail=FALSE)

-

Molte persone userebbero il confronto tra AIC modello completo e null (o in alcuni casi, forse un confronto tra un modello di interesse e il modello saturo) per capire se il modello era migliore del null in quel senso.

-

Ho ragione a chiedermi che il Pr (> | z |) per (Intercetta) rappresenti il ​​significato del modello?

Non In effetti, il valore p dell'intercetta di solito non è di interesse diretto.

Se stai considerando un modello con un parametro di dispersione, ho visto alcune persone litigare per fare un test F invece di un chi-quadrato asintotico; corrisponde alle persone che utilizzano un test t invece di az sui singoli coefficienti. Non è probabile che si tratti di un'approssimazione ragionevole in piccoli campioni. Non ho visto una derivazione o simulazione che suggerirebbe che la F sia necessariamente un'approssimazione adeguata (cioè migliore del risultato asintotico) nel caso dei GLM in generale. Uno potrebbe benissimo esistere, ma non l'ho visto.


2
Potresti anche correre Anova(fit, type = 2)dalla carbiblioteca
Algorithmatic

3

Supponendo che il modello sia nell'oggetto 'fit', è possibile utilizzare questo codice per eseguire un test di verosimiglianza sul modello binomiale. Come notato, un test F non è appropriato, ma questo test verificherà se il modello è previsto meglio che casuale.

LLR = -2 * (fit$null.deviance - fit$deviance)

Questa è la formula per il test del rapporto di verosimiglianza.

pchisq(LLR, 2, lower.tail = FALSE)

E questo ti darà il valore p. Anche se non sono sicuro al 100% che sia il giusto df. Sono abbastanza sicuro che sia la differenza nel numero di parametri, di cui hai 2 nel tuo modello saturo e nessuno nel modello Null, ergo df = 3 - 1 = 2. Ma potrebbe essere qualcosa a cui dare seguito.


1

Fχ2

In alternativa, puoi consultare AIC o misure correlate come BIC.

R2

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.