1. 分位数回归的数学原理
一般的回归方法是最小二乘法,即最小化误差的平方和:

其中,
y
i
y_i
yi是真实值,而
y
^
i
\hat{y}_i
y^i是预测值。而分位数的目标是最小化加权的误差绝对值和:

其中,
τ
\tau
τ 是给定的分位数。决策变量是
y
^
i
\hat{y}_i
y^i,可以证明,使上面表达式最小化的
y
^
i
\hat{y}_i
y^i 就是给定分位数
τ
\tau
τ 对应的分位点(将上面式子转化为连续密度函数的积分,然后求一阶导数即可证明)。上式也可以简写成:

2. 分位数回归的求解原理
为了求出分位数的回归方程,假设
y
^
i
=
X
i
β
\hat{y}_i=\bm{X_i \beta}
y^i=Xiβ,那么求解的目标函数转化为:

决策变量为
k
k
k维回归方程的参数向量
β
\bm{\beta}
β。在实际的求解中,将上式转化为一个线性规划问题,引入两个虚拟变量
u
i
+
u_i^+
ui+、
u
i
−
u_i^-
ui− :

然后用单纯形法或内点法求解,就能得出分位数回归方程(python 与 R 软件求出的分位数回归方程可能略微不同,因为求解方法不一样, python 使用了迭代的加权最小二乘法求解)。
3 python 分位数回归
分位数回归要用到 statsmodels,下面的代码得到分位数为 0.6 的回归方程,并画图:
import statsmodels.formula.api as smf
import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
data = sm.datasets.engel.load_pandas().data
mod = smf.quantreg('foodexp ~ income', data)
res = mod.fit(q=0.6)
print(res.summary())
plt.scatter(data['income'], data['foodexp'])
xx = np.arange(min(data['income']), max(data['income']))
yy = [i*res.params['income'] + res.params['Intercept'] for i in xx]
plt.plot(xx, yy, color='red')
plt.show()
输出结果:


本文介绍了分位数回归的基本数学原理,包括最小化加权误差绝对值的方法,以及如何通过线性规划转化为求解线性方程组。还展示了如何使用Python statsmodels库进行分位数回归实例,包括数据处理和模型输出。
811

被折叠的 条评论
为什么被折叠?



