Dans R
, il existe trois méthodes pour formater les données d'entrée pour une régression logistique à l'aide de la glm
fonction:
- Les données peuvent être dans un format "binaire" pour chaque observation (par exemple, y = 0 ou 1 pour chaque observation);
- Les données peuvent être au format «Wilkinson-Rogers» (p. Ex.
y = cbind(success, failure)
) , Chaque ligne représentant un traitement; ou - Les données peuvent être dans un format pondéré pour chaque observation (par exemple, y = 0,3, poids = 10).
Les trois approches produisent les mêmes estimations de coefficient, mais diffèrent dans les degrés de liberté et les valeurs de déviance et les scores AIC résultants. Les deux dernières méthodes ont moins d'observations (et donc de degrés de liberté) car elles utilisent chaque traitement pour le nombre d'observations alors que la première utilise chaque observation pour le nombre d'observations.
Ma question: Y a-t-il des avantages numériques ou statistiques à utiliser un format d'entrée par rapport à un autre? Le seul avantage que je vois est de ne pas avoir à reformater ses données R
pour les utiliser avec le modèle.
J'ai regardé la documentation glm , recherché sur le web et ce site et trouvé un poste lié de manière tangentielle , mais pas de conseils sur ce sujet.
Voici un exemple simulé qui illustre ce comportement:
# 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
partir du package d'enquête vous donne de meilleures méthodes de traitement de l'argument de poids.