Estoy tratando de entender la filosofía detrás del uso de un modelo lineal generalizado (GLM) frente a un modelo lineal (LM). He creado un conjunto de datos de ejemplo a continuación donde:
El ejemplo no tiene el error como una función de la magnitud de , por lo que supongo que un modelo lineal de log transformado sería el mejor. En el siguiente ejemplo, este es el caso (creo), ya que el AIC del LM en los datos transformados logarítmicamente es el más bajo. El AIC del GLM de distribución Gamma con una función de enlace logarítmico tiene una suma de cuadrados (SS) más baja, pero los grados de libertad adicionales dan como resultado un AIC ligeramente más alto. Me sorprendió que la distribución gaussiana AIC sea mucho más alta (aunque el SS es el más bajo de los modelos).y
Espero obtener algunos consejos sobre cuándo uno debe acercarse a los modelos GLM, es decir, ¿hay algo que deba buscar en los residuos de ajuste de mi modelo LM para decirme que otra distribución es más apropiada? Además, ¿cómo se debe proceder al seleccionar una familia de distribución adecuada?
Muchas gracias de antemano por su ayuda.
[EDITAR]: ahora he ajustado las estadísticas de resumen para que el SS del modelo lineal transformado logarítmica sea comparable a los modelos GLM con la función de enlace logarítmico. Ahora se muestra un gráfico de las estadísticas.
Ejemplo
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()
fuente
Respuestas:
Buen esfuerzo para pensar en este tema. Aquí hay una respuesta incompleta, pero algunos entrantes para los próximos pasos.
Primero, los puntajes de AIC, basados en probabilidades, están en diferentes escalas debido a las diferentes distribuciones y funciones de enlace, por lo que no son comparables. Su suma de cuadrados y la suma media de cuadrados se han calculado en la escala original y, por lo tanto, están en la misma escala, por lo que se pueden comparar, aunque si este es un buen criterio para la selección del modelo es otra cuestión (puede ser o no) - busque en los archivos con validación cruzada sobre la selección de modelos para una buena discusión sobre esto).
Para su pregunta más general, una buena forma de enfocarse en el problema es considerar la diferencia entre LOG.LM (su modelo lineal con la respuesta como log (y)); y LOG.GAUSS.GLM, el glm con la respuesta como y y una función de enlace de registro. En el primer caso, el modelo que está ajustando es:
y en el caso glm () es:
y en ambos casos se distribuye .N ( 0 , σ 2 )ϵ N(0,σ2)
fuente
De una manera más general, y no son lo mismo. Además, los supuestos de varianza hechos por GLM son más flexibles que en OLS, y para ciertos La situación de modelado como recuento de varianza puede ser diferente teniendo familias de distribución distintas.ln ( [ E ( Y | X ] )E[ln(Y|x)] ln([E(Y|X])
Acerca de la familia de distribución en mi opinión es una pregunta sobre la varianza y su relación con la media. Por ejemplo, en una familia gaussiana tenemos una varianza constante. En una familia gamma tenemos la varianza como una función cuadrática de la media. Trace sus residuos estandarizados frente a los valores ajustados y vea cómo están.
fuente
Desafortunadamente, sulog(y)=x+ε x=log(y)+ε x y
R
código no conduce a un ejemplo donde . En cambio, su ejemplo es . Los errores aquí son horizontales, no verticales; son errores en , no errores en . Intuitivamente, parece que esto no debería hacer la diferencia, pero lo hace. Es posible que desee leer mi respuesta aquí: ¿Cuál es la diferencia entre la regresión lineal en y con x y x con y? Su configuración complica la cuestión de cuál es el modelo "correcto". Estrictamente, el modelo correcto es la regresión inversa: x = log ( y ) + ε x yLas métricas para este modelo (como el AIC) no serán comparables con sus modelos. Sin embargo, sabemos que este es el modelo correcto basado en el proceso de generación de datos, y notamos que los coeficientes estimados están justo en el objetivo.
fuente
x = log(y) - rnorm(n, mean=0, sd=1)
, obtiene log (y) = x + rnorm (n, mean = 0, sd = 1). Si el comentario de @ whuber generó su respuesta (creo que lo hizo), entonces creo que no se está refiriendo a la generación de datos, sino a la formulación del modelo GLM de @peterellis.La elección se basa en su hipótesis sobre su variable.
la transformación del registro se basa en
la distribución gamma se basa en
La transformación logarítmica se basa en la hipótesis de que,
De este modo,
De acuerdo con la regla de Taylor,
Obtenemos
Así,
Sin embargo, la distribución gamma se basa en la hipótesis de que,
fuente