如何在Python中计算BIC(附实例)

1,345 阅读2分钟

贝叶斯信息准则,通常缩写为BIC,是一个用来比较不同回归模型拟合程度的指标。

在实践中,我们对同一数据集拟合多个回归模型,并选择BIC值最低的模型作为最适合数据的模型。

我们使用下面的公式来计算BIC:

BIC: (RSS+log(n)dσ̂2)/n

其中

  • d:预测因子的数量
  • n:总观察值
  • σ̂:回归模型中与每个响应测量相关的误差方差的估计值
  • RSS:回归模型的残余平方和
  • TSS:回归模型的总平方和

要在Python中计算几个回归模型的BIC,我们可以使用statsmodels.regression.linear_model.OLS()函数,它有一个叫做bic的属性,告诉我们一个给定模型的BIC值。

下面的例子显示了如何使用这个函数来计算和解释Python中各种回归模型的BIC。

例子:在Python中计算回归模型的BIC

假设我们想用mtcars数据集中的变量来拟合两个不同的多元线性回归模型

首先,我们要加载这个数据集:

from sklearn.linear_model import LinearRegression
import statsmodels.api as sm
import pandas as pd

#define URL where dataset is located
url = "https://raw.githubusercontent.com/Statology/Python-Guides/main/mtcars.csv"

#read in data
data = pd.read_csv(url)

#view head of data
data.head()

        model	          mpg	  cyl	disp  hp    drat wt   qsec  vs am gear carb
0	Mazda RX4	  21.0  6     160.0 110  3.90 2.620 16.46   0  1  4	4
1	Mazda RX4 Wag	  21.0  6     160.0 110  3.90 2.875 17.02   0  1  4	4
2	Datsun 710	  22.8  4     108.0 93   3.85 2.320 18.61   1  1  4	1
3	Hornet 4 Drive	  21.4  6     258.0 110  3.08 3.215 19.44   1  0  3	1
4	Hornet Sportabout 18.7	8     360.0 175  3.15 3.440 17.02   0  0  3	2

接下来,我们将拟合以下两个回归模型:

  • 模型1:mpg = β0 + β1(disp)+ β2(qsec)
  • 模型2:MPG = β0 + β1(disp)+ β2(wt)

下面的代码显示了如何拟合第一个模型并计算BIC:

#define response variable
y = data['mpg']

#define predictor variables
x = data[['disp', 'qsec']]

#add constant to predictor variables
x = sm.add_constant(x)

#fit regression model
model = sm.OLS(y, x).fit()

#view BIC of model
print(model.bic)

174.23905634994506

这个模型的BIC结果是174.239

接下来,我们将拟合第二个模型并计算BIC:

#define response variable
y = data['mpg']

#define predictor variables
x = data[['disp', 'wt']]

#add constant to predictor variables
x = sm.add_constant(x)

#fit regression model
model = sm.OLS(y, x).fit()

#view BIC of model
print(model.bic)

166.56499196301334

这个模型的BIC结果是166.565

由于第二个模型的BIC值较低,它是更好的拟合模型。

一旦我们确定这个模型是最好的,我们就可以继续拟合模型并分析结果,包括R平方值和β系数,以确定一组预测变量和响应变量之间的确切关系。

其他资源

另外两个常用于比较回归模型拟合度的指标是AIC调整后的R-squared

下面的教程解释了如何在Python中计算这些回归模型的每个指标:

如何在Python中计算回归模型的AIC
如何在Python中计算调整后的R-squared