{ "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 }