Utilisation de R pour GLM avec distribution Gamma


14

J'ai actuellement un problème pour comprendre la syntaxe de R pour ajuster un GLM en utilisant la distribution Gamma.

J'ai un ensemble de données, où chaque ligne contient 3 co-variables ( ), une variable de réponse ( ) et un paramètre de forme ( ). Je veux modéliser l'échelle de la distribution Gamma en tant que fonction linéaire des 3 covariables, mais je ne comprends pas comment définir la forme de la distribution sur pour chaque ligne de données. Y K KX1,X2,X3YKK

Une situation qui, je pense, est analogue est que pour une distribution binomiale, le GLM exige que le nombre d'essais ( ) soit connu pour chaque entrée de données.N

Réponses:


12

Le GLM gamma habituel contient l'hypothèse que le paramètre de forme est constant, de la même manière que le modèle linéaire normal suppose une variance constante.

Dans le langage GLM, le paramètre de dispersion, in est normalement constant.Var ( Y i ) = ϕ V ( μ i )ϕVar(Yi)=ϕV(μi)

Plus généralement, vous avez , mais cela n'aide pas.a(ϕ)

Il serait peut-être possible d'utiliser un GLM Gamma pondéré pour incorporer cet effet d'un paramètre de forme spécifié, mais je n'ai pas encore étudié cette possibilité (si cela fonctionne, c'est probablement la façon la plus simple de le faire, mais je ne le suis pas du tout sûr que ce sera le cas).

Si vous aviez un double GLM, vous pourriez estimer ce paramètre en fonction des covariables ... et si le logiciel de double glm vous permettait de spécifier un décalage dans le terme de variance, vous pourriez le faire. Il ressemble à la fonction dglmdu package dglmvous permettant de spécifier un décalage. Je ne sais pas si cela vous permettra de spécifier un modèle de variance comme (disons) ~ offset(<something>) + 0cependant.

Une autre alternative serait de maximiser directement 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 ligne où il est écrit:

   (Dispersion parameter for Gamma family taken to be 0.1130783)

est celui que vous voulez.

Ce est lié au paramètre de forme du Gamma.ϕ^


1
Merci. Dans R, existe-t-il un moyen de spécifier ce qu'est ? À partir de ce lien , il semble que je n'ai pas à décider d'un donné jusqu'à ce que j'imprime les résultats. Ai-je raison de dire que s'il existe un fixe , cela n'affecte pas le résultat pour , le vecteur de coefficient? Si oui, comment puis-je décider du meilleur pour ajuster les données manuellement (sans utiliser R)? K K β Kϕ=KKKβK
Jon Claus

S'il existe un paramètre de forme fixe pour le Gamma, il n'affecte pas l'estimation de , et donc pas non plus le vecteur de coefficient. Vous pouvez calculer une estimation à partir de la sortie GLM, mais ce n'est pas le maximum de vraisemblance. Si je voulais identifier le paramètre de forme, j'utiliserais les fonctions pertinentes dans le package . Pourquoi est-il important d'éviter d'utiliser R, et pourquoi essayez-vous de le faire manuellement plutôt que d'utiliser un ordinateur? μMASS
Glen_b -Reinstate Monica

Je me suis mal exprimé. Par manuellement, je voulais dire que je voulais un algorithme décemment simple que je pourrais implémenter en dehors de R. Aussi, lorsque j'essaie de tester glm(V4 ~ V3 + V2 + V1, family=Gamma), où sont des co-variables et est la réponse, il détermine incorrectement , le vecteur de coefficient. Je sais que cela le détermine incorrectement parce que j'ai généré des échantillons de données avec des coefficients connus pour déterminer l'échelle et une forme constante de 5.V 4V1,V2,V3V4β
Jon Claus

1
Eh bien, vous pouvez implémenter tout ce qui peut être implémenté en dehors de R; vous pouvez par exemple maximiser la probabilité ou utiliser l'estimation basée sur . Pouvez-vous expliquer plus en détail ce que vous entendez par «inapproprié» ici? ϕ^
Glen_b -Reinstate Monica

1
Dans le but de tester mon propre code, j'ai généré un ensemble de données avec 10 000 tuples. Pour le générer, j'ai fixé , un échantillon généré , calculé (le paramètre d'échelle avec la fonction de lien inverse ), et a généré une variable aléatoire à partir de la distribution . Lorsque j'exécute R sur l'ensemble de données, son prédit est loin d'être . Quand j'ai fait cela pour d'autres distributions, la prédiction de R a été presque exactement correcte. V θ = ( β T V ) - 1 Y ~ Gamma ( 5 , θ ) β ββVθ=(βTV)1YGamma(5,θ)β^β
Jon Claus

12

J'ai utilisé la fonction gamma.shape du package MASS comme décrit par Balajari (2013) afin d'estimer le paramètre de forme par la suite, puis d'ajuster les estimations et les prédictions des coefficients dans le GLM. Je vous ai conseillé de lire la conférence car elle est, à mon avis, très claire et intéressante concernant l'utilisation de la distribution gamma dans les 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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.