En R
, hay tres métodos para formatear los datos de entrada para una regresión logística usando la glm
función:
- Los datos pueden estar en formato "binario" para cada observación (por ejemplo, y = 0 o 1 para cada observación);
- Los datos pueden estar en el formato "Wilkinson-Rogers" (por ejemplo,
y = cbind(success, failure)
) con cada fila representando un tratamiento; o - 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 R
para 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)
fuente
svyglm
del paquete de encuestas le ofrece mejores métodos para manejar el argumento del peso.Respuestas:
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.
Forma larga
La probabilidad de registro del modelo (propuesto o nulo) es∑i∑j(log(pi)yij+log(1−pi)(1−yij))
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.∑i∑j(log(yij)yij+log(1−yij)(1−yij)). yij log(0) 0log(0) limx→0+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.
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
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.
fuente