Eingabeformat für Antwort in Binomial glm in R

13

In Rgibt es drei Methoden, um die Eingabedaten für eine logistische Regression mit der glmFunktion zu formatieren :

  1. Daten können für jede Beobachtung in einem "binären" Format vorliegen (z. B. y = 0 oder 1 für jede Beobachtung);
  2. Die Daten können im "Wilkinson-Rogers" -Format vorliegen (z. B. y = cbind(success, failure)), wobei jede Zeile eine Behandlung darstellt; oder
  3. 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)
Richard Erickson
quelle
1
In Ihrem Beispiel ist der Unterschied zwischen der Null- und der Restabweichung für alle drei Modelle gleich. Wenn Sie einen Parameter hinzufügen oder entfernen, ist die AIC-Änderung auch für alle drei Parameter gleich.
Jonny Lomond
1
Sie haben selbst geantwortet: Wenn Sie dieselben Daten verwenden, um dieselben Ergebnisse zu erzielen, wie können sie dann unterschiedlich sein? Wenn die Methode nur aufgrund der Bereitstellung der Daten in einem anderen Format unterschiedliche Ergebnisse liefern würde, wäre darüber hinaus ein schwerwiegender Fehler mit der Methode oder ihrer Implementierung zu verzeichnen.
Tim
Das WR-Format ist letztendlich eine gewichtete Wahrscheinlichkeit. Das Problem mit Gewichten ist, dass R nicht sagen kann, ob es sich um Frequenzgewichte, Wahrscheinlichkeitsgewichte oder andere Gewichte handelt. Bei der Umfragegewichtung haben Sie beispielsweise möglicherweise nur n Beobachtungen, diese repräsentieren jedoch Segmente der Grundgesamtheit / des Stichprobenrahmens. Der Freiheitsgrad beträgt also in der Tat 100. Mit svyglmdem Umfragepaket erhalten Sie bessere Methoden für den Umgang mit dem Gewichtsargument.
AdamO
Wenn Sie jedoch ein Quasibinomialmodell unter Verwendung aller drei Codierungsmethoden anpassen würden, würden sich unterschiedliche Ergebnisse ergeben, da eine positive Überdispersion auftreten könnte, wenn es als Binomialdaten codiert wird, jedoch nicht, wenn es als logistische / binäre Daten codiert wird. Oder liege ich falsch?
Tom Wenseleers

Antworten:

9

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.

iniipiiyijji

Lange Form

ij(log(pi)yij+log(1pi)(1yij))

ij(log(yij)yij+log(1yij)(1yij)).
yijlog(0)0log(0)limx0+xlog(x) , was 0 ist.

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.

ini(log(pi)jyij/ni+log(1pi)(1j(yij/ni))

j

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

ini(log(jyij/ni)jyij/ni+log(1jyij/ni)(1jyij/ni)).

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.

ni = dfShort$nReps
yavg = dfShort$mortalityP
sum.terms <-ni*(log(yavg)*yavg + log(1 - yavg)*(1 - yavg))
# Need to handle NaN when yavg is exactly 0
sum.terms[1] <- log(1 - yavg[1])*(1 - yavg[1])

2*sum(sum.terms)
fitShortP$deviance - fitLong$deviance
Jonny Lomond
quelle
Ich denke, Sie müssen den Ausdruck für die Abweichung der gesättigten Modelle klären. Log von 0 funktioniert nicht so gut.
AdamO
Danke, ich hätte klären sollen, was ich meinte. Ich habe eine Änderung hinzugefügt, um zu verdeutlichen, dass mit 0log (0) 0 in diesem Kontext gemeint ist.
Jonny Lomond
OK, aber ich bin richtig verwirrt (verzeih mir, ich habe Abweichungen nie ausführlich behandelt): Wenn Sie log (y) y - log (1-y) (1-y) als gesättigte Modellabweichung haben, sind das nicht alle Beobachtung nur 0?
AdamO
2
Das "gesättigte Modell" ist ein imaginäres Modell mit einem Parameter pro Beobachtung. Die vorhergesagte Wahrscheinlichkeit für jede Beobachtung ist also 1 oder 0, abhängig vom tatsächlich beobachteten Wert. In diesem Fall ist die logarithmische Wahrscheinlichkeit des gesättigten Modells in der Tat 0, und die Daten sind die einzigen Daten, die vom gesättigten Modell generiert werden könnten.
Jonny Lomond
Wenn Sie jedoch ein Quasibinomialmodell unter Verwendung aller drei Codierungsmethoden anpassen würden, würden sich unterschiedliche Ergebnisse ergeben, da eine positive Überdispersion auftreten könnte, wenn es als Binomialdaten codiert wird, jedoch nicht, wenn es als logistische / binäre Daten codiert wird. Oder liege ich falsch?
Tom Wenseleers