В R
, існує три методи для форматування вхідних даних для логістичної регресії з використанням glm
функції:
- Дані можуть бути у "двійковому" форматі для кожного спостереження (наприклад, y = 0 або 1 для кожного спостереження);
- Дані можуть бути у форматі "Вілкінсон-Роджерс" (наприклад,
y = cbind(success, failure)
) у кожному рядку, що представляє одну обробку; або - Дані можуть бути у зваженому форматі для кожного спостереження (наприклад, y = 0,3, ваги = 10).
Усі три підходи дають однакові оцінки коефіцієнтів, але відрізняються за ступенем свободи та отриманими значеннями відхилень та балами AIC. Останні два методи мають менше спостережень (і, отже, ступеня свободи), оскільки вони використовують кожну обробку для кількості спостережень, тоді як перший використовує кожне спостереження для кількості спостережень.
Моє запитання: Чи є чисельні чи статистичні переваги щодо використання одного вхідного формату над іншим? Єдиною перевагою, яку я бачу, є не переформатування даних, R
щоб використовувати їх у моделі.
Я переглянув документацію про glm, провів пошук в Інтернеті та на цьому веб-сайті та знайшов один тангенціально пов’язаний пост , але жодних вказівок з цієї теми.
Ось модельований приклад, який демонструє таку поведінку:
# 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
з пакету опитування даються кращі методи обробки аргументації ваги.