В России R
существует три метода форматирования входных данных для логистической регрессии с использованием glm
функции:
- Данные могут быть в «двоичном» формате для каждого наблюдения (например, y = 0 или 1 для каждого наблюдения);
- Данные могут быть в формате «Уилкинсон-Роджерс» (например,
y = cbind(success, failure)
), где каждая строка представляет одну обработку; или - Данные могут быть во взвешенном формате для каждого наблюдения (например, у = 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
Из пакета опроса вы найдете лучшие методы обработки весовых аргументов.