Statsmodels分位数回归森林:结合机器学习与统计建模

Statsmodels分位数回归森林:结合机器学习与统计建模

【免费下载链接】statsmodels Statsmodels: statistical modeling and econometrics in Python 【免费下载链接】statsmodels 项目地址: https://gitcode.com/gh_mirrors/st/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 和解释性更强的预测模型。

【免费下载链接】statsmodels Statsmodels: statistical modeling and econometrics in Python 【免费下载链接】statsmodels 项目地址: https://gitcode.com/gh_mirrors/st/statsmodels

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值