如何在Python中进行Breusch-Pagan测试

如何在Python中进行Breusch-Pagan测试

异方差是一个统计学术语,它被定义为残差的不平等散布。更具体地说,它指的是测量值的范围,即残差的变化。异方差拥有一个挑战,因为普通最小二乘法(OLS)回归认为从人口中抛出的残差具有同方差,也就是恒定方差。如果回归分析中存在异方差,那么分析的结果就不能轻易相信。

Breusch-Pagan检验是检查回归分析中是否存在异方差的一种方法。Breusch-Pagan检验遵循以下假设。

假设:

  • 无效假设(H0)。标志着同方差性的存在。
  • 备选假设:(Ha)。标志着同方差性不存在(即异方差性存在)。

安装numNumPypy、pandas和statsmodels库的语法。

pip3 install numpy pandas statsmodels

进行Breusch-Pegan测试

进行Breusch-Pegan测试是一个分步骤的过程。这些都在下面讨论。

第1步:导入库。

第一步是导入我们上面安装的库。

# Importing libraries
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf

第2步:创建一个数据集。

然后我们需要创建一个数据集。

# Create a dataset
dataframe = pd.DataFrame({'rating': [92, 84, 87, 82, 98,
                                     94, 75, 80, 83, 89],
                          'points': [27, 30, 15, 26, 27,
                                     20, 16, 18, 19, 20],
                          'runs': [5000, 7000, 5102, 8019,
                                   1200, 7210, 6200, 9214,
                                   4012, 3102],
                          'wickets': [110, 120, 110, 80, 90,
                                      119, 116, 100, 90, 76]})

步骤3:拟合一个多元线性回归模型。

下一步是拟合一个多元线性回归模型。作为一个例子,我们考虑将评级作为响应变量,将分数、跑数和门票作为解释变量。

# Importing libraries
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
 
# Create a dataset
dataframe = pd.DataFrame({'rating': [92, 84, 87, 82,
                                     98, 94, 75, 80,
                                     83, 89],
                          'points': [27, 30, 15, 26,
                                     27, 20, 16, 18,
                                     19, 20],
                          'runs': [5000, 7000, 5102,
                                   8019, 1200, 7210,
                                   6200, 9214, 4012,
                                   3102],
                          'wickets': [110, 120, 110,
                                      80, 90, 119,
                                      116, 100, 90,
                                      76]})
 
# fit regression model
fit = smf.ols('rating ~ points+runs+wickets', data=dataframe).fit()
print(fit.summary())

输出:

如何在Python中进行Breusch-Pagan测试

第4步:进行Breusch-Pagan测试。

下一步是进行Breusch-Pagan检验,以确定是否存在异方差性。

# Importing libraries
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
from statsmodels.compat import lzip
import statsmodels.stats.api as sms
 
# Creating a dataset
dataframe = pd.DataFrame({'rating': [92, 84, 87, 82,
                                     98, 94, 75, 80,
                                     83, 89],
                          'points': [27, 30, 15, 26,
                                     27, 20, 16, 18,
                                     19, 20],
                          'runs': [5000, 7000, 5102,
                                   8019, 1200, 7210,
                                   6200, 9214, 4012,
                                   3102],
                          'wickets': [110, 120, 110,
                                      80, 90, 119,
                                      116, 100, 90,
                                      76]})
 
# Fit the regression model
fit = smf.ols('rating ~ points+runs+wickets', data=dataframe).fit()
 
# Conduct the Breusch-Pagan test
names = ['Lagrange multiplier statistic', 'p-value',
         'f-value', 'f p-value']
 
# Get the test result
test_result = sms.het_breuschpagan(fit.resid, fit.model.exog)
 
lzip(names, test_result)

输出:

如何在Python中进行Breusch-Pagan测试

输出 Interpretation:

这里,测试的拉格朗日乘数统计量等于4.364,相应的p值等于0.224。由于p值大于0.05,所以我们不能拒绝无效假设。因此,我们没有足够的证据来证明回归模型中存在异方差性。

如何解决异方差问题:

在上面的例子中,回归模型中不存在异方差现象。但是对于异方差实际存在的情况,那么有三种方法可以解决这个问题。

  • 改变因变量。我们可以用一些技术来改变因变量。例如,我们可以取因变量的对数。
  • 重新定义因变量。我们可以重新定义因变量。例如,对因变量使用比缺陷值的比率。
  • 使用加权回归。最后一种方法是使用加权回归。在这种类型的回归中,根据每个数据点的拟合值的方差为其分配权重。使用适当的权重可以消除异方差的问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Numpy教程