¿Cómo especificar una distribución lognormal en el argumento de la familia glm en R?

17

Pregunta simple: ¿Cómo especificar una distribución lognormal en el argumento de la familia GLM en R? No pude encontrar cómo se puede lograr esto. ¿Por qué lognormal (o exponencial) no es una opción en el argumento familiar?

En algún lugar de los R-Archives leí que uno simplemente tiene que usar el enlace de registro para la familia establecida en gaussiano en el GLM, para especificar un lognormal. Sin embargo, esto no tiene sentido porque se ajustará a una regresión no lineal y R comienza a pedir valores iniciales.

¿Alguien sabe cómo establecer una distribución lognormal (o exponencial) para un GLM?

Jens
fuente
1
Esto debería estar en SO con una etiqueta [r].
DWin
44
@DWin - No estoy de acuerdo por una vez - A menudo voto para migrar Qs a SO, pero esta pregunta tiene un contenido estadístico significativo.
parada el

Respuestas:

8

El paquete gamlss le permite ajustar modelos aditivos generalizados con distribuciones tanto lognormales como exponenciales, y muchos otros, con cierta variedad en funciones de enlace y utilizando, si lo desea, modelos semi o no paramétricos basados ​​en splines penalizadas. Tiene algunos documentos publicados sobre los algoritmos utilizados y documentación y ejemplos vinculados al sitio al que me he vinculado.

jbowman
fuente
10

Con respecto al ajuste del modelo exponencial con glm: Cuando se usa la glmfunción con familia = Gamma, también es necesario usar las funciones de soporte de summary.glmpara fijar el parámetro de dispersión a 1:

?summary.glm
fit <- glm(formula =..., family = Gamma)
summary(fit,dispersion=1) 

Y como iba a señalar pero jbowman me ganó, el (los) paquete (s) "gamlss" proporciona un ajuste log-normal:

help(dLOGNO, package=gamlss.dist)
DWin
fuente
1
No sabía cómo arreglar el parámetro de dispersión (+1).
jbowman
Vi esta solución en otra publicación, creo. Sin embargo, hay dos problemas. Primero, en este caso solo se ajusta el resumen, pero los parámetros que necesito extraer (residuos, etc.) no se ajustan a la dispersión de 1, ¿o me equivoco? En segundo lugar, no puedo encajar con family = Gamma porque hay ceros en el conjunto de datos (en realidad, estos son valores muy pequeños pero se establecieron en cero). ¡Comprobaré el paquete gamlss.dist!
Jens
1
Bueno, el problema de los ceros no es un problema con R o glm, sino con las matemáticas, ... y si tiene estimaciones de parámetros, la construcción de residuos es trivial en R. Publique esa pregunta en SO con una etiqueta [r] y usted seguramente obtendrá una respuesta rápida.
DWin
9

Lognormal no es una opción porque la distribución log-normal no está en la familia exponencial de distribuciones. Los modelos lineales generalizados solo pueden ajustarse a distribuciones de la familia exponencial.

Estoy menos claro por qué exponencial no es una opción, ya que la distribución exponencial está en la familia exponencial (como es de esperar). Otro software estadístico con el que estoy familiarizado permite ajustar la distribución exponencial como un GLM al tratarla como un caso especial de la distribución Gamma con el parámetro de forma (también conocido como escala o dispersión) fijado en 1 en lugar de estimado. glm()Sin embargo, no puedo ver una forma de arreglar este parámetro usando la función de R. Una alternativa sería utilizar la survreg()función del survivalpaquete con dist="exponential".

ylog(y)E(log(Y))log(E(Y)).

una parada
fuente
8
h(x),T(x),A(θ)
¿Tiene una referencia para la afirmación de que "los modelos lineales generalizados solo pueden ajustarse a distribuciones de la familia exponencial"?
Henrik
5

La instalación de un GLM log-normal no tiene nada que ver con la distribución ni la opción de enlace de la glm()función. El término "log-normal" es bastante confuso en este sentido, pero significa que la variable de respuesta está normalmente distribuida (familia = gaussiana), y una transformación se aplica a esta variable de la siguiente manera:

log.glm <- glm(log(y)~x, family=gaussian, data=my.dat)

Sin embargo, cuando se compara esta glm log-normal con otras glms que utilizan una distribución diferente (por ejemplo, gamma), la función AIC () debe corregirse. ¿Alguien conocería una alternativa a estos AIC erróneos (), en este caso?

Carma
fuente
2
Bienvenido al sitio, @CHarma. Si tiene alguna pregunta, haga clic en la "PREGUNTA" gris en la esquina superior derecha, en lugar de incluirla en su respuesta.
gung - Restablecer Monica
1

Intenta usar el siguiente comando:

log.glm = glm(y ~ x, family=gaussian(link="log"), data=my.dat)

Funciona aquí y el AIC parece ser correcto.

Danilo Scorzoni Ré
fuente
77
Esta respuesta es incorrecta. Significaría que la distribución condicional de y es gaussiana y la media registrada sería igual al predictor lineal. Ciertamente no es lo que describe el OP.
Michael M