多元线性模型的分位数回归
- 一、为什么要使用分位数回归?
- 二、分位数回归基本模型
- 三、分位数回归估计--线性规划
- 3.1损失函数
- 3.2目标函数
- 3.3线性规划
- 3.4回归算法
- 四、实际案例分析与python编程计算
- 4.1引入数据集
- 4.2计算
- 五、参考文献
一、为什么要使用分位数回归?
,人们往往习惯于使用均值回归。但是均值回归往往更关注的只是均值,对于数据的“其他部位”往往照顾不够。有时不能较为客观地反映一组数据的各个层次的实际情况。比如我是一名还在读大三的本科生,我和当前的世界首富埃隆▪马斯克人均财富千亿美元级别,显然这个均值对于反映我的财富水平来说是毫无意义的,甚至是有信息误导的作用。但是如果试想使用分位数回归,那我就可以避免被马斯克平均了。
我们知道在均值回归的普通最小二乘法中,我们是通过求残差的平方和最小来估计参数的。而在分位数回归中我们通常求残差的绝对值的加权求和最小来估计参数。就我目前了解,这样做的目的之一是减小离群点的大误差对整体回归估计的影响。例如,通常离群点处的残差是远远大于1的,在这种情况下残差的绝对值就要远小于残差的平方值,所以使用残差的绝对值可以减少离群点处的误差对整体回归的影响,而这也算是我们进行分位数回归的初衷之一。
分位数回归通常是采用最小一乘法,而最小一乘法对误差项并没有要求其服从正态分布,所以相比于均值回归通常采用的最小二乘法对误差要求服从正态分布来说,最小一乘法的误差更具有普遍性。
总的来说相比于均值回归,(1)分位数回归对数据分布的情况掌握的更全面客观。(2)使用分位数回归,离群点对于数据整体的影响要比较使用均值回归小的多。所以我们也可以说分位数回归更加稳健。(3)分位数回归对于误差项更具有普适性。
二、分位数回归基本模型
其中为分位数,对于实随机变量,其右连续分布函数为,的分位数函数为,也即第的。
其中,
三、分位数回归估计–线性规划
3.1损失函数
其中,
3.2目标函数
,对于分位数回归,我们的目标函数通常采用如下函数:
3.3线性规划
,我们可以用另一种等价形式表达:
其中分别是的正部和负部:
我们知道,一个函数等于它的正部负部,一个函数的绝对值等于它的正部负部。所以,我们可以得到下面的线性规划:
对于该线性规划,
3.4回归算法
:输入回归数据和
:根据计算出线性规划的相关矩阵
:将带入线性规划算法模块,求得最优解
注:关于相关的线性规划算法本文不再赘述。
四、实际案例分析与python编程计算
4.1引入数据集
数据为例。
图4.1.1
4.2计算
源代码:
import pandas as pd
import numpy as np
from scipy import optimize
#----------------------多元线性模型的分位数回归---------------------------------------------------------
#导入数据
dataset1=pd.read_excel('Hald.xlsx')
dataset2=pd.read_excel('Hald.xlsx')
#输入分位数theta
theta=[0.1,0.25,0.5,0.75,0.9]
#计算X,Y
Y=dataset1['Y'].values
dataset2['Y']=1
X=dataset2.values
#计算A,B
n=len(X)
B=Y
In=np.eye(n)
A=np.hstack((X,In,-In))
p=len(X[0])-1
l=np.ones(n,np.int)
o=np.zeros(p+1,np.int)
#给出线性规划的自变量取值范围
b=[]
for i in range(p+1):
b.append(((None,None)))
for i in range(2*n):
b.append((0,None))
#使用optimize包的linprog函数求解线性规划
for i in theta:
C = np.hstack((o, i * l, (1 - i) * l))
r = optimize.linprog(C,A_eq=A,b_eq=B,bounds=b)
x=r.x
#计算β估计
beta=[]
print('多元线性模型的{}分位数回归方程为:\ny='.format(i), end='')
for i in range(p+1):
beta.append(x[i])
print(beta[0], end='')
for i in range(1, p + 1):
if beta[i] > 0:
print('+{}x{}'.format(beta[i], i), end='')
else:
print('{}x{}'.format(beta[i], i), end='')
print('\n',end='')
下面给出程序运行结果:
图4.2.1
五、参考文献
[1]分位数回归理论及其在金融风险测量中的应用/王新宇著.——北京:科学出版社,2010.6
[2]吕书龙. 最小一乘估计快速算法的研究[D].福州大学,2003.