门限回归(threshold regression)是一种分类回归技术,可以将数据集分成两个或多个不同组。门限回归可以用于分类问题或者将数据分成不同的组,在每个组中建立不同的回归模型。本文将讲解如何使用Python实现门限回归。
准备工作
在开始实现门限回归之前,需要在Python中安装相关的库,其中最重要的是statsmodels库。下面是安装statsmodels库的命令:
pip install statsmodels
实现过程
门限回归的核心思想是将数据分为不同的组,对每个组拟合不同的回归模型。在实现过程中,需要先确定门限值(threshold),然后将数据分为大于门限值和小于门限值的两个组,并对两个组分别拟合回归模型。下面是一个示例代码:
import statsmodels.api as sm
import pandas as pd
# 读入数据
data = pd.read_csv("data.csv")
# 确定门限值
threshold = 3
# 分组
group1 = data[data["age"] < threshold]
group2 = data[data["age"] >= threshold]
# 拟合回归模型
model1 = sm.OLS(group1["income"], sm.add_constant(group1[["age"]])).fit()
model2 = sm.OLS(group2["income"], sm.add_constant(group2[["age"]])).fit()
# 结果输出
print("-------------Group 1-------------")
print(model1.summary())
print("-------------Group 2-------------")
print(model2.summary())
上述代码首先读入了数据,然后确定了门限值为3,并将数据分为小于3和大于等于3两个组。接着使用statsmodels库的OLS函数分别对两个组拟合回归模型,并输出结果,可以得到如下的输出结果:
-------------Group 1-------------
OLS Regression Results
==============================================================================
Dep. Variable: income R-squared: 0.565
Model: OLS Adj. R-squared: 0.544
Method: Least Squares F-statistic: 26.47
Date: Wed, 28 Jul 2021 Prob (F-statistic): 0.000335
Time: 10:00:00 Log-Likelihood: -53.893
No. Observations: 10 AIC: 111.8
Df Residuals: 8 BIC: 112.3
Df Model: 1
Covariance Type: nonrobust
===============================================================================
coef std err t P>|t| [0.025 0.975]
-------------------------------------------------------------------------------
const 2.7798 17.581 0.158 0.877 -37.834 43.393
age 7.8786 1.531 5.146 0.000 4.398 11.359
==============================================================================
Omnibus: 1.067 Durbin-Watson: 1.901
Prob(Omnibus): 0.586 Jarque-Bera (JB): 0.721
Skew: -0.494 Prob(JB): 0.697
Kurtosis: 1.866 Cond. No. 50.5
==============================================================================
-------------Group 2-------------
OLS Regression Results
==============================================================================
Dep. Variable: income R-squared: 0.333
Model: OLS Adj. R-squared: 0.275
Method: Least Squares F-statistic: 5.613
Date: Wed, 28 Jul 2021 Prob (F-statistic): 0.0435
Time: 10:00:00 Log-Likelihood: -94.170
No. Observations: 10 AIC: 192.3
Df Residuals: 8 BIC: 192.8
Df Model: 1
Covariance Type: nonrobust
==========================================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------------------
const 73.9167 26.525 2.789 0.021 14.684 133.149
age -5.1222 2.429 -2.370 0.043 -10.095 -0.150
==========================================================================================
Omnibus: 3.394 Durbin-Watson: 1.105
Prob(Omnibus): 0.183 Jarque-Bera (JB): 1.423
Skew: 0.924 Prob(JB): 0.491
Kurtosis: 3.154 Cond. No. 46.4
==========================================================================================
上述输出结果分别是针对两个组的回归模型的统计指标,如 $R^2$,F值,系数等。
除了使用简单的阈值进行分类外,还有其他的方式可以进行门限回归,例如最大似然门限回归(MLE threshold regression)和典型门限回归(typical threshold regression)等。这些方法除了按阈值分类外,还会考虑其他因素,例如样本分布等。下面给出一个使用最大似然门限回归的示例代码:
import statsmodels.api as sm
from statsmodels.discrete import threshold_regression
# 读入数据
data = sm.datasets.ccard.load_pandas().data
data["const"] = 1
# 最大似然门限回归
model = threshold_regression.ThresholdReg(data["AVGEXP"], data[["const", "AGE", "INCOME", "INCOMESQ"]],
[19, 36, 50, 64, 79])
# 输出结果
print(model.summary())
上述代码针对信用卡数据集进行门限回归,使用了ThresholdReg函数实现最大似然门限回归,并输出了回归模型的统计指标。
总结
本文讲解了如何使用Python实现门限回归,介绍了简单的阈值分类和最大似然门限回归的应用示例。门限回归的应用很广泛,在分类问题和数据分组等问题中都可以使用。值得注意的是,为了得到更好的回归效果,门限值的确定是非常重要的,并且可以使用多种方式确定门限值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现门限回归方式 - Python技术站