TL; DR:ロジスティック回帰にBICのために正しい、凝集二項またはベルヌーイ?
最下部の更新
ロジスティック回帰を適用するデータセットがあるとします。例として、参加者がそれぞれm = 100のグループが、合計であると想定します。結果は0または1です。たとえば、次のデータセット(Rコード):
library(dplyr)
library(tidyr)
set.seed(45)
d <- tibble(y = rbinom(500, 1, .5),
x = factor(rep(LETTERS[1:5], each = 100)))
これを表すには2つの方法があります。上記のとおり、すべての観測をベルヌーイ確率変数として扱うか、グループ内の観測を集計して各観測を二項として扱います。データセットの行数は、最初のインスタンスでは500、2番目のインスタンスでは5になります。
集約されたデータセットを構築できます:
d %>%
group_by(x, y) %>%
summarise(n = n()) %>%
spread(y, n) %>%
rename(f = `0`, s = `1`) %>%
mutate(n = s + f) -> d_agg
次に、Rで両方のデータセットを使用してロジスティック回帰を近似できます。
g_bern <- glm(y ~ x, data=d, family=binomial)
g_binom <- glm(cbind(s,f) ~ x, data=d_agg, family=binomial)
更新2:切片のみのモデルに適合します。
g_bern0 <- glm(y ~ 1, data=d, family=binomial)
g_binom0 <- glm(cbind(s,f) ~ 1, data=d_agg, family=binomial)
AICを計算します。
> AIC(g_bern)
# [1] 694.6011
> AIC(g_binom)
# [1] 35.22172
もちろん定数によって異なります
2*sum(lchoose(d_agg$n, d_agg$s)) # [1] 659.3794
予想どおり(ロジスティック回帰:ベルヌーイ対二項応答変数を参照)。
ただし、BICは、定数と「観測数」に依存する係数が異なり、観測数はそれぞれ異なります。
> BIC(g_bern)
# [1] 715.6742
> BIC(g_binom)
# [1] 33.26891
> nobs(g_bern)
# [1] 500
> nobs(g_binom)
# [1] 5
確認のために、両方のBICを再計算できます。
> -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)
実際、これら2つの数値が異なる唯一の場所はです。
更新2:因子を評価しようとすると、x
観測数にのみ起因する不一致が見られます。
> BIC(g_bern0) - BIC(g_bern)
# [1] -17.66498
> BIC(g_binom0) - BIC(g_binom)
# [1] 0.7556999
更新2:予想どおり、AICは一貫しています。
> AIC(g_bern0) - AIC(g_bern)
# [1] -0.8065485
> AIC(g_binom0) - AIC(g_binom)
# [1] -0.8065485
Rが曖昧さを防ぐためにどちらを使用するかを「知っている」と思うので、これは私を驚かせます。どちらの場合も同じ情報です。
どちらが「正しい」ですか?それともBICは本当にこれは恣意的ですか?
更新:私はベルヌーイを二項モデルと比較しようとはしていません。これは単なるおもちゃの例です。のペナルティが異なるため、どの設定を使用するかが重要な比較セットがあります。2セットのモデル比較があり、ペナルティに基づいて優勝したモデルが変更されていますが、これらは同じモデルセットであるように見えます。
更新2および3:インターセプトのみのモデルに比較を追加し、ランダムシードを変更してBICの符号の差を取得しました。