Python⼿册(MachineLearning)--statsmodels(TimeSe。。。TimeSeries
本站已停⽌更新,查看最新内容请移⾄本⼈博客
时间序列分析是根据系统观测得到的时间序列数据,通过曲线拟合和参数估计来建⽴数学模型的理论和⽅法。它⼀般采⽤曲线拟合和参数估计⽅法(如⾮线性最⼩⼆乘法)进⾏。时间序列分析常⽤在国民经济宏观控制、区域综合发展规划、企业经营管理、市场潜量预测、⽓象预报、⽔⽂预报、地震前兆预报、农作物病⾍灾害预报、环境污染控制、⽣态平衡、天⽂学和海洋学等⽅⾯。
Time Series analysis tsa(时间序列分析)
from statsmodels import tsa
⼦模块说明
stattools经验属性和测试,acf,pacf,granger-causality,adf单位根测试,kpss测试,bds测试,ljung-box测试等。
ar_model单变量⾃回归过程,使⽤条件和精确最⼤似然估计和条件最⼩⼆乘
arima_mode单变量ARMA过程,使⽤条件和精确最⼤似然估计和条件最⼩⼆乘法
vector_ar,var向量⾃回归过程(VAR)估计模型,脉冲响应分析,预测误差⽅差分解和数据可视化⼯具
kalmanf使⽤卡尔曼滤波器的ARMA和其他具有精确MLE的模型的估计类
arma_process 具有给定参数的arma进程的属性,包括在ARMA,MA和AR表⽰之间进⾏转换的⼯具以及acf,pacf,频谱密度,脉冲响应函数和类似
sandbox.tsa.fftarma类似于arma_process但在频域⼯作
tsatools额外的辅助函数,⽤于创建滞后变量数组,构造趋势,趋势和类似的回归量。filters过滤时间序列的辅助函数
regime_switching马尔可夫切换动态回归和⾃回归模型
常⽤模型
常⽤的时间序列模型有四种:⾃回归模型 、移动平均模型 、⾃回归移动平均模型 、⾃回归差分移动平均模型 ARMA模型
⾃回归滑动平均模型(英语:Autoregressive moving average model,简称:ARMA模型)。是研究时间序列的重要⽅法,由⾃回归模型(简称AR模型)与移动平均模型(简称MA模型)为基础“混合”构成。
基本原理:误差项:ARIMA模型
ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model),差分整合移动平均⾃回归模型,⼜称整合移动平均⾃回归模型(移动也可称作滑动),时间序列预测分析⽅法之⼀。ARIMA(p,d,q)中,AR是"⾃回归",p为⾃回归项数;MA为"滑动平均",q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。
当时间序列本⾝不是平稳的时候,如果它的增量,即⼀次差分,稳定在零点附近,可以将看成是平稳序列。在实际的问题中,所遇到的多数⾮平稳序列可以通过⼀次或多次差分后成为平稳时间序列,则可以建⽴模型。
ARIMA 模型运⽤的流程
1. 根据时间序列的散点图、⾃相关函数和偏⾃相关函数图识别其平稳性。
2. 对⾮平稳的时间序列数据进⾏平稳化处理。直到处理后的⾃相关函数和偏⾃相关函数的数值⾮显著
⾮零。
3. 根据所识别出来的特征建⽴相应的时间序列模型。平稳化处理后,若偏⾃相关函数是截尾的,⽽⾃相关函数是拖尾的,则建⽴AR模
型;若偏⾃相关函数是拖尾的,⽽⾃相关函数是截尾的,则建⽴MA模型;若偏⾃相关函数和⾃相关函数均是拖尾的,则序列适合ARMA模型。
4. 参数估计,检验是否具有统计意义。
5. 假设检验,判断(诊断)残差序列是否为⽩噪声序列。
6. 利⽤已通过检验的模型进⾏预测
Example: ARMA example: Sunspots data
导⼊数据并作图
from __future__ import print_function
import numpy as np
from scipy import stats
import pandas as pd
import matplotlib .pyplot as plt
import statsmodels .api as sm
from statsmodels .graphics .api import qqplot
dta = sm .datasets .sunspots .load_pandas ().data
dta .index = pd .Index (sm .tsa .datetools .dates_from_range ('1700', '2008'))
del dta ["YEAR"]
dta .plot (figsize =(12,8))
plt .show ()
参数估计
AR (p )MA (q )ARMA (p ,q )ARIMA (p ,d ,q )
Y =t βY +1t −1βY +2t −2...+βY +p t −p Z t
Z =t ε+t αε+1t −1αε+2t −2...++αεq t −q
fig = plt.figure(figsize=(12,8))
ax1 = fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(dta.values.squeeze(), lags=40, ax=ax1)
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(dta, lags=40, ax=ax2)
拟合模型并评估
>>> arma_mod20 = sm.tsa.ARMA(dta,(2,0)).fit(disp=False)
>>>print(arma_mod20.params)
气象python零基础入门教程
const 49.659542
ar.L1.SUNACTIVITY 1.390656
ar.L2.SUNACTIVITY -0.688571
dtype: float64
/Users/taugspurger/sandbox/statsmodels/statsmodels/tsa/base/tsa_model.py:171: ValueWarning: No frequency information was provided, so inferred freq uency A-DEC will be used.
% freq, ValueWarning)
>>> arma_mod30 = sm.tsa.ARMA(dta,(3,0)).fit(disp=False)
/Users/taugspurger/sandbox/statsmodels/statsmodels/tsa/base/tsa_model.py:171: ValueWarning: No frequency information was provided, so inferred freq uency A-DEC will be used.
% freq, ValueWarning)
>>>print(arma_mod20.aic, arma_mod20.bic, arma_mod20.hqic)
2622.6363380658092637.56970317342628.606725911055
>>>print(arma_mod30.params)
const 49.749936
ar.L1.SUNACTIVITY 1.300810
ar.L2.SUNACTIVITY -0.508093
ar.L3.SUNACTIVITY -0.129650
dtype: float64
>>>print(arma_mod30.aic, arma_mod30.bic, arma_mod30.hqic)
2619.40362869644742638.07033508093632626.866613503005
假设检验
>>> sm.stats.durbin_watson(sid.values)#D-W检验
1.9564807635787604
>>> fig = plt.figure(figsize=(12,8))
>>> ax = fig.add_subplot(111)
oracle数据库还原步骤>>> ax = sid.plot(ax=ax)#残差正态
>>> resid = sid
>>> altest(resid)
NormaltestResult(statistic=49.845019661107585, pvalue=1.5006917858823576e-11)
>>> fig = plt.figure(figsize=(12,8))
>>> ax = fig.add_subplot(111)
>>> fig = qqplot(resid, line='q', ax=ax, fit=True)
模型预测
predict_sunspots = arma_mod30.predict('1990','2012', dynamic=True)
fig, ax = plt.subplots(figsize=(12,8))
ax = dta.loc['1950':].plot(ax=ax)
fig = arma_mod30.plot_predict('1990','2012', dynamic=True, ax=ax, plot_insample=False)
Time Series Analysis by State Space Methods statespace(基于状态空间⽅法的时间序列分析)capacity to visualize objects
模型意义
状态空间模型起源于平稳时间序列分析。当⽤于⾮平稳时间序列分析时需要将⾮平稳时间序列分解为随机游⾛成分(趋势)和弱平稳成分两个部分分别建模。 含有随机游⾛成分的时间序列⼜称积分时间序列,因为随机游⾛成分是弱平稳成分的和或积分。当⼀个向量值积分序列中的某些序列的线性组合变
成弱平稳时就称这些序列构成了协调积分(cointegrated)过程。 ⾮平稳时间序列的线性组合可能产⽣平稳时间序列这⼀思想可以追溯到回归分析,Granger提出的协调积分概念使这⼀思想得到了科学的论证。 Aoki和Cochrane等⼈的研究表明:很多⾮平稳多变量时间序列中的随机游⾛成分⽐以前⼈们认为的要⼩得多,有时甚⾄完全消失。
状态空间模型的建⽴和预测的步骤
为了避免由于状态空间模型的不可控制性⽽导致的错误的分解形式,当对⼀个单整时间序列建⽴状态空间分解模型并进⾏预测,应按下⾯的步骤执⾏:
(1) 对相关的时间序列进⾏季节调整,并将季节要素序列外推;
(2) 对季节调整后的时间序列进⾏单位根检验,确定单整阶数,然后在ARIMA过程中选择最接近的模型;
(3) 求出ARIMA模型的系数;
(4) ⽤ARIMA模型的系数准确表⽰正规状态空间模型,检验状态空间模型的可控制性;
(5) 利⽤Kalman滤波公式估计状态向量,并对时间序列进⾏预测。
(6) 把外推的季节要素与相应的预测值合并,就得到经济时间序列的预测结果
Vector Autoregressions tsa.vector_ar(⽮量⾃动回归)
from statsmodels .tsa .api import VAR
向量⾃回归(VAR)是基于数据的统计性质建⽴模型,VAR模型把系统中每⼀个内⽣变量作为系统中所有内⽣变量的滞后值的函数来构造模型,从⽽将单变量⾃回归模型推⼴到由多元时间序列变量组成的“向量”⾃回归模型。VAR模型是处理多个相关经济指标的分析与预测最容易操作的模型之⼀,并且在⼀定的条件下,多元MA和ARMA模型也可转化成VAR模型,因此近年来VAR模型受到越来越多的经济⼯作者的重视。
VAR 进程(VAR processes)
VAR(p)建⽴多变量时间序列Y,T为观测数量,K为变量数量。
估计时间序列与其滞后值之间关系的向量⾃回归过程为:
是⼀个 K×K 系数矩阵
模型拟合(Model fitting)
statsmodels.tsa.api
# some example data
In [1]: import numpy as np
In [2]: import pandas
In [3]: import statsmodels .api as sm
In [4]: from statsmodels .tsa .api import VAR , DynamicVAR
In [5]: mdata = sm .datasets .macrodata .load_pandas ().data
# prepare the dates index
In [6]: dates = mdata [['year', 'quarter']].astype (int ).astype (str )
In [7]: quarterly = dates ["year"] + "Q" + dates ["quarter"]
In [8]: from statsmodels .tsa .base .datetools import dates_from_str
average函数的功能
数字编码转换系统In [9]: quarterly = dates_from_str (quarterly )
In [10]: mdata = mdata [['realgdp','realcons','realinv']]
In [11]: mdata .index = pandas .DatetimeIndex (quarterly )
In [12]: data = np .log (mdata ).diff ().dropna ()
# make a VAR modeljar包是什么意思
In [13]: model = VAR (data )
In [14]: results = model .fit (2)
In [15]: results .summary ()
注意:本VAR类假定通过时间序列是静⽌的。⾮静态或趋势数据通常可以通过第⼀差分或⼀些其他⽅法变换为静⽌的。对于⾮平稳时间序列的直接分析,标准稳定VAR(p)模型是不合适的。
In [16]: results .plot ()
Out [16]: <Figure size 1000x1000 with 3 Axes >T ×K Y =t A Y +1t −1...+A Y +p t −p u t
u =t N (0,Σ)
u A i
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论