{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ARMA模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 原理讲解\n",
    "\n",
    "为了使模型更好地拟合数据,可以将 $AR(p)$ 与 $MA(q)$ 结合起来,得到 $ARMA(p,q)$ :\n",
    "\n",
    "$$y_{t}=\\beta_{0}+\\beta_{1} y_{t-1}+\\cdots+\\beta_{p} y_{t-p}+\\varepsilon_{t}+\\theta_{1} \\varepsilon_{t-1}+\\cdots+\\theta_{q} \\varepsilon_{t-q}\\tag{1}$$\n",
    "\n",
    "其中,{$\\varepsilon _t$} 为白噪声。在给定 $\\left\\{y_{1}, y_{2}, \\cdots, y_{p}\\right\\}$ 与“$\\varepsilon_{0}=\\varepsilon_{-1}=\\cdots=\\varepsilon_{-q+1}=0$”的条件下,可以使用条件 MLE 来估计 $ARMA(p,q)$。为了估计 $ARMA(p,q)$,首先必须确定 $(p,q)$,而经济理论通常不能提供这些信息,故只能根据数据来估计 $(p,q)$。\n",
    "在实践中,常常先考察数据的自相关函数(ACF)与偏自相关函数(PACF),以判断是否存在 p=0 或 q=0 的情形。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## statsmodels 库实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<caption>ARMA Model Results</caption>\n",
       "<tr>\n",
       "  <th>Dep. Variable:</th>        <td>sz</td>        <th>  No. Observations:  </th>    <td>460</td>   \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Model:</th>            <td>ARMA(1, 1)</td>    <th>  Log Likelihood     </th> <td>-2294.749</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Method:</th>             <td>css-mle</td>     <th>  S.D. of innovations</th>  <td>35.352</td>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Date:</th>          <td>Fri, 29 May 2020</td> <th>  AIC                </th> <td>4597.498</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Time:</th>              <td>21:03:01</td>     <th>  BIC                </th> <td>4614.023</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Sample:</th>                <td>0</td>        <th>  HQIC               </th> <td>4604.006</td> \n",
       "</tr>\n",
       "<tr>\n",
       "  <th></th>                       <td> </td>        <th>                     </th>     <td> </td>    \n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "      <td></td>        <th>coef</th>     <th>std err</th>      <th>z</th>      <th>P>|z|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>const</th>    <td> 2987.0655</td> <td>  142.111</td> <td>   21.019</td> <td> 0.000</td> <td> 2708.533</td> <td> 3265.597</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>ar.L1.sz</th> <td>    0.9902</td> <td>    0.006</td> <td>  161.182</td> <td> 0.000</td> <td>    0.978</td> <td>    1.002</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>ma.L1.sz</th> <td>    0.0012</td> <td>    0.047</td> <td>    0.025</td> <td> 0.980</td> <td>   -0.090</td> <td>    0.093</td>\n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<caption>Roots</caption>\n",
       "<tr>\n",
       "    <td></td>   <th>            Real</th>  <th>         Imaginary</th> <th>         Modulus</th>  <th>        Frequency</th>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>AR.1</th> <td>           1.0099</td> <td>          +0.0000j</td> <td>           1.0099</td> <td>           0.0000</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>MA.1</th> <td>        -842.3029</td> <td>          +0.0000j</td> <td>         842.3029</td> <td>           0.5000</td>\n",
       "</tr>\n",
       "</table>"
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.summary.Summary'>\n",
       "\"\"\"\n",
       "                              ARMA Model Results                              \n",
       "==============================================================================\n",
       "Dep. Variable:                     sz   No. Observations:                  460\n",
       "Model:                     ARMA(1, 1)   Log Likelihood               -2294.749\n",
       "Method:                       css-mle   S.D. of innovations             35.352\n",
       "Date:                Fri, 29 May 2020   AIC                           4597.498\n",
       "Time:                        21:03:01   BIC                           4614.023\n",
       "Sample:                             0   HQIC                          4604.006\n",
       "                                                                              \n",
       "==============================================================================\n",
       "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
       "------------------------------------------------------------------------------\n",
       "const       2987.0655    142.111     21.019      0.000    2708.533    3265.597\n",
       "ar.L1.sz       0.9902      0.006    161.182      0.000       0.978       1.002\n",
       "ma.L1.sz       0.0012      0.047      0.025      0.980      -0.090       0.093\n",
       "                                    Roots                                    \n",
       "=============================================================================\n",
       "                  Real          Imaginary           Modulus         Frequency\n",
       "-----------------------------------------------------------------------------\n",
       "AR.1            1.0099           +0.0000j            1.0099            0.0000\n",
       "MA.1         -842.3029           +0.0000j          842.3029            0.5000\n",
       "-----------------------------------------------------------------------------\n",
       "\"\"\""
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from statsmodels.tsa.arima_model import ARMA\n",
    "import pandas as pd\n",
    "\n",
    "data = pd.read_excel('../数据/上证指数与沪深300.xlsx')\n",
    "res = ARMA(data['sz'], order=(1,1)).fit()\n",
    "res.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## matlab 实现\n",
    "可以参考 [MA 模型](https://nbviewer.jupyter.org/github/lei940324/econometrics/blob/master/金融时间序列/移动平均(MA)模型.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Eviews 估计\n",
    "估计方程 `y c ma(p) ar(q)`\n",
    "<div align=center><img src=\"https://gitee.com/lei940324/picture/raw/master/img/2020/0529/172512.png\" width=\"430\" ></div>"
   ]
  }
 ],
 "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.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}