Forum de Statistiques
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Les posteurs les plus actifs de la semaine
Aucun utilisateur


glm gaussien avec fonction de lien log

3 participants

Page 1 sur 2 1, 2  Suivant

Aller en bas

glm gaussien avec fonction de lien log Empty glm gaussien avec fonction de lien log

Message par Eric Wajnberg Mer 28 Avr 2021 - 8:06

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 :
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
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Jeu 29 Avr 2021 - 13:35

Bonjour,

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
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Jeu 29 Avr 2021 - 14:50

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))
Merci niaboc.

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
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Jeu 29 Avr 2021 - 15:50

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):

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
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Jeu 29 Avr 2021 - 16:04

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
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Jeu 29 Avr 2021 - 18:12

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))
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 !

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
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Ven 30 Avr 2021 - 8:42

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 :-).
niaboc
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Ven 30 Avr 2021 - 15:13

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 :-).
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.

Eric.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Dim 2 Mai 2021 - 8:02

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 :

Code:
prod(1/(sigma*sqrt(2*pi))*exp(-(1/(2*sigma*sigma))*(y-mu)*(y-mu)))
Et donc le log de cette vraisemblance pour un modèle nul vaut :
Code:
-log(sigma*sqrt(2*pi))*length(y)-1/(2*sigma*sigma)*sum((y-mu)*(y-mu))
Sur le jeu de données suivant :
Code:
> set.seed(1)
> x=rnorm(30 ,500, 200)
> y=rnorm(30 ,500, 200)
Ca donne :
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
Et ceci correspond bien à ce que calcul R :
Code:
> logLik(glm(y~1))
'log Lik.' -194.1389 (df=2)
Jusque là tout est clair.

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))))
Et donc le log de cette vraisemblance pour un modèle nul devrait à présent valoir :
Code:
-log(sigma*sqrt(2*pi))*length(y)-1/(2*sigma*sigma)*sum((y-log(mu))*(y-log(mu)))
Si je fais le calcul sur le même jeu de données, je trouve :
Code:
> -log(sigma*sqrt(2*pi))*length(y)-1/(2*sigma*sigma)*sum((y-log(mu))*(y-log(mu)))
[1] -360.1578
Mais ceci ne correspond absolument pas à ce que trouve R :
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
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Dim 2 Mai 2021 - 10:41

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 :

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
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Dim 2 Mai 2021 - 15:34

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.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Dim 2 Mai 2021 - 16:25

Ç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 ;-)
niaboc
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Lun 3 Mai 2021 - 6:42

Et avec cette formule je retrouve bien la bonne vraisemblance, même pour une variable continue :

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
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Lun 3 Mai 2021 - 16:06

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.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Jeu 6 Mai 2021 - 8:27

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 :
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
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Jeu 6 Mai 2021 - 8:43

oui, pour récupérer l'estimateur non biaisé de sigma.
niaboc
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Jeu 6 Mai 2021 - 10:00

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.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Jeu 6 Mai 2021 - 10:49

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
niaboc
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Jeu 6 Mai 2021 - 12:34

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.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par droopy Jeu 6 Mai 2021 - 16:23

Bonjour,

je ne sais pas si ça peut aider, mais écrire un glm gaussien avec un lien log ça revient à écrire :

glm gaussien avec fonction de lien log Gif.latex?%5Cleft%7C%5Cbegin%7Bmatrix%7D%20Y%3De%5E%7B%28ax&plus;b%29%7D&plus;e%5C%5C%20e%5Csim%20N%280%2C%5Chat%7B%5Csigma%7D%29%20%5Cend%7Bmatrix%7D%5Cright

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
cdlt
droopy
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Ven 7 Mai 2021 - 9:28

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.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par niaboc Ven 7 Mai 2021 - 10:02

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
niaboc

Nombre de messages : 1001
Age : 37
Localisation : Paris
Date d'inscription : 05/05/2008

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par droopy Ven 7 Mai 2021 - 11:11

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.
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.
Peut-être seras-tu plus convaincu en lisant ceci :
https://www.r-bloggers.com/2018/10/generalized-linear-models-understanding-the-link-function/

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.
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: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'avoue ne pas avoir pris le temps de réfléchir à la question.

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.
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.

cdlt


droopy
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par droopy Ven 7 Mai 2021 - 13:46

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.
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).
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
droopy

Nombre de messages : 1156
Date d'inscription : 04/09/2009

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Eric Wajnberg Ven 7 Mai 2021 - 16:07

La discussion s'enrichie !

Mes réponses :
droopy a écrit:
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.
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.
Peut-être seras-tu plus convaincu en lisant ceci :
https://www.r-bloggers.com/2018/10/generalized-linear-models-understanding-the-link-function/
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:
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.
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.
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:
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.
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.
Cool, je ne connaissais pas. Vraiment pratique, merci.

Eric.
Eric Wajnberg
Eric Wajnberg

Nombre de messages : 1237
Date d'inscription : 14/09/2012

Revenir en haut Aller en bas

glm gaussien avec fonction de lien log Empty Re: glm gaussien avec fonction de lien log

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum