TL; DR: Welches ist für BIC in der logistischen Regression richtig, das aggregierte Binomial oder Bernoulli ?
UPDATES UNTEN
Angenommen, ich habe einen Datensatz, auf den ich die logistische Regression anwenden möchte. Nehmen wir zum Beispiel an, es gibt Gruppen mit jeweils Teilnehmern, also insgesamt . Das Ergebnis ist 0 oder 1. Zum Beispiel der folgende Datensatz (R-Code):
library(dplyr)
library(tidyr)
set.seed(45)
d <- tibble(y = rbinom(500, 1, .5),
x = factor(rep(LETTERS[1:5], each = 100)))
Es gibt zwei Möglichkeiten, wie ich dies darstellen kann: wie oben, jede Beobachtung als Bernoulli-Zufallsvariable zu behandeln oder Beobachtungen innerhalb von Gruppen zu aggregieren und jede Beobachtung als Binomial zu behandeln. Die Anzahl der Zeilen im Datensatz beträgt in der ersten Instanz 500 und in der zweiten 5.
Ich kann den aggregierten Datensatz erstellen:
d %>%
group_by(x, y) %>%
summarise(n = n()) %>%
spread(y, n) %>%
rename(f = `0`, s = `1`) %>%
mutate(n = s + f) -> d_agg
Ich kann dann die logistische Regression unter Verwendung beider Datensätze in R anpassen:
g_bern <- glm(y ~ x, data=d, family=binomial)
g_binom <- glm(cbind(s,f) ~ x, data=d_agg, family=binomial)
UPDATE 2: Wir passen jetzt nur die Intercept-Modelle an:
g_bern0 <- glm(y ~ 1, data=d, family=binomial)
g_binom0 <- glm(cbind(s,f) ~ 1, data=d_agg, family=binomial)
und berechnen Sie den AIC:
> AIC(g_bern)
# [1] 694.6011
> AIC(g_binom)
# [1] 35.22172
die sich natürlich durch eine Konstante unterscheiden
2*sum(lchoose(d_agg$n, d_agg$s)) # [1] 659.3794
wie erwartet (siehe: Logistische Regression: Bernoulli vs. Binomial Response Variables ).
Die BICs unterscheiden sich jedoch durch diese Konstante UND einen Faktor, der von der "Anzahl der Beobachtungen" abhängt, und die Anzahl der Beobachtungen unterscheidet sich in jedem:
> BIC(g_bern)
# [1] 715.6742
> BIC(g_binom)
# [1] 33.26891
> nobs(g_bern)
# [1] 500
> nobs(g_binom)
# [1] 5
Zur Bestätigung können wir den BIC für beide neu berechnen:
> -2*logLik(g_bern) + attr(logLik(g_bern),"df")*log(nobs(g_bern))
# 'log Lik.' 715.6742 (df=5)
> -2*logLik(g_binom) + attr(logLik(g_binom),"df")*log(nobs(g_binom))
# 'log Lik.' 33.26891 (df=5)
und in der Tat der einzige Ort , diese beiden Zahlen unterscheiden .
UPDATE 2: Wenn wir versuchen, den Faktor zu bewerten x
, sehen wir eine Meinungsverschiedenheit, die NUR auf die Anzahl der Beobachtungen zurückzuführen ist:
> BIC(g_bern0) - BIC(g_bern)
# [1] -17.66498
> BIC(g_binom0) - BIC(g_binom)
# [1] 0.7556999
UPDATE 2: Wie erwartet sind die AICs konsistent:
> AIC(g_bern0) - AIC(g_bern)
# [1] -0.8065485
> AIC(g_binom0) - AIC(g_binom)
# [1] -0.8065485
Dies überrascht mich, da ich denken würde, dass R "wissen" würde, welche der beiden verwendet werden soll, um Mehrdeutigkeiten zu vermeiden. Es hat in beiden Fällen die gleichen Informationen.
Welcher ist richtig"? Oder ist BIC wirklich so willkürlich?
UPDATE: Ich versuche nicht, den Bernoulli mit dem Binomial-Modell zu vergleichen. Dies ist nur ein Spielzeugbeispiel. Ich habe eine Reihe von Vergleichen, bei denen es darauf ankommt, welches Setup ich verwende, da die Strafen für unterschiedlich sind. Ich habe zwei Sätze von Modellvergleichen und die siegreichen Modelländerungen basierend auf der Strafe, obwohl dies für mich die gleichen Sätze von Modellen zu sein scheinen .
UPDATES 2 und 3: Die Vergleiche wurden zum Nur-Intercept-Modell hinzugefügt und der zufällige Startwert geändert, um einen Vorzeichenunterschied im BIC zu erhalten.