Usando R para GLM con distribución Gamma

14

Actualmente tengo un problema para entender la sintaxis de R para ajustar un GLM usando la distribución Gamma.

Tengo un conjunto de datos, donde cada fila contiene 3 covariables ( ), una variable de respuesta ( ) y un parámetro de forma ( ). Quiero modelar la escala de la distribución Gamma como una función lineal de las 3 covariables, pero no entiendo cómo establecer la forma de la distribución en para cada fila de datos. Y K KX1,X2,X3YKK

Una situación que creo que es análoga es que para una distribución binomial, el GLM requiere que se conozca el número de ensayos ( ) para cada entrada de datos.N

Jon Claus
fuente

Respuestas:

12

El GLM gamma habitual contiene el supuesto de que el parámetro de forma es constante, de la misma manera que el modelo lineal normal supone una varianza constante.

En lenguaje GLM, el parámetro de dispersión, in es normalmente constante.Var ( Y i ) = ϕ V ( μ i )ϕVar(Yi)=ϕV(μi)

En términos más generales, tiene , pero eso no ayuda.a(ϕ)

Tal vez sea posible usar un GLM Gamma ponderado para incorporar este efecto de un parámetro de forma específico, pero aún no he investigado esta posibilidad (si funciona, probablemente sea la forma más fácil de hacerlo, pero no lo soy en absoluto Seguro que lo hará).

Si tuviera un GLM doble, podría estimar ese parámetro en función de las covariables ... y si el software de doble glm le permite especificar un desplazamiento en el término de varianza, podría hacerlo. Parece que la función dglmen el paquete le dglmpermite especificar un desplazamiento. Sin embargo, no sé si le permitirá especificar un modelo de varianza como (digamos) ~ offset(<something>) + 0.

Otra alternativa sería maximizar la probabilidad directamente.


> 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 línea donde dice:

   (Dispersion parameter for Gamma family taken to be 0.1130783)

es el que quieres

Ese está relacionado con el parámetro de forma de Gamma.ϕ^

Glen_b -Reinstate a Monica
fuente
1
Gracias. En R, ¿hay alguna manera de especificar qué es ? Desde este enlace , parece que no tengo que decidir sobre una determinada hasta que imprima los resultados. ¿Estoy en lo cierto al decir que si hay una fija , entonces no afecta el resultado para , el vector de coeficiente? Si es así, ¿cómo decido cuál es la mejor para ajustar los datos manualmente (sin usar R)? K K β Kϕ=KKKβK
Jon Claus
Si hay un parámetro de forma fija para el Gamma, no afecta la estimación de , y por lo tanto tampoco el vector de coeficiente. Puede calcular una estimación a partir de la salida GLM, pero no es la máxima probabilidad. Si quisiera identificar el parámetro de forma, usaría las funciones relevantes en el paquete . ¿Por qué es importante evitar usar R, y por qué tratarías de hacerlo manualmente en lugar de usar una computadora? μMASS
Glen_b -Reinstale a Monica
glm(V4 ~ V3 + V2 + V1, family=Gamma)V1,V2,V3V4β
1
Bueno, puedes implementar cualquier cosa fuera de R que pueda implementarse dentro de ella; podría maximizar la probabilidad, por ejemplo, o podría usar la estimación basada en . ¿Puedes explicar con más detalle qué quieres decir con "impropio" aquí? ϕ^
Glen_b -Reinstale a Monica
1
Con el propósito de probar mi propio código, generé un conjunto de datos con 10,000 tuplas. Para generarlo, arreglé , generé la muestra , calculé (el parámetro de escala con la función de enlace inverso ), y generó una variable aleatoria de la distribución . Cuando ejecuto R en el conjunto de datos, su predicho no está cerca de . Cuando he hecho esto para otras distribuciones, la predicción de R ha sido casi exactamente correcta. V θ = ( β T V ) - 1 Y ~ Gamma ( 5 , θ ) β ββVθ=(βTV)1YGamma(5,θ)β^β
Jon Claus
12

Utilicé la función gamma.shape del paquete MASS como lo describe Balajari (2013) para estimar el parámetro de forma luego y luego ajustar las estimaciones y predicciones de coeficientes en el GLM. Le aconsejé que leyera la conferencia ya que, en mi opinión, es muy clara e interesante con respecto al uso de la distribución gamma en 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)
Xóchitl C.
fuente