In R
gibt es drei Methoden, um die Eingabedaten für eine logistische Regression mit der glm
Funktion zu formatieren :
- Daten können für jede Beobachtung in einem "binären" Format vorliegen (z. B. y = 0 oder 1 für jede Beobachtung);
- Die Daten können im "Wilkinson-Rogers" -Format vorliegen (z. B.
y = cbind(success, failure)
), wobei jede Zeile eine Behandlung darstellt; oder - Die Daten können für jede Beobachtung in einem gewichteten Format vorliegen (z. B. y = 0,3, Gewichte = 10).
Alle drei Ansätze liefern die gleichen Koeffizientenschätzungen, unterscheiden sich jedoch in den Freiheitsgraden und den daraus resultierenden Abweichungswerten und AIC-Werten. Die letzten beiden Methoden haben weniger Beobachtungen (und daher Freiheitsgrade), da sie jede Behandlung für die Anzahl der Beobachtungen verwenden, während die erste jede Beobachtung für die Anzahl der Beobachtungen verwendet.
Meine Frage: Gibt es numerische oder statistische Vorteile bei der Verwendung eines Eingabeformats gegenüber einem anderen? Der einzige Vorteil, den ich sehe, ist, dass ich meine Daten nicht neu formatieren muss R
, um sie mit dem Modell zu verwenden.
Ich habe mir die glm-Dokumentation angesehen , im Internet nach dieser Site gesucht und einen tangentialen Beitrag gefunden , aber keine Anleitung zu diesem Thema.
Hier ist ein simuliertes Beispiel, das dieses Verhalten demonstriert:
# 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
dem Umfragepaket erhalten Sie bessere Methoden für den Umgang mit dem Gewichtsargument.