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)
quelle
svyglm
dem Umfragepaket erhalten Sie bessere Methoden für den Umgang mit dem Gewichtsargument.Antworten:
Abgesehen von der begrifflichen Klarheit gibt es keinen statistischen Grund, den einen dem anderen vorzuziehen. Obwohl die gemeldeten Abweichungswerte unterschiedlich sind, sind diese Unterschiede vollständig auf das gesättigte Modell zurückzuführen. Ein Vergleich mit relativen Abweichungen zwischen Modellen bleibt also unberührt, da die gesättigte Modellprotokollwahrscheinlichkeit ungültig wird.
Ich denke, es ist nützlich, die explizite Abweichungsberechnung durchzugehen.
Lange Form
Kurzform (gewichtet)
Beachten Sie, dass eine Binomialverteilung keine nicht ganzzahligen Werte annehmen kann, aber wir können trotzdem eine "log-Wahrscheinlichkeit" berechnen, indem wir den Bruchteil der beobachteten Erfolge in jeder Zelle als Antwort verwenden und jeden Summanden in der log-Wahrscheinlichkeitsberechnung mit gewichten die Anzahl der Beobachtungen in dieser Zelle.
Inzwischen ist die gesättigte Abweichung anders. Da wir keine 0-1-Antworten mehr haben, können wir auch mit einem Parameter pro Beobachtung nicht genau 0 erhalten. Stattdessen ist die gesättigte Modell-Log-Wahrscheinlichkeit gleich
In Ihrem Beispiel können Sie überprüfen, ob das Doppelte dieses Betrags die Differenz zwischen dem gemeldeten Nullwert und dem Restabweichungswert für beide Modelle ist.
quelle