W R
istnieją trzy sposoby, aby sformatować dane wejściowe dla regresji logistycznej z wykorzystaniem glm
funkcji:
- Dane mogą być w formacie „binarnym” dla każdej obserwacji (np. Y = 0 lub 1 dla każdej obserwacji);
- Dane mogą być w formacie „Wilkinson-Rogers” (np.
y = cbind(success, failure)
), Przy czym każdy wiersz reprezentuje jeden zabieg; lub - Dane mogą mieć format ważony dla każdej obserwacji (np. Y = 0,3, wagi = 10).
Wszystkie trzy podejścia dają te same oszacowania współczynników, ale różnią się stopniami swobody i wynikającymi z nich wartościami dewiacji i wynikami AIC. Dwie ostatnie metody mają mniej obserwacji (a zatem stopni swobody), ponieważ wykorzystują każde leczenie dla liczby obserwacji, podczas gdy pierwsze wykorzystują każdą obserwację dla liczby obserwacji.
Moje pytanie: Czy korzystanie z jednego formatu wejściowego nad innym ma przewagę liczbową lub statystyczną? Jedyną zaletą, jaką widzę, jest to, że nie muszę ponownie formatować danych, R
aby użyć z modelem.
Przejrzałem dokumentację glm , przeszukałem Internet i tę stronę i znalazłem jeden stycznie powiązany post , ale nie ma wskazówek na ten temat.
Oto symulowany przykład, który demonstruje takie zachowanie:
# 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
z pakietu ankiet daje lepsze metody radzenia sobie z argumentem wagi.