页面载入中,请稍后...

Python分位数回归|基本原理解释与沪深300指数VaR估计

作者: zzy5111398 分类: 估计方法,数据科学 发布时间: 2018-09-04 20:29

由于计算VaR的要求,笔者最近学习了分位数回归的相关问题,但是发现博客上普遍没有讲清楚损失函数和分位数的关系,同时也不具备经济学应用的相关案例。遂在此记录本人学习心得和应用以供参考。

1. Quantile regression VS Least square

最小二乘大家最熟悉不过了,基本上江苏高中必修课中都涉及到该模型,本站在贝叶斯系列中也回顾了该模型。LS最早是由法国数学家Legendre(1805)提出的,可由超定方程、几何拟合等领域独立证明和应用,由高斯-马尔可夫定理证明BLUE的简约而不失严谨的参数估计方法。

但是,当误差即因变量估计值与观测值之差具有异方差特性时,OLS就不具备一些性质了。而且,即便是站在频率派视角下,仅仅得到均值也不足以获悉总体的分布(除非假定分布,但是又不一定准确)。因此建立一个非参数估计来获悉输出变量分布全状吸引了统计学家的注意,终于Roger Koenker(1978)率先引入了分位数回归(quantile regression)。

分位数回归顾名思义就是通过估计,得到被解释变量各个分为数的估计值。也就是说,普通回归的得到的回归估计方程估计得到的值,是在输入(自变量)观测下输出的条件期望也就是均值,而分为数回归得到的是条件分位数。一般地,线性的分位数回归将得到一簇直线,如图所示

我们可以看到,随着分位数$\tau$从0至100%增长,得到的回归曲线从下到上。另外还可以看到,误差具有异方差性,即$x_t$越大回归误差越大。从图上的分布可以明显看出被解释变量分布的变化。另外,由于分位数回归线越往上越密集,也可以得出分布具有右偏性质。下面我们拿出我们的数学工具来解释分位数回归和普通最小二乘的区别。

一言以蔽之,优化目标函数不同。众所周知,最小二乘是最小化误差平方,也即可用下式表示

$\underset{\beta}{min} (Y-X^\top \beta)^\top  (Y-X^\top \beta)$

分位数回归就是用损失函数代替误差平方,即

$\underset{\beta}{min} : G_\tau (Y-X^\top \beta)$

其中$G_\tau$是与参数$\tau$有关的T元函数。例如最小二乘可以看作该函数为$ (Y-X^\top \beta)^\top  (Y-X^\top \beta)$与$\tau$无关。

分位数回归设该函数为$G_\tau(\begin{bmatrix}\epsilon_1\ \epsilon_2\ \vdots \\epsilon_T\\end{bmatrix})=\sum_{t}^{T} g_\tau(\epsilon_t)$

其中$g_\tau(x)=\begin{cases}\tau x & \text{ if } x \geq 0 \ (\tau-1)x & \text{ if } x < 0 \end{cases}$,又称☑️函数,即如图所示

如果令$\tau=0.5$,则$g_\tau(x)=\frac{\left | x \right |}{2}$,即分位数回归退化为最小一乘估计。

2. 为什么是分位数

目前我们推导的回归模型只不过是运用了新的损失函数用来代替最优化的目标函数,但是为什么这个目标优化问题叫分位数回归呢?

根据这个回归模型,我们假设待估计随机变量为Y,模型估计的结果为$\hat{Y}$,则最优化问题为

$min E g_\tau (Y-\hat{Y})$,显然$g_\tau(x)\geq 0$,因此最小肯定是为零。于是有下式,

$0=Eg_\tau(Y-\hat{Y})=(\tau-1)\int_{-\infty }^{\hat{Y}}(Y-\hat{Y})dF(Y)+\tau\int_{\hat{Y} }^{\infty}(Y-\hat{Y})dF(Y)=(1-\tau)\hat{Y}\int_{-\infty }^{\hat{Y}}dF(Y)-\tau\hat{Y}\int_{\hat{Y} }^{\infty}dF(Y)$

遂得到,$F(\hat{Y})=\tau$,即估计值$\hat{Y}$的累积分布函数为$\tau$,即为所属分布的$\tau$分位数。

3. VaR的计算实例

我相信绝大多数同学看过R语言quantreg包中包含的Engle数据的分位数回归案例,因此我稍微加大一点工作量,运用python的statsmodels库完成对于沪深300的VaR计算。

首先,加载该程序需要的包,并通过tushare包的get_k_data函数下载近一年的沪深300指数k线数据。

sh000001 = ts.get_k_data('399300', index=True,start='2017-10-01', end='2018-08-31')

随后,以此计算对数收益率以及其滞后期,并联合当期成交量建立dataframe,如图所示。

其中‘rsh’序列代表当日对数收益率,‘vol’代表当日成交量。
为了实现VaR的估计,我们将其中vol变量作为解释变量,用于分位数回归。

x = data[['vol']]
y = data[['rsh']]
mod = smf.quantreg('rsh ~ vol', data)

最后,通过matplotlib包绘制估计结果如图所示。

由此可见,本文选取的解释变量(成交量)无法较好地解释收益率序列,因此不能准确估计VaR的数值,不过本文仅作为分位数回归的Demo,下面我准备写一篇较为准确的多因子分位数回归。本文的完整程序就不提供了,需要的可以加我微信索取。


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

3条评论
  • JamesInfar

    2019年4月9日 上午9:49

    Подаются базы Готовые Cвежая сырая база размер 60 милионов сайтов за март 2019 года(профилей, топиков, гостевых досок и комментариев для прогонки Xrumer и другими аналогичными программами.
    Очищеные базы для XRumer 18.x.x и GSA Search Engine Ranker ) так же возможен сбор баз на заказ таких порталов как авито и тд По всем возникшим вопросам Вы можете обратиться в скайп логин pokras7777

  • 匿名

    2019年4月6日 下午4:53

    gτ(x)≥0
    ,因此最小肯定是为零

    1. 匿名

      2019年4月6日 下午5:01

      你好,第二部分的推导有点问题。
      目标函数最小肯定为零是不假,但是对一般的分布来说,0是达不到的。(如果是0,那基本上处处Y=Y^,这显然是不成立的。)再加上后面式子中的第三个等号是有些问题。

发表评论

电子邮件地址不会被公开。