Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
glm gaussien avec fonction de lien log
3 participants
Page 1 sur 2
Page 1 sur 2 • 1, 2
glm gaussien avec fonction de lien log
Bonjour à tous,
Je m’intéresse en ce moment à l'ajustement de glm sur données gaussiennes, mais avec une fonction de lien log.
L'idée n'est pas d'ajuster une ANOVA (ou régression) sur des données log-transformées (car ces données suivent des lois normales, pas log-normales), mais de modéliser un lien log entre x et y, et je tombe sur quelque chose que je ne comprends pas totalement. Je donne ici des exemples avec R :
Imaginons des données bidons telles que :
La log-vraisemblance du modèle null peut être calculée :
Et ça correspond effectivement à ce que je peux calculer "à la main" :
Jusque là, tout va bien.
La log-vraisemblance avec le facteur vaut :
Et donc, je peux calculer le Chi2 correspondant au test du rapport de vraisemblance (2 df) :
Si je prends à présent une fonction de lien log, plutôt que la fonction de lien par défaut identity, je retombe sur exactement les mêmes log-vraisemblances :
Et, effectivement, les données prédites par les deux modèles sont exactement les mêmes :
Et j'obtiens le même genre de chose si la variable explicative est continue plutôt qu'un facteur.
Comment est-ce possible ? Comment le modèle ajusté dans les deux cas décrit de manière équivalente les données et passent de la même manière dans les points ? Dans un schéma de régression linéaire, par exemple, c'est comme si on disait que y=ax+b était un modèle qui décrit de manière équivalente les données que log(y)=ax+b. Ca n'a guère de sens.
L'un d'entre vous aurait une explication ?
D'avance merci pour toute aide sur ce point.
Cordialement, Eric.
Je m’intéresse en ce moment à l'ajustement de glm sur données gaussiennes, mais avec une fonction de lien log.
L'idée n'est pas d'ajuster une ANOVA (ou régression) sur des données log-transformées (car ces données suivent des lois normales, pas log-normales), mais de modéliser un lien log entre x et y, et je tombe sur quelque chose que je ne comprends pas totalement. Je donne ici des exemples avec R :
Imaginons des données bidons telles que :
- Code:
x=rnorm(30,100)
Y=c(rep("a",10),rep("b",10),rep("c",10))
La log-vraisemblance du modèle null peut être calculée :
- Code:
logLik(glm(x~1,family=gaussian))
'log Lik.' -38.3441 (df=2)
Et ça correspond effectivement à ce que je peux calculer "à la main" :
- Code:
mu=mean(x)
sigma=sqrt(var(x)*(length(x)-1)/length(x))
-log(sigma*sqrt(2*pi))*length(x)-1/(2*sigma*sigma)*sum((x-mu)*(x-mu))
[1] -38.3441
Jusque là, tout va bien.
La log-vraisemblance avec le facteur vaut :
- Code:
logLik(glm(x~Y,family=gaussian))
'log Lik.' -36.36673 (df=4)
Et donc, je peux calculer le Chi2 correspondant au test du rapport de vraisemblance (2 df) :
- Code:
2*(-36.36673+38.3441)
[1] 3.95474
Si je prends à présent une fonction de lien log, plutôt que la fonction de lien par défaut identity, je retombe sur exactement les mêmes log-vraisemblances :
- Code:
logLik(glm(x~1,family=gaussian(link="log")))
'log Lik.' -38.3441 (df=2)
logLik(glm(x~Y,family=gaussian(link="log")))
'log Lik.' -36.36673 (df=4)
Et, effectivement, les données prédites par les deux modèles sont exactement les mêmes :
- Code:
log(predict(m1,newdata=data.frame(Y=levels(Y))))
predict(m1log,newdata=data.frame(Y=levels(Y)))
Et j'obtiens le même genre de chose si la variable explicative est continue plutôt qu'un facteur.
Comment est-ce possible ? Comment le modèle ajusté dans les deux cas décrit de manière équivalente les données et passent de la même manière dans les points ? Dans un schéma de régression linéaire, par exemple, c'est comme si on disait que y=ax+b était un modèle qui décrit de manière équivalente les données que log(y)=ax+b. Ca n'a guère de sens.
L'un d'entre vous aurait une explication ?
D'avance merci pour toute aide sur ce point.
Cordialement, Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
Bonjour,
en essayant avec une variable explicative continue, j'obtiens des différences pour le coup.
Je suppose que c'est le fait de travailler avec des facteurs qui fait que les modèles sont équivalents?
en essayant avec une variable explicative continue, j'obtiens des différences pour le coup.
- Code:
dt <- data.frame(x=rnorm(30,100))
dt$e <- rnorm(30, 0, 0.1)
dt$Y <- dt$x/4+dt$e
m1 <- glm(x ~ Y, dt, family=gaussian)
m1log <- glm(x ~ Y, dt, family=gaussian(link="log"))
dt$pred <- predict(m1,newdata=dt)
dt$pred.m1log <- exp(predict(m1log,newdata=dt))
Je suppose que c'est le fait de travailler avec des facteurs qui fait que les modèles sont équivalents?
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
Merci niaboc.niaboc a écrit:en essayant avec une variable explicative continue, j'obtiens des différences pour le coup.
- Code:
dt <- data.frame(x=rnorm(30,100))
dt$e <- rnorm(30, 0, 0.1)
dt$Y <- dt$x/4+dt$e
m1 <- glm(x ~ Y, dt, family=gaussian)
m1log <- glm(x ~ Y, dt, family=gaussian(link="log"))
dt$pred <- predict(m1,newdata=dt)
dt$pred.m1log <- exp(predict(m1log,newdata=dt))
Es-tu sûr ??
De mon côté, les deux modèles donnent les mêmes prédictions :
- Code:
> x=rnorm(30,100)
> Y=x/4+rnorm(30, 0, 0.1)
> essai=data.frame(x=x,Y=Y)
> predict(glm(x ~ Y,family=gaussian),newdata=essai)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
100.39576 100.07423 99.19627 101.59396 100.95952 100.53535 100.30574 101.16503 101.11852 100.07658 102.12423 102.26759 99.43297 101.05304 99.96581 99.53063
17 18 19 20 21 22 23 24 25 26 27 28 29 30
99.79669 100.68595 100.77615 100.55683 99.58692 99.14812 100.09313 100.19665 98.76049 101.66997 99.11534 99.46862 100.77246 101.15616
> exp(predict(glm(x ~ Y,family=gaussian(link="log")),newdata=essai))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
100.39181 100.07122 99.20104 101.59556 100.95639 100.53130 100.30195 101.16299 101.11620 100.07356 102.13288 102.27864 99.43490 101.05035 99.96335 99.53155
17 18 19 20 21 22 23 24 25 26 27 28 29 30
99.79532 100.68203 100.77241 100.55279 99.58729 99.15355 100.09004 100.19316 98.77195 101.67240 99.12122 99.47016 100.76871 101.15406
Les petites différences sont juste des erreurs d'arrondi. Tu peux encore vérifier s'il te plait ? N'aurais-je un problème de calcul que de mon côté, ou bien est-ce que je fais une erreur grossière quelque part ?
Encore merci pour ta disponibilité.
Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
J'ai le même genre de différence, mais es-tu certain que ce soit des erreurs d'arrondi?
Si on modifie un tout petit peu le code pour récupérer un facteur (qui ne veut rien dire ici mais c'est juste pour l'exemple):
Dans ce cas j'ai exactement les mêmes prédictions.
Il me paraît logique d'avoir des résultats très proches avec ces deux modèles avec une variable continue.
Et il me paraît pas illogique d'avoir exactement les mêmes résultats sur des facteurs, puisque le jeu de coefficient lié à chaque modalité doit être "le même" (à une transformation près) lorsqu'on travaille avec Y ou ln(Y).
Si on modifie un tout petit peu le code pour récupérer un facteur (qui ne veut rien dire ici mais c'est juste pour l'exemple):
- Code:
x=rnorm(30,100)
Y=as.factor(round(x/4+rnorm(30, 0, 0.1),1))
essai=data.frame(x=x,Y=Y)
predict(glm(x ~ Y,family=gaussian),newdata=essai)
exp(predict(glm(x ~ Y,family=gaussian(link="log")),newdata=essai))
Dans ce cas j'ai exactement les mêmes prédictions.
Il me paraît logique d'avoir des résultats très proches avec ces deux modèles avec une variable continue.
Et il me paraît pas illogique d'avoir exactement les mêmes résultats sur des facteurs, puisque le jeu de coefficient lié à chaque modalité doit être "le même" (à une transformation près) lorsqu'on travaille avec Y ou ln(Y).
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
En prenant ces paramètres au hasard, j'ai de grosses différences en continue, et aucune en facteur :
- Code:
x=rnorm(30 ,500, 200)
Y=x/4+rnorm(30, 0, 10)
Y.f=factor(round(x/4+rnorm(30, 0, 10),1))
essai=data.frame(x=x,Y=Y)
essai.f=data.frame(x=x,Y=Y.f)
predict(glm(x ~ Y,family=gaussian),newdata=essai)
exp(predict(glm(x ~ Y,family=gaussian(link="log")),newdata=essai))
predict(glm(x ~ Y.f,family=gaussian),newdata=essai.f)
exp(predict(glm(x ~ Y.f,family=gaussian(link="log")),newdata=essai.f))
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
Ok, tu as raison. Ce ne sont donc pas des erreurs d'arrondi. Donc les deux modèles sont les mêmes seulement si la variable explicative est un facteur. On avance. Merci !niaboc a écrit:En prenant ces paramètres au hasard, j'ai de grosses différences en continue, et aucune en facteur :
- Code:
x=rnorm(30 ,500, 200)
Y=x/4+rnorm(30, 0, 10)
Y.f=factor(round(x/4+rnorm(30, 0, 10),1))
essai=data.frame(x=x,Y=Y)
essai.f=data.frame(x=x,Y=Y.f)
predict(glm(x ~ Y,family=gaussian),newdata=essai)
exp(predict(glm(x ~ Y,family=gaussian(link="log")),newdata=essai))
predict(glm(x ~ Y.f,family=gaussian),newdata=essai.f)
exp(predict(glm(x ~ Y.f,family=gaussian(link="log")),newdata=essai.f))
Mais alors il reste à comprendre pourquoi c'est le cas. L'ajustement d'un glm avec un facteur fonctionne juste comme avec une variable continue, car le facteur est codé avec des suites de 0/1 etc., et le modèle reste x=a*Y+b ou log(x)=a*Y+b. et les vraisemblances à maximiser ne doivent pas être les mêmes avec un lien log ou pas.
Si le facteur Y a deux modalités, par exemple, comparer les deux moyennes des x ou les deux moyennes des log(x), ça ne peut pas donner la même chose. Il y a encore quelque chose que je ne comprend pas.
Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
En repartant de la vraisemblance, si on a un modèle avec une constante uniquement, ça revient à minimiser somme(Yi-cst)²
Avec le lien log de la famille gaussienne, ça revient à minimiser somme(Yi-e(cst'))²
ce qui, j'imagine, donne la même chose et on a cst=e(cst')
Avec un facteur en plus, j'imagine qu'on peut avoir le même raisonnement sur l'ensemble des données propre à chaque modalité Xj ? avec la contrainte d'avoir une constante identique pour toutes les modalités : e(cst'+BXj)
Je comprendrais le problème de cette façon, pour l'instant... je continue un peu à réfléchir dessus :-).
Avec le lien log de la famille gaussienne, ça revient à minimiser somme(Yi-e(cst'))²
ce qui, j'imagine, donne la même chose et on a cst=e(cst')
Avec un facteur en plus, j'imagine qu'on peut avoir le même raisonnement sur l'ensemble des données propre à chaque modalité Xj ? avec la contrainte d'avoir une constante identique pour toutes les modalités : e(cst'+BXj)
Je comprendrais le problème de cette façon, pour l'instant... je continue un peu à réfléchir dessus :-).
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
Bon, dès que j'ai le temps - pas en ce moment - je vais réécrire in extenso la vraisemblance à maximiser dans le cas d'un facteur. Ca n'est pas très sorcier et je vais bien voir de quoi il retourne. Si je trouve une explication, je la mettrai ici.niaboc a écrit:En repartant de la vraisemblance, si on a un modèle avec une constante uniquement, ça revient à minimiser somme(Yi-cst)²
Avec le lien log de la famille gaussienne, ça revient à minimiser somme(Yi-e(cst'))²
ce qui, j'imagine, donne la même chose et on a cst=e(cst')
Avec un facteur en plus, j'imagine qu'on peut avoir le même raisonnement sur l'ensemble des données propre à chaque modalité Xj ? avec la contrainte d'avoir une constante identique pour toutes les modalités : e(cst'+BXj)
Je comprendrais le problème de cette façon, pour l'instant... je continue un peu à réfléchir dessus :-).
Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
Bon, j'avance, et je crois que j'identifie bien ce que je n'arrive pas à comprendre.
Je reprends rapidement le problème.
Dans une régression linéaire simple, la vraisemblance du modèle nul (gaussien), c'est à dire sans la variable explicative, vaut :
Là où les choses restent incompréhensibles pour moi est lorsqu'on passe à un lien log, toujours sur un modèle gaussien. Pour moi, la vraisemblance du modèle nul devrait devenir :
Et on constate que la log-vraisemblance pour le modèle nul est exactement la même (en tout cas dans un modèle gaussien) qu'on utilise un lien identity ou un lien log. De toute évidence je me plante en écrivant la vraisemblance du modèle avec un lien log, et comment se fait-il que l'utilisation d'un lien log ne change rien sur l'écriture de la vraisemblance ?
On est au cœur de ma question et toute aide sur ce point serait la bienvenue.
D'avance merci.
Eric.
Je reprends rapidement le problème.
Dans une régression linéaire simple, la vraisemblance du modèle nul (gaussien), c'est à dire sans la variable explicative, vaut :
- Code:
prod(1/(sigma*sqrt(2*pi))*exp(-(1/(2*sigma*sigma))*(y-mu)*(y-mu)))
- Code:
-log(sigma*sqrt(2*pi))*length(y)-1/(2*sigma*sigma)*sum((y-mu)*(y-mu))
- Code:
> set.seed(1)
> x=rnorm(30 ,500, 200)
> y=rnorm(30 ,500, 200)
- Code:
> mu=mean(y)
> sigma=sqrt(var(y)*(length(y)-1)/length(y))
> -log(sigma*sqrt(2*pi))*length(y)-1/(2*sigma*sigma)*sum((y-mu)*(y-mu))
[1] -194.1389
- Code:
> logLik(glm(y~1))
'log Lik.' -194.1389 (df=2)
Là où les choses restent incompréhensibles pour moi est lorsqu'on passe à un lien log, toujours sur un modèle gaussien. Pour moi, la vraisemblance du modèle nul devrait devenir :
- Code:
prod(1/(sigma*sqrt(2*pi))*exp(-(1/(2*sigma*sigma))*(y-log(mu))*(y-log(mu))))
- Code:
-log(sigma*sqrt(2*pi))*length(y)-1/(2*sigma*sigma)*sum((y-log(mu))*(y-log(mu)))
- Code:
> -log(sigma*sqrt(2*pi))*length(y)-1/(2*sigma*sigma)*sum((y-log(mu))*(y-log(mu)))
[1] -360.1578
- Code:
> logLik(glm(y~1,family=gaussian(link="log")))
'log Lik.' -194.1389 (df=2)
Et on constate que la log-vraisemblance pour le modèle nul est exactement la même (en tout cas dans un modèle gaussien) qu'on utilise un lien identity ou un lien log. De toute évidence je me plante en écrivant la vraisemblance du modèle avec un lien log, et comment se fait-il que l'utilisation d'un lien log ne change rien sur l'écriture de la vraisemblance ?
On est au cœur de ma question et toute aide sur ce point serait la bienvenue.
D'avance merci.
Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
Bon, je me trompe surement car je calcule rarement des vraisemblance de GLM à la main (dans le doute, si ça peut t'aider à avancer :-)) mais en détaillant je l'aurai calculé comme ça :
Ce qui au final revient au même lorsqu'on a aucune variable explicative.
Avec des variable explicatives on aurait log.mu=cst+BX dans l'équation de la vraisemblance
- Code:
log.mu <- log(mu)
-log(sigma*sqrt(2*pi))*length(y)-1/(2*sigma*sigma)*sum((y-exp(log.mu))*(y-exp(log.mu)))
Ce qui au final revient au même lorsqu'on a aucune variable explicative.
Avec des variable explicatives on aurait log.mu=cst+BX dans l'équation de la vraisemblance
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
Merci Niaboc,
Plusieurs points :
Le lien est un lien log. Je ne vois pas trop d'où vient du coup la fonction exp() dans cette histoire.
Effectivement, ça reviendrait au même sans aucune variable explicative, mais j'ai pris la vraisemblance d'un modèle nul pour simplifier le problème. On retrouve également la même vraisemblance avec l'ajout d'une variable explicative qualitative (facteur) qu'on ait un lien identity ou un lien log. C'est bien l'objet initial de mon post.
Je continue à chercher où je me plante (on trouve rien sur le web, et rien dans les bouquins que j'ai sur le glm). Encore une fois, si je trouve une réponse, je la posterai ici.
Merci en tout cas pour ton temps.
Eric.
Plusieurs points :
Le lien est un lien log. Je ne vois pas trop d'où vient du coup la fonction exp() dans cette histoire.
Effectivement, ça reviendrait au même sans aucune variable explicative, mais j'ai pris la vraisemblance d'un modèle nul pour simplifier le problème. On retrouve également la même vraisemblance avec l'ajout d'une variable explicative qualitative (facteur) qu'on ait un lien identity ou un lien log. C'est bien l'objet initial de mon post.
Je continue à chercher où je me plante (on trouve rien sur le web, et rien dans les bouquins que j'ai sur le glm). Encore une fois, si je trouve une réponse, je la posterai ici.
Merci en tout cas pour ton temps.
Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
Ça me paraissait logique que le lien log log(E(Y))=a+BX nous donne E(Y)=e(a+BX)
Et pour les facteurs ça reviendrait à créer en quelque sorte un système à j régressions avec constante uniquement pour chacune des j modalités du facteur? D'où la vraisemblance identique?
Mais j'ai l'impression que mes réponses t'embrouillent plus qu'autre chose, je ne dois pas être dans le vrai...
Bonne continuation ;-)
Et pour les facteurs ça reviendrait à créer en quelque sorte un système à j régressions avec constante uniquement pour chacune des j modalités du facteur? D'où la vraisemblance identique?
Mais j'ai l'impression que mes réponses t'embrouillent plus qu'autre chose, je ne dois pas être dans le vrai...
Bonne continuation ;-)
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
Et avec cette formule je retrouve bien la bonne vraisemblance, même pour une variable continue :
En espérant que ça t'aide
Bonne journée
- Code:
> dt <- data.frame(x=rnorm(30,100))
> dt$e <- rnorm(30, 0, 0.1)
> dt$Y <- dt$x/4+dt$e
> m1 <- glm(x ~ Y, dt, family=gaussian)
> m1.log <- glm(x ~ Y, dt, family=gaussian(link="log"))
> logLik(m1)
'log Lik.' -18.55711 (df=3)
> logLik(m1.log)
'log Lik.' -18.5297 (df=3)
> sigma.m1 <- sigma(m1)*sqrt((length(dt$x)-2)/length(dt$x))
> -log(sigma.m1*sqrt(2*pi))*length(dt$x)-1/(2*sigma.m1*sigma.m1)*sum((dt$x-coef(m1)[[1]]-coef(m1)[[2]]*dt$Y)*(dt$x-coef(m1)[[1]]-coef(m1)[[2]]*dt$Y))
[1] -18.55711
> sigma.m1.log <- sigma(m1.log)*sqrt((length(dt$x)-2)/length(dt$x))
> -log(sigma.m1.log*sqrt(2*pi))*length(dt$x)-1/(2*sigma.m1.log*sigma.m1.log)*sum((dt$x-exp(coef(m1.log)[[1]]+coef(m1.log)[[2]]*dt$Y))*(dt$x-exp(coef(m1.log)[[1]]+coef(m1.log)[[2]]*dt$Y)))
[1] -18.5297
En espérant que ça t'aide
Bonne journée
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
Non, non, tu ne m'embrouilles pas du tout - au contraire.
Je continue à creuser ça et reviendrai ici avec une solution si j'en trouve une. Il est possible que tu ais raison. Je vais voir ça plus en détail prochainement.
Eric.
Je continue à creuser ça et reviendrai ici avec une solution si j'en trouve une. Il est possible que tu ais raison. Je vais voir ça plus en détail prochainement.
Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
niaboc,
Toujours en train de plancher sur ce problème (à mes heures perdues..).
Pourrais-tu me dire d'où vient ce calcul de l'écart-type :
L'erreur standard de l'erreur du modèle multiplée par sqrt((n-2)/n) ?
D'avance merci, Eric.
Toujours en train de plancher sur ce problème (à mes heures perdues..).
Pourrais-tu me dire d'où vient ce calcul de l'écart-type :
- Code:
sigma(m1)*sqrt((length(dt$x)-2)/length(dt$x))
L'erreur standard de l'erreur du modèle multiplée par sqrt((n-2)/n) ?
D'avance merci, Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
oui, pour récupérer l'estimateur non biaisé de sigma.
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
L'estimateur non biaisé de sigma s'obtient en multipliant par sqrt((n-1)/n), pas par sqrt((n-2)/n).
J'ai loupé quelque chose ?
Eric.
J'ai loupé quelque chose ?
Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
J'utilise une variable explicative dans le modèle : glm(x ~ Y,...)
L'estimateur sans biais de sigma dépend du degré de liberté du modèle : n-p-1
p=1, du coup j'ai pris n-2
L'estimateur sans biais de sigma dépend du degré de liberté du modèle : n-p-1
p=1, du coup j'ai pris n-2
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
Ok, c'est sigma à travers le modèle, c'est vrai. Je regarde ça prochainement.
Il reste que ceci ne m'explique pas comment écrire la vraisemblance.
Merci encore, Eric.
Il reste que ceci ne m'explique pas comment écrire la vraisemblance.
Merci encore, Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
Bonjour,
je ne sais pas si ça peut aider, mais écrire un glm gaussien avec un lien log ça revient à écrire :
je ne sais pas si ça peut aider, mais écrire un glm gaussien avec un lien log ça revient à écrire :
- Code:
glm2 <- glm(x ~ Y, link = "log")
summary(glm2)$disper
[1] 1679.372
sum(residuals(glm2, type = "response")^2)/(length(Y)-2)
[1] 1679.368
sigma <- sqrt(summary(glm2)$disper)
yi <- predict(glm2, type = "response")
head(yi)
1 2 3 4 5 6
604.2352 334.3132 340.2646 695.4883 363.0601 398.0984
exp(cbind(1, Y) %*%matrix(coef(glm2), ncol = 1))
[,1]
[1,] 604.2352
[2,] 334.3132
[3,] 340.2646
[4,] 695.4883
[5,] 363.0601
[6,] 398.0984
-log(s2*sqrt(2*pi))*length(x)-1/(2*s2*s2)*sum((x-yi)*(x-yi))
[1] -152.9607
logLik(glm2)
'log Lik.' -152.9259 (df=3)
sum(dnorm(x, yi, s2, log = T))
[1] -152.9607
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: glm gaussien avec fonction de lien log
Merci droopy. Je regarde ceci dans le détail prochainement. Plusieurs points cependant :
1) Un glm sur données gaussiennes avec un lien log s'écrit log(Y)=ax+b+epsilon. Donc je pense que le epsilon est dans l’exponentiel.
2) J'imagine que "s2" dans ton code est l'écart type des résidus du modèle (ce n'est pas dit). Du coup cet écart-type dépend des paramètres estimés du modèle et doit être écrit in extenso dans la vraisemblance pour pouvoir la maximiser. On reste donc avec le problème initial de l'écriture de la vraisemblance dans ce type de modèles.
3) Tout ceci n'explique pas que l'usage d'une variable explicative discrète (facteur) fait que l'usage d'un lien log donne exactement les mêmes résultats qu'un lien identity.
4) Question en plus : Comment fais-tu pour insérer des équations dans ce forum ? Dans ce genre de discussions, ça me serait grandement utile, mais je ne sais comment faire.
Encore merci, en tout cas,
Eric.
1) Un glm sur données gaussiennes avec un lien log s'écrit log(Y)=ax+b+epsilon. Donc je pense que le epsilon est dans l’exponentiel.
2) J'imagine que "s2" dans ton code est l'écart type des résidus du modèle (ce n'est pas dit). Du coup cet écart-type dépend des paramètres estimés du modèle et doit être écrit in extenso dans la vraisemblance pour pouvoir la maximiser. On reste donc avec le problème initial de l'écriture de la vraisemblance dans ce type de modèles.
3) Tout ceci n'explique pas que l'usage d'une variable explicative discrète (facteur) fait que l'usage d'un lien log donne exactement les mêmes résultats qu'un lien identity.
4) Question en plus : Comment fais-tu pour insérer des équations dans ce forum ? Dans ce genre de discussions, ça me serait grandement utile, mais je ne sais comment faire.
Encore merci, en tout cas,
Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: glm gaussien avec fonction de lien log
Eric Wajnberg a écrit:Merci droopy. Je regarde ceci dans le détail prochainement. Plusieurs points cependant :
1) Un glm sur données gaussiennes avec un lien log s'écrit log(Y)=ax+b+epsilon. Donc je pense que le epsilon est dans l’exponentiel.
2) J'imagine que "s2" dans ton code est l'écart type des résidus du modèle (ce n'est pas dit). Du coup cet écart-type dépend des paramètres estimés du modèle et doit être écrit in extenso dans la vraisemblance pour pouvoir la maximiser. On reste donc avec le problème initial de l'écriture de la vraisemblance dans ce type de modèles.
3) Tout ceci n'explique pas que l'usage d'une variable explicative discrète (facteur) fait que l'usage d'un lien log donne exactement les mêmes résultats qu'un lien identity.
4) Question en plus : Comment fais-tu pour insérer des équations dans ce forum ? Dans ce genre de discussions, ça me serait grandement utile, mais je ne sais comment faire.
Encore merci, en tout cas,
Eric.
1) es-tu certain de ça? ça ressemble plus à une transformation logarithmique ce que tu écris.
Un lien log, je vois ça plutôt comme : log(E(Y))=a+bx => E(Y)=exp(a+bx) => y=exp(a+bx)+epsilon
3) avec log(E(Y))=a+bx, ça s'explique je pense... Pour un modèle avec une constante uniquement, la relation entre les deux modèles (lien identité ou log) est facilement calculable.
Avec un facteur, le raisonnement est très semblable.
4) je ne sais pas si c'est possible. Droopy a juste collé une image non?
niaboc- Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008
Re: glm gaussien avec fonction de lien log
Sans vouloir faire le têtu, je pense que ma réponse est bonne. Sinon tu n'aurais qu'à faire une modèle linéaire sur le log de ta variable tel que tu l'as écrit. D'ailleurs, le calcul de lu paramètre de dispersion retourné par le summary et qui est la variance résiduelle, correspond bien à la somme des résidus dans l'espace de la variable/(n-p-1 = n-2) et dans l'espace du lien.Eric Wajnberg a écrit:1) Un glm sur données gaussiennes avec un lien log s'écrit log(Y)=ax+b+epsilon. Donc je pense que le epsilon est dans l’exponentiel.
Peut-être seras-tu plus convaincu en lisant ceci :
https://www.r-bloggers.com/2018/10/generalized-linear-models-understanding-the-link-function/
Oui pardon le s2 était bien l'écart-type résiduel. Tu as le même problème avec le modèle linéaire classique. Il te faut estimer s2 et tu prends pour estimateur la somme des résidus²/(n-p-1), donc il te faut aussi calculer les paramètres du modèle avant.Eric Wajnberg a écrit:J'imagine que "s2" dans ton code est l'écart type des résidus du modèle (ce n'est pas dit). Du coup cet écart-type dépend des paramètres estimés du modèle et doit être écrit in extenso dans la vraisemblance pour pouvoir la maximiser. On reste donc avec le problème initial de l'écriture de la vraisemblance dans ce type de modèles.
J'avoue ne pas avoir pris le temps de réfléchir à la question.Eric Wajnberg a écrit:3) Tout ceci n'explique pas que l'usage d'une variable explicative discrète (facteur) fait que l'usage d'un lien log donne exactement les mêmes résultats qu'un lien identity.
J'écris les équations en ligne ici : https://www.codecogs.com/latex/eqneditor.php. Ensuite je copie le lien de l'image, après tu cliques sur le bouton insérer une image et tu peux coller ton lien.Eric Wajnberg a écrit:4) Question en plus : Comment fais-tu pour insérer des équations dans ce forum ? Dans ce genre de discussions, ça me serait grandement utile, mais je ne sais comment faire.
cdlt
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: glm gaussien avec fonction de lien log
Après réflexion je pense que c'est justement la nature discrète qui fait que l'usage d'un lien log donne les mêmes résultats (enfin presque, les coefficients ne sont pas les mêmes, mais les valeurs prédites dans l'espace de Y oui).Eric Wajnberg a écrit:3) Tout ceci n'explique pas que l'usage d'une variable explicative discrète (facteur) fait que l'usage d'un lien log donne exactement les mêmes résultats qu'un lien identity.
Pour chaque modalité, il n'y a qu'une seule valeur prédite, l'estimation de l'espérance pour cette catégorie, donc on a une constante.
Au final tu te retrouves avec E(Y|xi) = a ==> log(E(Y|xi)) = log(a), ou alors E(Y|xi) = exp(A) ==> log(E(Yxi)) = A, tu as donc que a =exp(A).
D'ailleurs l'exemple sur le facteur te montre bien que la variance est constante sur l'espace de Y puisque les modèles avec et sans lien log te donnent les mêmes estimations dans l'espace de la variable mais aussi la même estimation de la dispersion.
Il n'y a que la valeur et l'interprétation des coefficients qui changent.
cdlt
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: glm gaussien avec fonction de lien log
La discussion s'enrichie !
Mes réponses :
Eric.
Mes réponses :
Un modèle gaussien avec un lien log n'est pas équivalent à un modèle gaussien avec un lien identity sur des données préalablement log-transformées. Ca se vérifie facilement. Dans le premier cas, on modélise une relation log entre x et y avec des données normales. Dans le second, on modélise un lien linéaire sur des données log-normales. C'est bien la "magie" du l'usage de liens non canoniques dans un glm. Pour epsilon, il me semble plus logique qu'il soit dans l'exponentiel.droopy a écrit:Sans vouloir faire le têtu, je pense que ma réponse est bonne. Sinon tu n'aurais qu'à faire une modèle linéaire sur le log de ta variable tel que tu l'as écrit. D'ailleurs, le calcul de lu paramètre de dispersion retourné par le summary et qui est la variance résiduelle, correspond bien à la somme des résidus dans l'espace de la variable/(n-p-1 = n-2) et dans l'espace du lien.Eric Wajnberg a écrit:1) Un glm sur données gaussiennes avec un lien log s'écrit log(Y)=ax+b+epsilon. Donc je pense que le epsilon est dans l’exponentiel.
Peut-être seras-tu plus convaincu en lisant ceci :
https://www.r-bloggers.com/2018/10/generalized-linear-models-understanding-the-link-function/
Dans un modèle linéaire classique, je peux recalculer à la main la vraisemblance sans problème en prenant l'écart-type des données d'origine, donc sans le calcul des paramètres avant. Et il reste que je voudrais comprendre comment s'écrit la log-vraisemblance d'un modèle gaussien avec un lien log. C'est la question du départ.droopy a écrit:Oui pardon le s2 était bien l'écart-type résiduel. Tu as le même problème avec le modèle linéaire classique. Il te faut estimer s2 et tu prends pour estimateur la somme des résidus²/(n-p-1), donc il te faut aussi calculer les paramètres du modèle avant.Eric Wajnberg a écrit:J'imagine que "s2" dans ton code est l'écart type des résidus du modèle (ce n'est pas dit). Du coup cet écart-type dépend des paramètres estimés du modèle et doit être écrit in extenso dans la vraisemblance pour pouvoir la maximiser. On reste donc avec le problème initial de l'écriture de la vraisemblance dans ce type de modèles.
Cool, je ne connaissais pas. Vraiment pratique, merci.droopy a écrit:J'écris les équations en ligne ici : https://www.codecogs.com/latex/eqneditor.php. Ensuite je copie le lien de l'image, après tu cliques sur le bouton insérer une image et tu peux coller ton lien.Eric Wajnberg a écrit:4) Question en plus : Comment fais-tu pour insérer des équations dans ce forum ? Dans ce genre de discussions, ça me serait grandement utile, mais je ne sais comment faire.
Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Page 1 sur 2 • 1, 2
Sujets similaires
» Risque relatif asymptotiquement gaussien
» Log transform ou lien log ?
» ACP lien entre variables
» Lien entre une variable continue et une catégorielle
» Lien entres des notes et des %
» Log transform ou lien log ?
» ACP lien entre variables
» Lien entre une variable continue et une catégorielle
» Lien entres des notes et des %
Page 1 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum