逻辑回归 BIC:正确的 N 是多少?

机器算法验证 r 物流 广义线性模型 模型比较 比克
2022-03-15 12:32:27

TL;DR:哪个N对于逻辑回归、聚合二项式或伯努利中的 BIC 是正确的N?

底部更新

假设我有一个要应用逻辑回归的数据集。为了举例,假设有j=5团体与m=100每个参与者,总计n=500. 结果为 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))) 

我可以通过两种方式表示这一点:如上所述,将每个观察值视为伯努利随机变量,或者将组内的观察值聚合并将每个观察值视为二项式。数据集中的行数在第一个实例中为 500,在第二个实例中为 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)

事实上,这两个数字唯一不同的地方是N.

更新 2:当我们尝试评估 factorx时,我们看到仅归因于观察数量的分歧:

> 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真的这么随意?

更新:我不想将伯努利与二项式模型进行比较。这只是一个玩具示例。我有一组比较重要的是我使用哪种设置,因为惩罚N是不同的。我有两组模型比较,获胜的模型会根据N惩罚,即使这些在我看来是同一组模型

更新 2 和 3:添加了对仅拦截模型的比较,并更改了随机种子以获得 BIC 中的符号差异。

2个回答

BIC(和 AIC)是比较模型的相对度量。但是,比较使用聚合响应和分解响应之间的相同模型是没有意义的。比较不同的模型(例如,不同的回归器)也没有意义,但其中一个模型使用聚合响应,而另一个模型使用响应的分解版本。只要被比较的两个模型都以相同的格式表示响应变量,一切都会好起来的。请注意,这两种格式最终是等价的——它们包含相同的信息,而且大部分只是外观不同,请参阅:R 中二项式 glm 响应的输入格式

有趣的问题!从应用环境来看,我认为您需要记住 BIC 和 AIC 都是相对模型拟合的度量。

换句话说,当您检查单个模型时,这些度量并不能告诉您太多信息,但可以帮助您在一组竞争模型中选择合适的模型。尤其是:

  1. 如果您的目标是在这些竞争模型中找到“最佳”来预测结果变量,则选择 AIC 值最低的模型;
  2. 如果您的目标是在这些竞争模型中找到“最佳”模型,以了解和描述模型中包含的预测变量对结果变量的影响,则选择 BIC 值最低的模型。

在定义您的竞争模型集时,您必须确保模型遵循相同的概念框架。因此,您可以比较几个二项逻辑回归模型或几个二元逻辑模型,但不能同时比较两者。(重要的是要与同类进行比较,否则您将不知道一个模型是基于其自身优点还是仅仅因为您更改了模型规格/拟合程序而赢得了比赛。)

从这个角度来看,唯一重要的是当跨相同类型的模型(例如二项式逻辑回归模型)计算 AIC 和 BIC 时,R 是一致的。

澄清一下:g_bern 是二元逻辑回归模型,而 g_binom 是二项逻辑回归模型。虽然它们都模拟了一次试验的成功概率,但在定义一组竞争模型时,您不会将这些模型的变体混合在一起(出于上述原因,@gung 也涵盖了这些原因)。