#!/usr/bin/env python
# coding: utf-8
# # 基础概念
# ## 均值回归局限
#
# 只有满足古典假定,估计量才具有优良性质:BLUE
#
#
#
# ## 为什么需要分位数回归
#
# 在迄今为止的同归模型中,我们着重考察解释变量 x 对被解释变量 y 的条件期望 E $(y | \boldsymbol{x})$ 的 影响,实际上是均值回归。但我们真正关心的是 x 对整个条件分布 $y | x$ 的影响,而条件期望 $E(y| \boldsymbol{x})$ 只是刻画条件分布 $y | \boldsymbol{x}$ 集中趋势的一个指标而已。如果条件分布 $y | \boldsymbol{x}$ 不是对称分布,则条件期望 E( $y | \boldsymbol{x}$ )很难反映整个条件分布的全貌。如果能够估计出条件分布 $y | x$ 的若干重要的条件分位数,比如中位数、1/4 分位数 ,3/4 分位数,就能对条件分布 $y | \boldsymbol{x}$ 有更全面的认识。另一方面, 使用 OLS 的古典“均值同归”,由于最小化的目标函数为残差平方和 $\left(\sum_{i=1}^{n} e_{i}^{2}\right),$ 故容易受极端值的影响。
#
# 为此, Koenker and Bassett( 1978 ) 提出“分位数同归”(Quantile Regression,简记 QR ) ,使用残差绝对值的加权平均(比如 $\sum_{i=1}^{n}\left|e_{i}\right|$ ) 作为最小化的目标函数,故不易受极端值影响,较为稳健。更重要的是,分位数回归还能提供关于条件分布 $y | \boldsymbol{x}$ 的全面信息。
#
#
#
# ## 原理
#
# ### 模型表示
#
# $Q_{t}(y | x)=x^{T} \beta_{\tau}$
#
# 其中 $\tau$ 为分位点, $\beta_{\tau}$ 为依赖于分位点的回归系数
#
# ### 损失函数
#
# * 二次损失:生成均值 $
# E(Y)=\underset{y}{\operatorname{argmin}} E(Y-y)^{2}$
# * 绝对值损失:生成中位数 $A L(u)=|u|
# $
# * 非对称绝对值损失:生成分位数 $\quad \rho_{\tau}(u)=u(\tau-I(u<0)) \quad Q_{\tau}(Y)=\underset{y}{\operatorname{argmin}} E \rho_{\tau}(Y-y)$
#
#
#
# ### 估计方法
#
# 由于分位数回归的目标函数带有绝对值,不可微分,故通常使用线性规划。
#
# 详情可参考:[statsmodels 官方文档](https://www.statsmodels.org/stable/generated/statsmodels.regression.quantile_regression.QuantReg.html#statsmodels.regression.quantile_regression.QuantReg)
# ## 使用 statsmodels 库实现
# ### 第一种方法
# In[1]:
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
data = pd.read_excel('../数据/上证指数与沪深300.xlsx')
mod = smf.quantreg("data['hs300'] ~ data['sz']", data)
res = mod.fit(q=0.3)
res.summary()
# ### 第二种方法
# In[2]:
import statsmodels.regression.quantile_regression as qr
import statsmodels.api as sm
X = sm.add_constant(data['sz'])
mod = qr.QuantReg(data['hs300'], X)
res = mod.fit(q=0.3)
res.summary()
# ## matlab实现
# 可以参考 matlab 代码:[分位数回归](https://github.com/lei940324/econometrics/tree/master/matlab代码/分位数回归/分布滞后模型回归)