Comment spécifier une distribution lognormale dans l'argument de la famille glm dans R?


17

Question simple: comment spécifier une distribution log-normale dans l'argument de la famille GLM dans R? Je n'ai pas pu trouver comment cela pourrait être réalisé. Pourquoi la lognormale (ou exponentielle) n'est-elle pas une option dans l'argument familial?

Quelque part dans les archives R, j'ai lu qu'il suffit d'utiliser le lien de journal pour la famille définie sur gaussien dans le GLM, afin de spécifier un lognormal. Cependant, cela n'a pas de sens car cela correspondra à une régression non linéaire et R commence à demander des valeurs de départ.

Quelqu'un sait-il comment définir une distribution lognormale (ou exponentielle) pour un GLM?


1
Cela devrait être sur SO avec une balise [r].
DWin

4
@DWin - Je suis en désaccord pour une fois - Je vote souvent pour migrer Qs vers SO moi-même, mais cette question a un contenu statistique important.
onestop

Réponses:


8

Le package gamlss vous permet d'adapter des modèles additifs généralisés avec des distributions lognormales et exponentielles, et un tas d'autres, avec une certaine variété de fonctions de liaison et en utilisant, si vous le souhaitez, des modèles semi-paramétriques ou non paramétriques basés sur des splines pénalisées. Il y a des articles publiés sur les algorithmes utilisés et la documentation et des exemples liés au site auquel je me suis connecté.


10

Concernant l'ajustement du modèle exponentiel avec glm: Lorsque vous utilisez la glmfonction avec family = Gamma, vous devez également utiliser les fonctions de support de summary.glmafin de fixer le paramètre de dispersion à 1:

?summary.glm
fit <- glm(formula =..., family = Gamma)
summary(fit,dispersion=1) 

Et comme j'allais le souligner, mais jbowman m'a battu, le (s) package (s) "gamlss" permet un ajustement log-normal:

help(dLOGNO, package=gamlss.dist)

1
Je ne savais pas comment fixer le paramètre de dispersion (+1).
jbowman

J'ai vu cette solution dans un autre post, je pense. Cependant, il y a deux problèmes. Premièrement, dans ce cas, seul le résumé est ajusté, mais les paramètres que je dois extraire (résidus, etc.) ne sont pas ajustés à la dispersion de 1, ou je me trompe? Deuxièmement, je ne peux pas m'adapter à la famille = Gamma car il y a des zéros dans l'ensemble de données (en fait, ce sont de très petites valeurs mais elles ont été fixées à zéro). Je vais vérifier le package gamlss.dist!
Jens

1
Eh bien, le problème des zéros n'est pas un problème avec R ou glm, mais avec les mathématiques, ... et si vous avez des estimations de paramètres, la construction des résidus est triviale dans R. Postez cette question dans SO avec une balise [r] et vous obtiendra sûrement une réponse rapide.
DWin

9

Lognormal n'est pas une option car la distribution log-normale n'est pas dans la famille exponentielle des distributions. Les modèles linéaires généralisés ne peuvent ajuster que les distributions de la famille exponentielle.

Je suis moins clair pourquoi l'exponentielle n'est pas une option, car la distribution exponentielle est dans la famille exponentielle (comme vous pouvez l'espérer). D'autres logiciels statistiques que je connais permettent d'ajuster la distribution exponentielle comme un GLM en la traitant comme un cas particulier de la distribution Gamma avec un paramètre de forme (aka échelle ou dispersion) fixé à 1 plutôt qu'estimé. glm()Cependant, je ne vois pas de moyen de corriger ce paramètre en utilisant la fonction de R. Une alternative serait d'utiliser la survreg()fonction du survivalpackage avec dist="exponential".

ylog(y)E(log(Y))log(E(Y)).


8
h(x),T(x),A(θ)

Avez-vous une référence pour l'affirmation selon laquelle "les modèles linéaires généralisés ne peuvent s'adapter qu'aux distributions de la famille exponentielle"?
Henrik

5

L'ajustement d'un GLM log-normal n'a rien à voir avec la distribution ni l'option de lien de la glm()fonction. Le terme "log-normal" est assez déroutant dans ce sens, mais signifie que la variable de réponse est normalement distribuée (famille = gaussienne), et une transformation est appliquée à cette variable de la manière suivante:

log.glm <- glm(log(y)~x, family=gaussian, data=my.dat)

Cependant, lors de la comparaison de ce glm log-normal avec d'autres glms utilisant une distribution différente (par exemple, gamma), la fonction AIC () doit être corrigée. Quelqu'un connaîtrait-il une alternative à ces AIC () erronés, dans ce cas?


2
Bienvenue sur le site, @CHarma. Si vous avez une question, veuillez cliquer sur le gris "POSER UNE QUESTION" dans le coin supérieur droit, plutôt que de l'inclure dans votre réponse.
gung - Rétablir Monica

1

Essayez d'utiliser la commande suivante:

log.glm = glm(y ~ x, family=gaussian(link="log"), data=my.dat)

Cela fonctionne ici et l'AIC semble être correct.


7
Cette réponse est fausse. Cela signifierait que la distribution conditionnelle de y est gaussienne et la moyenne enregistrée serait égale au prédicteur linéaire. Certainement pas ce que l'OP décrit.
Michael M
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.