In R
, ci sono tre metodi per formattare i dati di ingresso per una regressione logistica utilizzando la glm
funzione di:
- I dati possono essere in formato "binario" per ogni osservazione (ad es. Y = 0 o 1 per ogni osservazione);
- I dati possono essere nel formato "Wilkinson-Rogers" (ad es.
y = cbind(success, failure)
) Con ogni riga che rappresenta un trattamento; o - I dati possono essere in un formato ponderato per ciascuna osservazione (ad es. Y = 0,3, pesi = 10).
Tutti e tre gli approcci producono le stesse stime dei coefficienti, ma differiscono nei gradi di libertà e nei valori di devianza e punteggi AIC risultanti. Gli ultimi due metodi hanno meno osservazioni (e quindi gradi di libertà) perché usano ogni trattamento per il numero di osservazioni mentre il primo usa ogni osservazione per il numero di osservazioni.
La mia domanda: ci sono vantaggi numerici o statistici nell'uso di un formato di input rispetto a un altro? L'unico vantaggio che vedo è di non dover riformattare i propri dati R
per utilizzarli con il modello.
Ho esaminato la documentazione glm , ho cercato sul web e su questo sito e ho trovato un post tangenzialmente correlato , ma nessuna guida su questo argomento.
Ecco un esempio simulato che dimostra questo comportamento:
# 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
dal pacchetto del sondaggio ti offre metodi migliori per gestire l'argomento peso.