62 votos

Elección entre LM y GLM para una variable de respuesta con transformación logarítmica

Estoy tratando de entender la filosofía de utilizar un Modelo Lineal Generalizado (MLG) frente a un Modelo Lineal (ML). He creado un conjunto de datos de ejemplo a continuación donde:

$$\log(y) = x + \varepsilon $$

El ejemplo no tiene el error $\varepsilon$ en función de la magnitud de $y$ Así que asumiría que un modelo lineal de la y transformada en logaritmo sería lo mejor. En el ejemplo de abajo, este es el caso (creo) - ya que el AIC de la LM en los datos transformados en logaritmos es el más bajo. El AIC del GLM de la distribución Gamma con una función de enlace logarítmica tiene una suma de cuadrados (SS) más baja, pero los grados de libertad adicionales dan lugar a un AIC ligeramente superior. Me sorprendió que el AIC de la distribución gaussiana sea mucho más alto (aunque la SS sea la más baja de los modelos).

Espero que me aconsejen sobre cuándo hay que acercarse a los modelos GLM, es decir, ¿hay algo que deba buscar en los residuos del ajuste de mi modelo LM que me indique que otra distribución es más apropiada? Además, ¿cómo se debe proceder para 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 en logaritmo 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()

enter image description here

enter image description here

28voto

Ted Puntos 854

Buen esfuerzo por reflexionar sobre esta cuestión. Esta es una respuesta incompleta, pero algunos puntos de partida para los próximos pasos.

En primer lugar, las puntuaciones del AIC -basadas en las probabilidades- están en escalas diferentes debido a las distintas distribuciones y funciones de enlace, por lo que no son comparables. La 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 pueden compararse, aunque si este es un buen criterio para la selección de modelos es otra cuestión (podría serlo, o podría no serlo; busque en los archivos de validación cruzada sobre la selección de modelos para obtener un buen debate al respecto).

Para su pregunta más general, una buena forma de enfocar 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 log. En el primer caso el modelo que está ajustando es:

$\log(y)=X\beta+\epsilon$ ;

y en el caso de glm() lo es:

$ \log(y+\epsilon)=X\beta$

y en ambos casos $\epsilon$ se distribuye $ \mathcal{N}(0,\sigma^2)$ .

19voto

Daniel Persson Puntos 81

De manera más general, $E[\ln(Y|x)]$ y $\ln([E(Y|X])$ no son lo mismo. Además, los supuestos de varianza realizados por el MLG son más flexibles que los del MCO, y para determinadas situaciones de modelización, la varianza de los recuentos puede ser diferente si se toman distintas familias de distribución.

Sobre la familia de la 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 varianza constante. En una familia gamma tenemos la varianza como una función cuadrática de la media. Grafica tus residuos estandarizados frente a los valores ajustados y mira como son.

8voto

Sean Hanley Puntos 2428

Lamentablemente, su R código no conduce a un ejemplo en el que $\log(y) = x + \varepsilon$ . En cambio, su ejemplo es $x = \log(y) + \varepsilon$ . Los errores aquí son horizontales, no verticales; son errores en $x$ , no errores en $y$ . Intuitivamente, parece que esto no debería suponer una diferencia, pero lo hace. Quizás quieras leer mi respuesta aquí: ¿Cuál es la diferencia entre la regresión lineal de y con x y la de 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:

ly = log(y)
REVERSE.REGRESSION = lm(x~ly)
summary(REVERSE.REGRESSION)
# Call:
# lm(formula = x ~ ly)
# 
# Residuals:
#      Min       1Q   Median       3Q      Max 
# -2.93996 -0.64547 -0.01351  0.63133  2.92991 
# 
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  0.01563    0.03113   0.502    0.616    
# ly           1.01519    0.03138  32.350   <2e-16 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 0.984 on 998 degrees of freedom
# Multiple R-squared:  0.5119,    Adjusted R-squared:  0.5114 
# F-statistic:  1047 on 1 and 998 DF,  p-value: < 2.2e-16

Las métricas de este modelo (como el AIC) no serán comparables a las de sus modelos. Sin embargo, sabemos que este es el modelo correcto basándonos en el proceso de generación de datos, y observamos que los coeficientes estimados están justo en el blanco.

-1voto

Jiaxiang Puntos 117

La elección se basa en su hipótesis sobre su variable.

la transformación logarítmica se basa en $$\frac{\sqrt{\mathrm{Var}(X_t} }{\mathrm{E}(X_t)} = \mathrm{constant}$$

la distribución gamma se basa en

$$\frac{\mathrm{Var}(X_t) }{\mathrm{E}(X_t)} = \mathrm{constant}$$


La transformación logarítmica se basa en la hipótesis de que,

$$\sqrt{\mathrm{Var}(X_t} = \mathrm{E}(X_t) \sigma$$

De esta manera,

$$\begin{alignat}{2} X_t &= X_t\\ & = \mathrm{E}(X_t) \cdot \frac{X_t}{\mathrm{E}(X_t)} \\ & = \mathrm{E}(X_t) \cdot \frac{X_t - \mathrm{E}(X_t) + \mathrm{E}(X_t)}{\mathrm{E}(X_t)} \\ & = \mathrm{E}(X_t) \cdot (1 + \frac{X_t - \mathrm{E}(X_t)}{\mathrm{E}(X_t)}) \\ \end{alignat}$$

Basado en la regla de Taylor,

$$\log(1+x) \approx x$$

Obtenemos

$$\log(1 + \frac{X_t - \mathrm{E}(X_t)}{\mathrm{E}(X_t)}) = \frac{X_t - \mathrm{E}(X_t)}{\mathrm{E}(X_t)}$$

Así,

$$\begin{alignat}{2} X_t &= \mathrm{E}(X_t) \cdot (1 + \frac{X_t - \mathrm{E}(X_t)}{\mathrm{E}(X_t)}) \\ \log X_t &= \log \mathrm{E}(X_t) + \log (1 + \frac{X_t - \mathrm{E}(X_t)}{\mathrm{E}(X_t)}) \\ &= \log \mathrm{E}(X_t) + \frac{X_t - \mathrm{E}(X_t)}{\mathrm{E}(X_t)} \\ \mathrm{E}(\log X_t) & \approx \log \mathrm{E}(X_t) \end{alignat}$$


Sin embargo, la distribución gamma se basa en la hipótesis de que,

$$Y \sim \Gamma(\alpha, \beta)$$

$$\begin{cases} E(y_i) = \alpha_i \cdot \beta_i \\ Var(y_i) = \alpha_i \cdot \beta_i^2 \\ \end{cases} \to \frac{Var(y_i)}{E(y_i)} = \beta_i$$

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X