{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 分位数Granger因果检验"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 原理讲解\n",
    "### 各变量含义\n",
    "\n",
    "待估计方程:\n",
    "\n",
    "$$\n",
    "Q_{Y_{t}}\\left[\\tau | Z_{t-1}\\right]=a(\\tau)+Y_{t-1, p}^{\\prime} \\alpha(\\tau)+X_{t-1, q}^{\\prime} \\beta(\\tau)=Z_{t-1}^{\\prime} \\theta(\\tau)\\tag{1}\n",
    "$$\n",
    "\n",
    "其中,$a(\\tau)$为截距项,$\\alpha(\\tau)$和$\\beta(\\tau)$为回归系数列向量;$\\theta(\\tau)$为回归系数向量,\n",
    "\n",
    "$$\n",
    "a(\\tau)=\\left[alpha(\\tau), \\alpha(\\tau)^{\\prime}, \\beta(\\tau)^{\\prime}\\right]^{\\prime}\\tag{2}\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\quad Y_{t-1, p}^{\\prime}=\\left(Y_{t-1}, \\cdots, Y_{t-p}\\right)\\tag{3}\n",
    "$$\n",
    "\n",
    "$$\n",
    "\\quad X_{t-1, q}^{\\prime}=\\left(X_{t-1}, \\cdots, X_{t-q}\\right)\\tag{4}\n",
    "$$\n",
    "\n",
    "$$\n",
    "Z_{t-1}^{\\prime}=\\left(Y_{t-1, p}^{\\prime}, X_{t-1, q}^{\\prime}\\right)\\tag{5}\n",
    "$$\n",
    "\n",
    "Wald检验量为:\n",
    "\n",
    "$$\\mathrm{W}_{T}(\\tau)=T \\frac{\\hat{\\beta}(\\tau)^{\\prime} \\hat{\\Sigma}(\\tau)^{-1} \\hat{\\beta}(\\tau)}{\\tau(1-\\tau)}\\tag{6}$$\n",
    "\n",
    "Sup-Wald检验量为:\n",
    "\n",
    "$$\\sup W_{T}=\\sup _{i=1, \\cdots, n} W_{T\\left(\\tau_{i}\\right)}\\tag{7} $$\n",
    "\n",
    "> Python在进行分位数回归时,方差默认为核估计\n",
    "\n",
    "### 分位数方差核密度估计原理(基于Eviews帮助文件)\n",
    "**独立但不同分布假设下的参数渐近分布**\n",
    "\n",
    "当分位数密度函数独立但不同分布即与解释变量X相关时,$\\sqrt{T}(\\hat{\\beta}(\\tau)-\\beta(\\tau))$的渐近分布服从Huber sandwich形式:\n",
    "\n",
    "$$\n",
    "\\sqrt{T}\\left(\\hat{\\beta}_{(\\tau)}-\\beta_{(\\tau)}\\right){\\sim} N\\left(0, \\tau(1-\\tau) H(\\tau)^{-1} J H(\\tau)^{-1}\\right)\\tag{8}$$\n",
    "\n",
    "其中 $T$ 为样本容量,$\\tau$ 为分位点,$\\hat{\\beta}_{(\\tau)}$为 $\\tau$ 分位点下回归系数估计量,$N$ 为正态分布,$X_{i}$ 为解释变量矩阵;\n",
    "\n",
    "$$\n",
    "J=\\lim _{n \\rightarrow \\infty}\\left(\\sum_{i} \\frac{X_{i} X_{i}^{\\prime}}{T}\\right)=\\lim _{n \\rightarrow \\infty}\\left(\\frac{X X}{T}\\right)\\tag{9}\n",
    "$$\n",
    "\n",
    "$$\n",
    "H(\\tau)=\\lim _{T \\rightarrow \\infty}\\left(\\sum_{i} X_{i} X_{i}^{\\prime} f_{i}\\left(q_{i}(\\tau)\\right) / T\\right)\\tag{10}\n",
    "$$\n",
    "\n",
    "$f_{i}\\left(q_{i}(\\tau)\\right)$ 是个体 $i$ 在 $\\tau$ 分位点上的条件密度函数。使用核密度进行估计:     \n",
    "\n",
    "$$\n",
    "\\hat{H}(\\tau)=(1 / T) \\sum_{i=1}^{T} c_{T}^{-1} K\\left(\\hat{u}_{(\\tau) t} / c_{T}\\right) X_{i} X_{i}^{\\prime}\\tag{11}$$\n",
    "\n",
    "其中 $\\hat{\\mathcal{u}}_{(\\tau) i}$ 表示分位数回归的残差;$c_T$ 为带宽,估计原理见下文;表示 $\\kappa$ 核密度函数。EViews 中可以选择的核密度函数有 Epanechnikov 核函数(默认)、均匀 (Uniform) 核函数、三角(Triangular)核函数、二权(Biweight)核函数、三权(Triweight)核函数、正态(Normal)核函数、余弦(Cosinus)核函数,具体函数形式见图。\n",
    "\n",
    "<img src=\"https://raw.githubusercontent.com/lei940324/picture/master/typora202003/31/180818-928273.png\" alt=\"image-20200331180810735\" style=\"zoom:67%;\" />  \n",
    "\n",
    "![image-20200331181950284](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2xlaTk0MDMyNC9waWN0dXJlL21hc3Rlci90eXBvcmEyMDIwMDMvMzEvMTgxOTUxLTUzMzgxNi5wbmc?x-oss-process=image/format,png)\n",
    "\n",
    "$c_T$ 的估计原理:\n",
    "\n",
    "$$c_{T}=\\kappa\\left(\\Phi^{-1}\\left(\\tau+h_{n}\\right)-\\Phi^{-1}\\left(\\tau-h_{n}\\right)\\right)\\tag{12}$$  \n",
    "\n",
    "其中 $\\kappa=\\min (s, I Q R / 1.34)$,$IQR$ 为四分位距,$\\mathrm{I} Q \\mathrm{R}=Q_{3}-Q_{1}$;$s$ 为残差的标准差;$h_n$ 是 Siddiqui 带宽,\n",
    "\n",
    "$$\n",
    "h_{n}=T^{-1 / 3} Z_{\\alpha}^{2 / 3}\\left(\\frac{1.5\\left(\\varphi\\left(\\Phi^{-1}(\\tau)\\right)\\right)^{2}}{2\\left(\\Phi^{-1}(\\tau)\\right)^{2}+1}\\right)^{1 / 3}\\tag{13}\n",
    "$$\n",
    "\n",
    "$\\Phi$ 表示正态分布的积累分布函数,$\\Phi^{-1}$ 表示正态分布的逆函数,$\\varphi$ 表示正态分布的密度函数,$Z_{\\alpha}=\\Phi^{-1}(1-\\alpha / 2)$ 为选择的显著性水平 $\\alpha$ 对应的 $Z$ 值。\n",
    "\n",
    "> 文中只列出一种方差的估计原理,更多内容详见Eviews 8 帮助文件"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用 statsmodels 库实现"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在 github 里写了一个 [Quantile 项目](https://github.com/lei940324/Quantile),使用 `pyqt5` 进行 GUI 可视化,有兴趣的朋友可以进行参考"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## matlab实现"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以参考 matlab 代码:[Granger 因果检验](https://github.com/lei940324/econometrics/tree/master/matlab代码/分位数回归/Granger因果检验)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}