¿Pueden los pesos y la compensación conducir a resultados similares en la regresión de Poisson?


8

En la "Guía de un practicante de modelos lineales generalizados" en el párrafo 1.83 se afirma que:

"En el caso particular de un GLM multiplicativo de Poisson, se puede demostrar que el reclamo de modelado cuenta con un término de compensación igual al logaritmo de la exposición que produjo resultados idénticos a las frecuencias de reclamo de modelado con pesos previos establecidos para ser igual a la exposición de cada observación. "

No puedo encontrar ninguna otra referencia de estos resultados, así que realicé algunas pruebas empíricas en las que no pude encontrar pruebas de que la afirmación es correcta. ¿Alguien puede proporcionar alguna idea de por qué estos resultados pueden ser correctos / incorrectos?

Para su información, utilicé el siguiente código R para probar la hipótesis, en la que no pude obtener resultados similares para los dos casos mencionados:

n=1000
m=10

# Generate random data
X = matrix(data = rnorm(n*m)+1, ncol = m, nrow = n)

intercept = 2
coefs = runif(m)
offset = runif(n)
## DGP: exp of Intercept + linear combination X variables + log(offset)
mu = exp(intercept + X%*%coefs + log(offset))
y = rpois(n=n, lambda=mu)

df = data.frame('y'=y, 'X'=X, 'offset' = offset)
formula = paste("y ~",paste(colnames(df)[grepl("X", colnames(df))], collapse = "+"))

#First model using log(offset) as offset
fit1  = glm(formula, family = "poisson", df, offset = log(offset))
#Second model using offset as weights for individual observations
fit2 = glm(formula, family = "poisson", df, weights = offset) 
#Third model using poisson model on y/offset as reference
dfNew = df
dfNew$y = dfNew$y/offset
fit3 = glm(formula, family = "poisson", dfNew)

#Combine coefficients with the true coefficients
rbind(fit1$coefficients, fit2$coefficients, fit3$coefficients, c(intercept,coefs))

Las estimaciones de coeficientes resultantes de ejecutar este código se dan a continuación:

 >  
    (Intercept)       X.1       X.2       X.3        X.4       X.5       X.6
[1,]    1.998277 0.2923091 0.4586666 0.1802960 0.11688860 0.7997154 0.4786655
[2,]    1.588620 0.2708272 0.4540180 0.1901753 0.07284985 0.7928951 0.5100480
[3,]    1.983903 0.2942196 0.4593369 0.1782187 0.11846876 0.8018315 0.4807802
[4,]    2.000000 0.2909240 0.4576965 0.1807591 0.11658183 0.8005451 0.4780123
              X.7       X.8       X.9      X.10
[1,]  0.005772078 0.9154808 0.9078758 0.3512824
[2,] -0.003705015 0.9117014 0.9063845 0.4155601
[3,]  0.007595660 0.9181014 0.9076908 0.3505173
[4,]  0.005881960 0.9150350 0.9084375 0.3511749
> 

y podemos observar que los coeficientes no son idénticos.


1
¡Realmente no deberías incluir rm(list=ls() )en el código R que publicas aquí! Eso podría sorprender a alguien que lo ejecuta y hacer que se enfaden contigo. Lo quité. También edité para incluir los resultados de ejecutar el código. Si lo hubiera hecho originalmente, tal vez haya recibido una respuesta más rápida, ya que pocos lectores ejecutarán el código ellos mismos.
kjetil b halvorsen

1
@kjetilbhalvorsen Gracias por los comentarios, lo haremos en el futuro.
BDP1

@ BDP1 Tal como está ahora, su código R no está probando el reclamo al que se refiere. Le sugiero que agregue el término de peso para el fit3 y agregue un apéndice directamente a la pregunta.
aivanov

Respuestas:


7

(con su código R, puede reemplazar "poisson" con "cuasipoisson" para evitar todas las advertencias que se generan. Nada más de importación cambiará. Consulte (*) a continuación). Su referencia utiliza el término "glm multiplicativo", que creo que solo significa un glm con enlace de registro, ya que un enlace de registro puede considerarse como un modelo multiplicativo. Su propio ejemplo muestra que el reclamo es falso, al menos como lo interpretamos (ya que los parámetros estimados no son iguales). Podrías escribir a los autores y preguntarles qué querían decir. A continuación discutiré por qué la afirmación es falsa.

Dejar λyo ser el parámetro de Poisson y ωyolos pesos. Dejarηyo ser el predictor lineal sin el desplazamiento, y luego ηyo+Iniciar sesión(ωyo)ser el predictor lineal con el desplazamiento. La función de probabilidad de Poisson es

F(yyo)=mi-λyoλyoyyo/ /yyo!
Entonces la función de probabilidad de registro para el modelo con desplazamiento se convierte en
=-yoωyomiηyo+yoyyoηyo+yoyyoIniciar sesiónωyo-yoIniciar sesiónyyo!
mientras que la función de probabilidad de registro para el modelo con pesos se convierte en
w=-yoωyomiηyo+yoyyoωyoηyo-yoωyoIniciar sesiónyyo!
y esto claramente no es lo mismo. Entonces, lo que esos autores querían decir no está claro para mí.

(*) Nota de la ayuda de la glmfunción de R :

Los 'pesos' no 'NULL' pueden usarse para indicar que diferentes observaciones tienen diferentes dispersiones (con los valores en 'pesos' que son inversamente proporcionales a las dispersiones); o de manera equivalente, cuando los elementos de 'pesos' son enteros positivos w_i, que cada respuesta y_i es la media de las observaciones de peso unitario w_i. Para un GLM binomial, se utilizan pesos previos para dar el número de ensayos cuando la respuesta es la proporción de éxitos: rara vez se utilizarían para un GLM de Poisson.

Examinar el significado de los argumentos de los pesos explica esto, da poco significado con la función de la familia de Poisson, que asume un parámetro de escala constante ϕ=1 mientras que los argumentos de los pesos se modifican ϕ. Esto le da más significado a la función de la familia cuasiposson. Vea la respuesta a la entrada de "peso" en las funciones glm y lm en R La respuesta dada allí también ayuda a ver por qué la probabilidad en el caso ponderado toma la forma dada anteriormente.

La respuesta dada aquí podría ser relevante: ¿Cómo es una regresión de tasa de Poisson igual a una regresión de Poisson con el término de desplazamiento correspondiente? y es muy interesante


Gracias por la respuesta. Ir a través de las contribuciones de probabilidad aclara mucho. Al buscar un poco más en respuesta a su respuesta, encontré la siguiente pregunta: stats.stackexchange.com/questions/66791/… En la que se muestra que al dividir la respuesta original por el desplazamiento y establecer la variable de desplazamiento como pesos, Se pueden obtener los mismos resultados que el modelo de línea de base, donde el log (offset) ingresa al predictor lineal con un coeficiente constante de 1.
BDP1

También intenté deducir que las contribuciones de probabilidad de este nuevo modelo son iguales a las contribuciones del modelo recién mencionado, pero no pude hacerlo, dado el (yyo/ /wyo)!término que aparece para este último.
BDP1

Al menos en el experimento en el script R proporcionado, esta afirmación parece ser cierta. esto se puede ver fácilmente agregando un argumento ponderaciones = desplazamiento en la línea fit3 = glm (...)
BDP1

No entiendo lo que dices aquí, si crees que tu experimento corrobora, ¿por qué no editas ese cambio en el examen al OP y explicas por qué crees que corrobora el reclamo? Traté de explicar por qué no es cierto, ¿qué hay de malo en mi argumento?
kjetil b halvorsen

1
La cita de la Guía del practicante es correcta, simplemente no ha sido implementada correctamente por OP. Esto ha sido señalado por Alan Chalk en otra respuesta aquí, por mí stats.stackexchange.com/questions/430001 y también por Cokes stats.stackexchange.com/questions/264071 (aunque la conclusión correcta está enterrada en la última línea de esa respuesta).
Gordon Smyth

4

Lamento no agregar simplemente un comentario arriba, pero no tengo suficiente representante.

La afirmación original, pero modificada un poco, es correcta.

Los siguientes dos modelos dan exactamente la misma respuesta en R usando un poisson glm con log-link:

  • modelo y, use un desplazamiento siendo log (desplazamiento)
  • modelo y / offset, use pesos iguales a offset

ajustar ligeramente el código original muestra respuestas idénticas:

n=1000
m=10

# Generate random data
X = matrix(data = rnorm(n*m)+1, ncol = m, nrow = n)

intercept = 2
coefs = runif(m)
offset = runif(n)
## DGP: exp of Intercept + linear combination X variables + log(offset)
mu = exp(intercept + X%*%coefs + log(offset))
y = rpois(n=n, lambda=mu)

df = data.frame('y' = y,
                'y_over_offset' = y/offset,
                'X' = X,
                'offset' = offset)

formula_offset = paste("y ~",paste(colnames(df)[grepl("X", colnames(df))], collapse = "+"))
formula_weights = paste("y_over_offset ~",paste(colnames(df)[grepl("X", colnames(df))], collapse = "+"))

#First model using log(offset) as offset
fit1  = glm(formula_offset, family = "poisson", df, offset = log(offset))
#Second model using offset as weights for individual observations
fit2 = glm(formula_weights, family = "poisson", df, weights = offset) 


#Combine coefficients with the true coefficients
rbind(fit1$coefficients, fit2$coefficients, c(intercept,coefs))

Esperemos que eso dé respuestas idénticas.

Es posible mostrar que los dos modelos son estadísticamente equivalentes (hay un documento CAS en algún lugar que muestra esto; publicaré un enlace si tengo tiempo).

Por cierto, si está haciendo una regresión penalizada, la forma en que diferentes paquetes, como glmnet y H2o miden la desviación para las dos formas diferentes de definir un modelo, puede conducir a resultados diferentes.


1
Pregunta rápida: puede ver que con el fit2 no tiene un AIC y los gráficos entre los 2 ajustes son un gráfico ligeramente diferente (fit1); plot (fit2) - también sabes por qué sucede esto?]
Charl Francois Marais
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.