Utilizzo di R per GLM con distribuzione gamma


14

Al momento ho un problema a comprendere la sintassi di R per adattare un GLM usando la distribuzione Gamma.

Ho un set di dati, in cui ogni riga contiene 3 co-variate ( ), una variabile di risposta ( ) e un parametro di forma ( ). Voglio modellare la scala della distribuzione gamma come una funzione lineare delle 3 covariate, ma non capisco come impostare la forma della distribuzione su per ogni riga di dati. Y K KX1,X2,X3YKK

Una situazione che ritengo analoga è che per una distribuzione binomiale, il GLM richiede che il numero di prove ( ) sia noto per ogni immissione di dati.N

Risposte:


12

La consueta gamma GLM contiene il presupposto che il parametro shape sia costante, allo stesso modo in cui il normale modello lineare assume una varianza costante.

Nel linguaggio GLM il parametro di dispersione, in è normalmente costante.Var ( Y i ) = ϕ V ( μ i )ϕVar(Yi)=ϕV(μi)

Più in generale, hai , ma questo non aiuta.a(ϕ)

Potrebbe forse essere possibile utilizzare un Gamma GLM ponderato per incorporare questo effetto di un parametro di forma specificato, ma non ho ancora studiato questa possibilità (se funziona è probabilmente il modo più semplice per farlo, ma non lo sono affatto certo che lo farà).

Se avessi un doppio GLM potresti stimare quel parametro in funzione delle covariate ... e se il software double glm ti consentisse di specificare un offset nel termine varianza, potresti farlo. Sembra che la funzione dglmnel pacchetto dglmti permetta di specificare un offset. Non so se ti permetterà di specificare un modello di varianza come (diciamo) ~ offset(<something>) + 0però.

Un'altra alternativa sarebbe quella di massimizzare direttamente la probabilità.


> y <- rgamma(100,10,.1)

> summary(glm(y~1,family=Gamma))

Call:
glm(formula = y ~ 1, family = Gamma)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-0.93768  -0.25371  -0.05188   0.16078   0.81347  

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.0103660  0.0003486   29.74   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for Gamma family taken to be 0.1130783) 

    Null deviance: 11.223  on 99  degrees of freedom
Residual deviance: 11.223  on 99  degrees of freedom
AIC: 973.56

Number of Fisher Scoring iterations: 5

La linea dove dice:

   (Dispersion parameter for Gamma family taken to be 0.1130783)

è quello che vuoi.

Quel è correlato al parametro shape del Gamma.ϕ^


1
Grazie. In R, c'è un modo per specificare cosa è ? Da questo link , sembra che non debba decidere su una data finché non stampo i risultati. Sono corretto nel dire che se c'è una fissa , allora non influisce sul risultato per , il vettore del coefficiente? In tal caso, come faccio a decidere quale migliore si adatta ai dati manualmente (senza utilizzare R)? K K β Kϕ=KKKβK
Jon Claus,

Se esiste un parametro di forma fissa per il Gamma, questo non influisce sulla stima di , e quindi nemmeno sul vettore del coefficiente. È possibile calcolare una stima dall'output GLM, ma non è la massima probabilità. Se volessi identificare il parametro shape, utilizzerei le funzioni rilevanti nel pacchetto . Perché è importante evitare l'uso di R, e perché dovresti provare a farlo manualmente anziché utilizzare un computer? μMASS
Glen_b

Ho sbagliato. Con manualmente, volevo dire che volevo un algoritmo abbastanza semplice che potevo implementare al di fuori di R. Inoltre, quando provo i test glm(V4 ~ V3 + V2 + V1, family=Gamma), dove sono co-variatori predittivi e è la risposta, determina , il vettore coefficiente. So che lo determina erroneamente perché ho generato dati di esempio con coefficienti noti per determinare la scala e una forma costante di 5.V 4V1,V2,V3V4β
Jon Claus,

1
Bene, puoi implementare qualsiasi cosa al di fuori di R che possa essere implementata al suo interno; potresti massimizzare la probabilità, ad esempio, oppure puoi usare la stima basata su . Puoi spiegare più in dettaglio cosa intendi per "improprio" qui? ϕ^
Glen_b

1
Allo scopo di testare il mio codice, ho generato una serie di dati con 10.000 tuple. Per generarlo, ho corretto , generato il campione , calcolato (il parametro di scala con la funzione di collegamento inverso ) e ha generato una variabile casuale dalla distribuzione . Quando eseguo R sul set di dati, il suo previsto non è affatto vicino a . Quando l'ho fatto per altre distribuzioni, la previsione di R è stata quasi esattamente corretta. V θ = ( β T V ) - 1 Y ~ Gamma ( 5 , θ ) β ββVθ=(βTV)1YGamma(5,θ)β^β
Jon Claus,

12

Ho usato la funzione gamma.shape del pacchetto MASS come descritto da Balajari (2013) al fine di stimare successivamente il parametro di forma e quindi regolare le stime e le previsioni dei coefficienti nel GLM. Ti ho consigliato di leggere la lezione in quanto, a mio avviso, è molto chiara e interessante riguardo all'uso della distribuzione gamma nei GLM.

glmGamma <- glm(response ~ x1, family = Gamma(link = "identity")
library(MASS)
myshape <- gamma.shape(glmGamma)
gampred <- predict(glmGamma , type = "response", se = T, dispersion = 1/myshape$alpha) 
    summary(glmGamma, dispersion = 1/myshape$alpha)
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.