J'essaie de comprendre la philosophie qui sous-tend l'utilisation d'un modèle linéaire généralisé (GLM) par rapport à un modèle linéaire (LM). J'ai créé un exemple de jeu de données ci-dessous où:
L'exemple n'a pas l'erreur en fonction de la magnitude de , donc je supposerais qu'un modèle linéaire de y transformé en log serait le meilleur. Dans l'exemple ci-dessous, c'est effectivement le cas (je pense), car l'AIC du LM sur les données transformées en journal est la plus basse. L'AIC du modèle GLM à distribution gamma avec fonction de liaison de journal a une somme de carrés (SS) inférieure, mais les degrés de liberté supplémentaires entraînent un AIC légèrement supérieur. J'ai été surpris de constater que la distribution gaussienne AIC est tellement plus élevée (même si le SS est le plus bas des modèles).
J'espère obtenir des conseils sur le moment opportun pour aborder les modèles GLM - c.-à-d. Y a-t-il quelque chose que je devrais rechercher dans les valeurs résiduelles de mon modèle LM pour me dire qu'une autre distribution est plus appropriée? En outre, comment choisir une famille de distribution appropriée?
Merci d'avance pour votre aide.
[EDIT]: J'ai maintenant ajusté les statistiques récapitulatives afin que le SS du modèle linéaire transformé en log soit comparable aux modèles GLM avec la fonction log-link. Un graphique des statistiques est maintenant affiché.
Exemple
set.seed(1111)
n <- 1000
y <- rnorm(n, mean=0, sd=1)
y <- exp(y)
hist(y, n=20)
hist(log(y), n=20)
x <- log(y) - rnorm(n, mean=0, sd=1)
hist(x, n=20)
df <- data.frame(y=y, x=x)
df2 <- data.frame(x=seq(from=min(df$x), to=max(df$x),,100))
#models
mod.name <- "LM"
assign(mod.name, lm(y ~ x, df))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2) ~ df2$x, col=2)
mod.name <- "LOG.LM"
assign(mod.name, lm(log(y) ~ x, df))
summary(get(mod.name))
plot(y ~ x, df)
lines(exp(predict(get(mod.name), newdata=df2)) ~ df2$x, col=2)
mod.name <- "LOG.GAUSS.GLM"
assign(mod.name, glm(y ~ x, df, family=gaussian(link="log")))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2, type="response") ~ df2$x, col=2)
mod.name <- "LOG.GAMMA.GLM"
assign(mod.name, glm(y ~ x, df, family=Gamma(link="log")))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2, type="response") ~ df2$x, col=2)
#Results
model.names <- list("LM", "LOG.LM", "LOG.GAUSS.GLM", "LOG.GAMMA.GLM")
plot(y ~ x, df, log="y", pch=".", cex=3, col=8)
lines(predict(LM, newdata=df2) ~ df2$x, col=1, lwd=2)
lines(exp(predict(LOG.LM, newdata=df2)) ~ df2$x, col=2, lwd=2)
lines(predict(LOG.GAUSS.GLM, newdata=df2, type="response") ~ df2$x, col=3, lwd=2)
lines(predict(LOG.GAMMA.GLM, newdata=df2, type="response") ~ df2$x, col=4, lwd=2)
legend("topleft", legend=model.names, col=1:4, lwd=2, bty="n")
res.AIC <- as.matrix(
data.frame(
LM=AIC(LM),
LOG.LM=AIC(LOG.LM),
LOG.GAUSS.GLM=AIC(LOG.GAUSS.GLM),
LOG.GAMMA.GLM=AIC(LOG.GAMMA.GLM)
)
)
res.SS <- as.matrix(
data.frame(
LM=sum((predict(LM)-y)^2),
LOG.LM=sum((exp(predict(LOG.LM))-y)^2),
LOG.GAUSS.GLM=sum((predict(LOG.GAUSS.GLM, type="response")-y)^2),
LOG.GAMMA.GLM=sum((predict(LOG.GAMMA.GLM, type="response")-y)^2)
)
)
res.RMS <- as.matrix(
data.frame(
LM=sqrt(mean((predict(LM)-y)^2)),
LOG.LM=sqrt(mean((exp(predict(LOG.LM))-y)^2)),
LOG.GAUSS.GLM=sqrt(mean((predict(LOG.GAUSS.GLM, type="response")-y)^2)),
LOG.GAMMA.GLM=sqrt(mean((predict(LOG.GAMMA.GLM, type="response")-y)^2))
)
)
png("stats.png", height=7, width=10, units="in", res=300)
#x11(height=7, width=10)
par(mar=c(10,5,2,1), mfcol=c(1,3), cex=1, ps=12)
barplot(res.AIC, main="AIC", las=2)
barplot(res.SS, main="SS", las=2)
barplot(res.RMS, main="RMS", las=2)
dev.off()
la source
Réponses:
Bon effort pour réfléchir à cette question. Voici une réponse incomplète, mais quelques points de départ pour les prochaines étapes.
Premièrement, les scores AIC - basés sur les probabilités - sont sur des échelles différentes en raison des distributions différentes et des fonctions de liaison différentes, et ne sont donc pas comparables. Votre somme de carrés et votre somme moyenne de carrés ont été calculées sur l’échelle initiale et sont donc sur la même échelle. Vous pouvez donc les comparer, bien qu’il s’agisse d’un bon critère pour la sélection du modèle ou non. - recherchez dans les archives croisées sur la sélection du modèle une bonne discussion à ce sujet).
Pour votre question plus générale, un bon moyen de se concentrer sur le problème consiste à considérer la différence entre LOG.LM (votre modèle linéaire avec la réponse sous la forme log (y)); et LOG.GAUSS.GLM, le gsm avec la réponse sous la forme y et une fonction de liaison de journal. Dans le premier cas, le modèle que vous montez est le suivant:
et dans le cas glm () c'est:
et dans les deux cas, est distribué .N ( 0 , σ 2 )ε N( 0 , σ2)
la source
À mon avis, la famille de distribution est une question de variance et de sa relation avec la moyenne. Par exemple, dans une famille gaussienne, la variance est constante. Dans une famille gamma, la variance est une fonction quadratique de la moyenne. Tracez vos résidus standardisés par rapport aux valeurs ajustées et voyez comment ils sont.
la source
R
Les métriques pour ce modèle (comme l'AIC) ne seront pas comparables à vos modèles. Cependant, nous savons que c'est le bon modèle basé sur le processus de génération de données, et nous remarquons que les coefficients estimés sont exactement dans les objectifs.
la source
x = log(y) - rnorm(n, mean=0, sd=1)
, vous obtenez log (y) = x + rnorm (n, moyenne = 0, sd = 1). Si le commentaire de @ whuber a engendré votre réponse (je crois que oui), alors je crois qu'il ne fait pas référence à la génération de données, mais plutôt à la formulation du modèle GLM par @peterellis.Le choix est basé sur votre hypothèse sur votre variable.
la distribution gamma est basée sur
La transformation du journal repose sur l'hypothèse que,
De cette façon,
Basé sur la règle de Taylor,
On a
Ainsi,
Cependant, la distribution gamma repose sur l'hypothèse que,
la source