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)
svyglm
del paquete de encuestas le ofrece mejores métodos para manejar el argumento del peso.