8 votos

Poisson GLM con los no-recuento de datos (tasa de datos)

Mi pregunta es relativa, pero no es lo mismo la siguiente pregunta: Ajuste de una distribución de Poisson GLM en R - problemas con las tasas de frente cuenta

He aquí algunos datos falsos:

### some fake data
x=c(1:14)
y=c(0,  1,  2,  3,  1,  4,  9, 18, 23, 31, 20, 25, 37, 45)
y_rate <- y / 1000

Voy a usar una distribución de Poisson GLM con un registro de enlace para predecir y_rate:

### model
pois_mdl <- glm(y_rate ~ x, family=poisson(link="log"))
summary(pois_mdl)

La trama de la forma:

### plot
plot(x, y_rate)
lines(x, pois_mdl$fitted.values)

Me sorprende que de Poisson glm() permite para valores no enteros en la variable dependiente. Se basa en una distribución de Poisson son siempre números enteros (sin importar el valor de la media del parámetro). ¿Por qué no glm() volar?

11voto

Sean Hanley Puntos 2428

No sé por qué, glm() no volar. Para averiguarlo, tendrás que sacar a la luz todo el código subyacente. (Además, si su única pregunta es cómo el R código funciona, esta pregunta es fuera de tema aquí.)

Lo que puedo decir es que no son el modelado de las tasas correctamente. Si usted desea modelar las tasas de cambio de cuenta, deberá incluir un desplazamiento en el modelo de la fórmula. (Hay una buena discusión sobre la CV de lo que un desplazamiento está aquí: Cuando el uso de un desplazamiento en una regresión de Poisson?) Usando tu ejemplo, el código sería el siguiente:

pois_mdl2 <- glm(y~x+offset(log(rep(1000,14))), family=poisson(link="log"))

Tenga en cuenta que, aunque los coeficientes estimados son los mismos, los errores estándar son bastante diferentes:

summary(pois_mdl2)$coefficients
#               Estimate Std. Error   z value      Pr(>|z|)
# (Intercept) -6.5681214 0.25118701 -26.14833 1.029521e-150
# x            0.2565236 0.02203911  11.63947  2.596237e-31
summary(pois_mdl)$coefficients
#               Estimate Std. Error    z value  Pr(>|z|)
# (Intercept) -6.5681214  7.9431516 -0.8268911 0.4082988
# x            0.2565236  0.6969324  0.3680753 0.7128171

6voto

eldering Puntos 3814

Mientras yo no recomiendo mirar el código fuente para glm para aquellos que desean preservar su salud mental, he mirado el código fuente a glm. La razón por la R no se blow up parece ser que simplemente no se molestan en hacer el tipo de defensa de los cheques que probablemente debería.

La principal forma iterativa re-mínimos cuadrados ponderados bucle funciona mediante el uso de los métodos conectado a un family objeto del tipo adecuado. En este caso, que es poisson:

> poi <- poisson()
> class(poi)
[1] "family"

Esta familia objeto tiene todo lo que glm necesidades para ajustar el modelo, por ejemplo:

> poi$linkfun(1)
[1] 0
> poi$linkinv(1)
[1] 2.718282

El otro, aquí es la derivada de la inversa enlace:

> poi$mu.eta(1)
[1] 2.718282

El y datos viene en la línea de 258:

dev <- sum(dev.resids(y, mu, weights))

Por desgracia, dev.resids podría no importa en absoluto si y es entero positivo con valores de:

> poi$dev.resid(1.5, 1, 1)
[1] 0.2163953

Así que supongo que R no volar porque no creo que a volar.

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