Statsmodels分位数回归森林:结合机器学习与统计建模
引言
分位数回归(Quantile Regression)是一种强大的统计方法,能够估计因变量在不同分位数水平上与自变量的关系,相比传统的普通最小二乘法(OLS)能提供更全面的数据分析视角。Statsmodels作为Python中专注于统计建模的库,提供了灵活的分位数回归实现。本文将介绍如何使用Statsmodels进行分位数回归分析,并探讨其与机器学习方法的结合应用。
Statsmodels分位数回归基础
Statsmodels的分位数回归功能主要通过QuantReg类实现,位于statsmodels.regression.quantile_regression模块。该模块提供了核心的分位数回归算法实现,支持多种分位数水平的估计和统计推断。
基本使用示例
以下是使用Statsmodels进行分位数回归的基本示例,以经典的Engel数据集(家庭收入与食品支出关系)为例:
import statsmodels.formula.api as smf
import statsmodels.api as sm
# 加载数据
data = sm.datasets.engel.load_pandas().data
# 构建分位数回归模型 (LAD模型,q=0.5)
mod = smf.quantreg("foodexp ~ income", data)
res = mod.fit(q=0.5)
print(res.summary())
这段代码实现了中位数回归(q=0.5),也称为最小绝对偏差(LAD)回归。完整的代码示例可参考examples/python/quantile_regression.py。
多分位数回归分析
Statsmodels允许我们同时估计多个分位数水平的回归模型,从而全面了解自变量对因变量分布的影响。
多分位数模型估计
以下代码展示了如何在0.05到0.95之间的多个分位数水平上估计回归模型:
import numpy as np
import pandas as pd
# 定义分位数水平
quantiles = np.arange(0.05, 0.96, 0.1)
# 拟合多个分位数模型
def fit_model(q):
res = mod.fit(q=q)
return [q, res.params["Intercept"], res.params["income"]] + res.conf_int().loc["income"].tolist()
models = [fit_model(x) for x in quantiles]
models = pd.DataFrame(models, columns=["q", "a", "b", "lb", "ub"])
通过上述代码,我们可以得到不同分位数水平下的回归系数估计及其置信区间,完整实现见examples/python/quantile_regression.py。
分位数回归与OLS的比较
将分位数回归结果与传统的OLS回归结果进行比较,可以揭示数据分布的更多特征。
回归结果可视化
Statsmodels结合Matplotlib可以直观比较不同分位数回归与OLS的结果:
import matplotlib.pyplot as plt
# 绘制不同分位数的回归线
x = np.arange(data.income.min(), data.income.max(), 50)
get_y = lambda a, b: a + b * x
fig, ax = plt.subplots(figsize=(8, 6))
# 绘制分位数回归线
for i in range(models.shape[0]):
y = get_y(models.a[i], models.b[i])
ax.plot(x, y, linestyle="dotted", color="grey")
# 绘制OLS回归线
ols = smf.ols("foodexp ~ income", data).fit()
y_ols = get_y(ols.params["Intercept"], ols.params["income"])
ax.plot(x, y_ols, color="red", label="OLS")
ax.scatter(data.income, data.foodexp, alpha=0.2)
ax.set_xlabel("Income", fontsize=16)
ax.set_ylabel("Food expenditure", fontsize=16)
ax.legend()
这段代码生成的可视化结果展示了不同分位数下的回归线与OLS回归线的对比,直观反映了收入对食品支出影响在不同分位数水平上的差异。
分位数回归的统计推断
Statsmodels的分位数回归实现提供了完善的统计推断功能,包括系数显著性检验和置信区间估计。
系数估计的置信区间
分位数回归结果的summary输出包含了系数估计、标准误、t统计量和p值等信息,便于进行统计推断:
mod = smf.quantreg("foodexp ~ income", data)
res = mod.fit(q=0.5)
print(res.summary())
上述代码输出的分位数回归结果摘要,提供了中位数回归(q=0.5)的详细统计推断信息。完整示例可参考examples/python/quantile_regression.py。
实际应用案例
分位数回归在实际数据分析中有广泛应用,特别是当数据呈现异方差性或存在极端值时。
收入与食品支出关系分析
经典的Engel曲线分析展示了分位数回归的实用价值。通过估计不同分位数水平的收入对食品支出的影响,我们可以更全面地了解家庭消费行为。
# 分析不同分位数下收入对食品支出的边际影响
plt.figure()
plt.plot(models.q, models.b, color="black", label="Quantile Reg.")
plt.plot(models.q, models.ub, linestyle="dotted", color="black")
plt.plot(models.q, models.lb, linestyle="dotted", color="black")
plt.plot(models.q, [ols.params["income"]] * len(models), color="red", label="OLS")
plt.ylabel(r"$\beta_{income}$")
plt.xlabel("Quantiles of the conditional food expenditure distribution")
plt.legend()
这段代码生成的图表展示了收入系数估计值随分位数变化的趋势,揭示了收入对食品支出的边际影响在不同消费水平上的差异。
总结与展望
Statsmodels的分位数回归功能为数据分析提供了强大的工具,能够揭示变量关系在不同分位数水平上的变化特征。结合机器学习方法,分位数回归可以进一步扩展其应用范围,例如分位数回归森林等混合模型,为复杂数据结构提供更灵活的分析框架。
官方文档提供了更详细的分位数回归理论和实现细节,可参考docs/source/quantile_regression.rst。通过结合Statsmodels的统计建模能力和机器学习的预测性能,我们可以构建更 robust 和解释性更强的预测模型。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



