Creo que se trata de un problema estadístico relacionado con mi incomprensión de los MLG. Pero existe la posibilidad de que sea un problema de programación. Si ese resulta ser el caso, voy a pasar a Stack Overflow.
He simulado los datos de una manera que creo que sería perfectamente capturado por un GLM gaussiano con el enlace inverso. Pero cuando le doy los datos a stats::glm
obtengo estimaciones imprecisas (o ninguna convergencia).
Esto es lo que quiero decir:
set.seed(27599)
n <- 1e4
x1 <- runif(n = n)
x2 <- runif(n = n)
linpred <- 0.5*x1 + -0.5*x2
mu <- 1/linpred
y <- rnorm(n = n, mean = mu, sd = 1)
d <- data.frame(x1, x2, y)
fitted_glm <- glm(formula = y ~ x1 + x2,
data = d,
family = stats::gaussian(link = 'inverse'),
mustart = rep(mean(y), n))
coef(fitted_glm)
> (Intercept) x1 x2
> 19247667 -29105253 -16315984
Yo esperaría (espero) que la intercepción estuviera cerca de 0
y los efectos estarían cerca 0.5
y -0.5
.
Una cosa que he probado es aplicar la inversa directamente a y
en lugar de al predictor lineal, como en:
mu <- mean_lp
y <- 1/rnorm(n = n, mean = mu, sd = 1)
coef(fitted_glm)
> (Intercept) x1 x2
> -1.902150e+12 2.745787e+12 -3.221891e+08
Pero, como se puede ver, eso también dio estimaciones de parámetros sin sentido. ¿En qué me he equivocado? Utilicé un proceso similar para simular y modelar un GLM normal-identidad y normal-log y funcionó como se esperaba.