分位数回归原理_分位数回归及 Python 实现

  • 1. 分位数回归的数学原理

  • 2. 分位数回归的求解原理

  • 3. python 实现分位数回归

1. 分位数回归的数学原理

一般的回归方法是最小二乘法,即最小化误差的平方和:

其中, 是真实值,而 是预测值。而分位数的目标是最小化加权的误差绝对值和:

其中, 是给定的分位数。决策变量是 ,可以证明,使上面表达式最小化的 就是给定分位数 对应的分位点(将上面式子转化为连续密度函数的积分,然后求一阶导数即可证明)。

上式也可以简写成:

2. 分位数回归的求解原理

为了求出分位数的回归方程,假设 ,那么求解的目标函数转化为:

决策变量为 k维回归方程的参数向量 。在实际的求解中,将上式转化为一个线性规划问题,引入两个虚拟变量 ,,建立线性规划模型:

然后用单纯形法或内点法求解,就能得出分位数回归方程(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 实现_第1张图片分位数回归原理_分位数回归及 Python 实现_第2张图片回归方程就是上面的红线,它将 40% 的数据分割在上面,60% 的数据分割在下面。

你可能感兴趣的:(分位数回归原理)