多元线性模型的分位数回归

  • 一、为什么要使用分位数回归?
  • 二、分位数回归基本模型
  • 三、分位数回归估计--线性规划
  • 3.1损失函数
  • 3.2目标函数
  • 3.3线性规划
  • 3.4回归算法
  • 四、实际案例分析与python编程计算
  • 4.1引入数据集
  • 4.2计算
  • 五、参考文献


一、为什么要使用分位数回归?

分位数回归r语言实现案例 分位数回归结果解释_正态分布,人们往往习惯于使用均值回归。但是均值回归往往更关注的只是均值,对于数据的“其他部位”往往照顾不够。有时不能较为客观地反映一组数据的各个层次的实际情况。比如我是一名还在读大三的本科生,我和当前的世界首富埃隆▪马斯克人均财富千亿美元级别,显然这个均值对于反映我的财富水平来说是毫无意义的,甚至是有信息误导的作用。但是如果试想使用分位数回归,那我就可以避免被马斯克平均了。
       我们知道在均值回归的普通最小二乘法中,我们是通过求残差的平方和最小来估计参数的。而在分位数回归中我们通常求残差的绝对值的加权求和最小来估计参数。就我目前了解,这样做的目的之一是减小离群点的大误差对整体回归估计的影响。例如,通常离群点处的残差是远远大于1的,在这种情况下残差的绝对值就要远小于残差的平方值,所以使用残差的绝对值可以减少离群点处的误差对整体回归的影响,而这也算是我们进行分位数回归的初衷之一。
       分位数回归通常是采用最小一乘法,而最小一乘法对误差项分位数回归r语言实现案例 分位数回归结果解释_算法_02并没有要求其服从正态分布,所以相比于均值回归通常采用的最小二乘法对误差分位数回归r语言实现案例 分位数回归结果解释_算法_02要求服从正态分布来说,最小一乘法的误差分位数回归r语言实现案例 分位数回归结果解释_算法_02更具有普遍性。
       总的来说相比于均值回归,(1)分位数回归对数据分布的情况掌握的更全面客观。(2)使用分位数回归,离群点对于数据整体的影响要比较使用均值回归小的多。所以我们也可以说分位数回归更加稳健。(3)分位数回归对于误差项更具有普适性。

二、分位数回归基本模型

分位数回归r语言实现案例 分位数回归结果解释_算法_05
       其中分位数回归r语言实现案例 分位数回归结果解释_算法_06为分位数,对于实随机变量分位数回归r语言实现案例 分位数回归结果解释_数据_07,其右连续分布函数为分位数回归r语言实现案例 分位数回归结果解释_分位数回归r语言实现案例_08,分位数回归r语言实现案例 分位数回归结果解释_数据_07分位数回归r语言实现案例 分位数回归结果解释_算法_06分位数函数为分位数回归r语言实现案例 分位数回归结果解释_算法_11,也即第分位数回归r语言实现案例 分位数回归结果解释_正态分布_12分位数回归r语言实现案例 分位数回归结果解释_分位数回归r语言实现案例_13
       其中,分位数回归r语言实现案例 分位数回归结果解释_正态分布_14

三、分位数回归估计–线性规划

3.1损失函数

分位数回归r语言实现案例 分位数回归结果解释_概率论_15
       其中,
分位数回归r语言实现案例 分位数回归结果解释_分位数回归r语言实现案例_16

3.2目标函数

分位数回归r语言实现案例 分位数回归结果解释_正态分布_17,对于分位数回归r语言实现案例 分位数回归结果解释_算法_06分位数回归,我们的目标函数通常采用如下函数:
分位数回归r语言实现案例 分位数回归结果解释_数据_19

3.3线性规划

分位数回归r语言实现案例 分位数回归结果解释_概率论_20,我们可以用另一种等价形式表达:分位数回归r语言实现案例 分位数回归结果解释_正态分布_21
       其中分位数回归r语言实现案例 分位数回归结果解释_分位数回归r语言实现案例_22分别是分位数回归r语言实现案例 分位数回归结果解释_正态分布_23的正部和负部:
分位数回归r语言实现案例 分位数回归结果解释_算法_24
分位数回归r语言实现案例 分位数回归结果解释_概率论_25
       我们知道,一个函数等于它的正部分位数回归r语言实现案例 分位数回归结果解释_数据_26负部,一个函数的绝对值等于它的正部分位数回归r语言实现案例 分位数回归结果解释_数据_27负部。所以,我们可以得到下面的线性规划:
分位数回归r语言实现案例 分位数回归结果解释_分位数回归r语言实现案例_28
       对于该线性规划,
分位数回归r语言实现案例 分位数回归结果解释_数据_29

3.4回归算法

分位数回归r语言实现案例 分位数回归结果解释_概率论_30:输入回归数据分位数回归r语言实现案例 分位数回归结果解释_分位数回归r语言实现案例_31分位数回归r语言实现案例 分位数回归结果解释_数据_07
分位数回归r语言实现案例 分位数回归结果解释_算法_33:根据分位数回归r语言实现案例 分位数回归结果解释_数据_34计算出线性规划的相关矩阵分位数回归r语言实现案例 分位数回归结果解释_数据_35
分位数回归r语言实现案例 分位数回归结果解释_数据_36:将分位数回归r语言实现案例 分位数回归结果解释_数据_35带入线性规划算法模块,求得最优解分位数回归r语言实现案例 分位数回归结果解释_正态分布_38

注:关于相关的线性规划算法本文不再赘述。

四、实际案例分析与python编程计算

4.1引入数据集

分位数回归r语言实现案例 分位数回归结果解释_数据_39数据为例。

分位数回归r语言实现案例 分位数回归结果解释_算法_40


图4.1.1

4.2计算分位数回归r语言实现案例 分位数回归结果解释_概率论_41

分位数回归r语言实现案例 分位数回归结果解释_数据_42源代码:

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='')

       下面给出程序运行结果:

分位数回归r语言实现案例 分位数回归结果解释_数据_43


图4.2.1

五、参考文献

[1]分位数回归理论及其在金融风险测量中的应用/王新宇著.——北京:科学出版社,2010.6
[2]吕书龙. 最小一乘估计快速算法的研究[D].福州大学,2003.