Formato de entrada para respuesta en binomial glm en R


13

En R, hay tres métodos para formatear los datos de entrada para una regresión logística usando la glmfunción:

  1. Los datos pueden estar en formato "binario" para cada observación (por ejemplo, y = 0 o 1 para cada observación);
  2. Los datos pueden estar en el formato "Wilkinson-Rogers" (por ejemplo, y = cbind(success, failure)) con cada fila representando un tratamiento; o
  3. Los datos pueden estar en un formato ponderado para cada observación (por ejemplo, y = 0.3, pesos = 10).

Los tres enfoques producen las mismas estimaciones de coeficientes, pero difieren en los grados de libertad y los valores de desviación resultantes y los puntajes de AIC. Los dos últimos métodos tienen menos observaciones (y, por lo tanto, grados de libertad) porque usan cada tratamiento para el número de observaciones, mientras que el primero usa cada observación para el número de observaciones.

Mi pregunta: ¿Existen ventajas numéricas o estadísticas al usar un formato de entrada sobre otro? La única ventaja que veo es que no es necesario volver a formatear los datos Rpara usarlos con el modelo.

Miré la documentación de glm , busqué en la web y en este sitio y encontré una publicación relacionada tangencialmente , pero no recibí orientación sobre este tema.

Aquí hay un ejemplo simulado que demuestra este comportamiento:

# Write function to help simulate data
drc4 <- function(x, b =1.0, c = 0, d = 1, e = 0){
    (d - c)/ (1 + exp(-b * (log(x)  - log(e))))
}
# simulate long form of dataset
nReps = 20
dfLong <- data.frame(dose = rep(seq(0, 10, by = 2), each = nReps))
dfLong$mortality <-rbinom(n = dim(dfLong)[1], size = 1,
                              prob = drc4(dfLong$dose, b = 2, e = 5))

# aggregate to create short form of dataset
dfShort <- aggregate(dfLong$mortality, by = list(dfLong$dose), 
                     FUN = sum)
colnames(dfShort) <- c("dose", "mortality")
dfShort$survival <- nReps - dfShort$mortality 
dfShort$nReps <- nReps
dfShort$mortalityP <- dfShort$mortality / dfShort$nReps

fitShort <- glm( cbind(mortality, survival) ~ dose, 
                 data = dfShort, 
                 family = "binomial")
summary(fitShort)

fitShortP <- glm( mortalityP ~ dose, data = dfShort, 
                  weights = nReps,     
                  family = "binomial")
summary(fitShortP)

fitLong <- glm( mortality ~ dose, data = dfLong, 
                family = "binomial")
summary(fitLong)

1
En su ejemplo, la diferencia entre la desviación nula y residual es igual para los tres modelos. Si agrega o elimina un parámetro, el cambio en AIC también es el mismo para los tres.
Jonny Lomond

1
Te respondiste a ti mismo: si usas los mismos datos y los mismos resultados, ¿cómo podrían ser diferentes? Además, si el método ofreciera resultados diferentes solo por proporcionar los datos en un formato diferente, algo estaría muy mal con él o con su implementación.
Tim

El formato WR es, en última instancia, una probabilidad ponderada. El problema con los pesos es que R no puede decir si son pesos de frecuencia, pesos de probabilidad u otros. Con la ponderación de la encuesta, por ejemplo, es posible que solo tenga n observaciones, pero que representan segmentos de la población / marco de muestreo. Por lo tanto, los grados de libertad son de hecho 100. svyglmdel paquete de encuestas le ofrece mejores métodos para manejar el argumento del peso.
AdamO

Pero si se ajustara a un modelo cuasibinomial utilizando las tres formas de codificación, producirían resultados diferentes, correcto, ya que uno podría tener una sobredispersión positiva cuando se codifica como datos binomiales pero no cuando se codifica como datos logísticos / binarios. ¿O estoy equivocado en esto?
Tom Wenseleers

Respuestas:


9

No hay razón estadística para preferir uno a otro, además de la claridad conceptual. Aunque los valores de desviación informados son diferentes, estas diferencias se deben completamente al modelo saturado. Por lo tanto, cualquier comparación que use una desviación relativa entre modelos no se ve afectada, ya que el modelo de probabilidad de registro saturado se cancela.

Creo que es útil pasar por el cálculo de desviación explícito.

iniipiiyijji

Forma larga

La probabilidad de registro del modelo (propuesto o nulo) es

ij(log(pi)yij+log(1pi)(1yij))

y la probabilidad de registro del modelo saturado esEsto es igual a 0, porque es 0 o 1. Nota no está definida, pero por conveniencia, lea como abreviatura de , que es 0.

ij(log(yij)yij+log(1yij)(1yij)).
yijlog(0)0log(0)limx0+xlog(x)

Forma corta (ponderada)

Tenga en cuenta que una distribución binomial en realidad no puede tomar valores no enteros, pero de todos modos podemos calcular una "probabilidad de registro" utilizando la fracción de éxitos observados en cada celda como la respuesta, y ponderando cada suma y suma en el cálculo de probabilidad de registro por El número de observaciones en esa celda.

ini(log(pi)jyij/ni+log(1pi)(1j(yij/ni))

Esto es exactamente igual a la desviación del modelo que calculamos anteriormente, que puede ver tirando la suma sobre en la ecuación de forma larga tanto como sea posible.j

Mientras tanto, la desviación saturada es diferente. Como ya no tenemos respuestas de 0-1, incluso con un parámetro por observación no podemos obtener exactamente 0. En cambio, la probabilidad de registro del modelo saturado es

ini(log(jyij/ni)jyij/ni+log(1jyij/ni)(1jyij/ni)).

En su ejemplo, puede verificar que el doble de esta cantidad sea la diferencia entre los valores de desviación nula y residual informados para ambos modelos.

ni = dfShort$nReps
yavg = dfShort$mortalityP
sum.terms <-ni*(log(yavg)*yavg + log(1 - yavg)*(1 - yavg))
# Need to handle NaN when yavg is exactly 0
sum.terms[1] <- log(1 - yavg[1])*(1 - yavg[1])

2*sum(sum.terms)
fitShortP$deviance - fitLong$deviance

Creo que tendrá que aclarar la expresión de desviación de los modelos saturados. El registro de 0 no funciona tan bien.
AdamO

Gracias, debería haber aclarado lo que quise decir. Agregué una edición para aclarar que por 0log (0) me refiero a 0 en este contexto.
Jonny Lomond

De acuerdo, pero estoy confundido (perdóname, nunca cubrí la desviación con gran detalle): si tienes log (y) y - log (1-y) (1-y) como la desviación del modelo saturado, no todos observación solo 0?
AdamO

2
El "modelo saturado" es un modelo imaginado con un parámetro por observación. Por lo tanto, su probabilidad predicha para cada observación es 1 o 0, dependiendo del valor real observado. Entonces, en este caso, la probabilidad logarítmica del modelo saturado es de hecho 0, los datos son los únicos datos que podría generar el modelo saturado.
Jonny Lomond

Pero si se ajustara a un modelo cuasibinomial utilizando las tres formas de codificación, producirían resultados diferentes, correcto, ya que uno podría tener una sobredispersión positiva cuando se codifica como datos binomiales pero no cuando se codifica como datos logísticos / binarios. ¿O estoy equivocado en esto?
Tom Wenseleers
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.