Python 的时间序列分析
Time Series Analysis with Python
我想确定趋势系列 B 对趋势系列 A 的估计有多好。我用 OLS 试过了,但显然残差是自相关的。我尝试使用 Cochrane-Orcutt-Procedure (https://onlinecourses.science.psu.edu/stat501/node/360) 进行更正,但这并没有解决自相关问题。我尝试了 python 具有不同 rho 值的 statsmodels GSLAR 函数,但也没有成功。
我错过了什么?回归分析是正确的分析方法吗?什么是替代品?
这是数据:
import pandas as pd
dataA = [0.02921, 0.02946, 0.02971, 0.02996, 0.03021, 0.03042, 0.03063,
0.03083, 0.031, 0.03117, 0.03129, 0.03142,
0.0315, 0.03146, 0.03142, 0.03142, 0.03138, 0.03129, 0.03117, 0.03104,
0.03096, 0.03083, 0.03067, 0.0305, 0.03042, 0.03042, 0.03042, 0.03042,
0.03046, 0.03058, 0.03075, 0.03087, 0.031, 0.03117, 0.03137, 0.03158,
0.03175, 0.03196, 0.03221, 0.03242, 0.03258, 0.03271, 0.03279, 0.03292,
0.03304, 0.03312]
dataB = [0.28416, 0.28756, 0.29716, 0.30777, 0.31047, 0.30262, 0.29666,
0.28918, 0.28008, 0.28037, 0.27909, 0.2738, 0.28378, 0.29538, 0.2927,
0.29232, 0.28845, 0.27793, 0.27858, 0.29067, 0.29573, 0.29336, 0.28964,
0.28601, 0.273, 0.26278, 0.26786, 0.27156, 0.27272, 0.28691, 0.30556,
0.3109, 0.31243, 0.31083, 0.31534, 0.32455, 0.33221, 0.33714, 0.33397,
0.32347, 0.31899, 0.31567, 0.30213, 0.29288, 0.29132, 0.29346]
daterange = pd.date_range(start='2012-07-31', end='2016-04-30',freq='M')
A = pd.Series(dataA, daterange)
B = pd.Series(dataB, daterange)
数据 A 和数据 B 来自季节性分解(加法模型):
from statsmodels.tsa.seasonal import seasonal_decompose
ADecomp = seasonal_decompose(ARaw)
dataA = ADecomp.trend
BDecomp = seasonal_decompose(BRaw)
dataB = BDecomp.trend
我想这更像是一个计量经济学问题,而不是 Python 问题。
首先要做的是查看两个序列是否平稳。
如果静止:
您可以通过 OLS 对它们进行回归以获得估计值。平稳序列是方差在差分顺序上最低的序列。
如果不是静止的:
1) 使用 Engle Granger 方法检验协整。两个非平稳序列可以联合平稳。您也可以在这里 运行 OLS。
2) 如果它们不是协整的,你将不得不采用它们静止的 n 阶差分序列,然后 运行 一个 OLS 来获得预测变量。
希望这能回答您的问题。
我想确定趋势系列 B 对趋势系列 A 的估计有多好。我用 OLS 试过了,但显然残差是自相关的。我尝试使用 Cochrane-Orcutt-Procedure (https://onlinecourses.science.psu.edu/stat501/node/360) 进行更正,但这并没有解决自相关问题。我尝试了 python 具有不同 rho 值的 statsmodels GSLAR 函数,但也没有成功。
我错过了什么?回归分析是正确的分析方法吗?什么是替代品?
这是数据:
import pandas as pd
dataA = [0.02921, 0.02946, 0.02971, 0.02996, 0.03021, 0.03042, 0.03063,
0.03083, 0.031, 0.03117, 0.03129, 0.03142,
0.0315, 0.03146, 0.03142, 0.03142, 0.03138, 0.03129, 0.03117, 0.03104,
0.03096, 0.03083, 0.03067, 0.0305, 0.03042, 0.03042, 0.03042, 0.03042,
0.03046, 0.03058, 0.03075, 0.03087, 0.031, 0.03117, 0.03137, 0.03158,
0.03175, 0.03196, 0.03221, 0.03242, 0.03258, 0.03271, 0.03279, 0.03292,
0.03304, 0.03312]
dataB = [0.28416, 0.28756, 0.29716, 0.30777, 0.31047, 0.30262, 0.29666,
0.28918, 0.28008, 0.28037, 0.27909, 0.2738, 0.28378, 0.29538, 0.2927,
0.29232, 0.28845, 0.27793, 0.27858, 0.29067, 0.29573, 0.29336, 0.28964,
0.28601, 0.273, 0.26278, 0.26786, 0.27156, 0.27272, 0.28691, 0.30556,
0.3109, 0.31243, 0.31083, 0.31534, 0.32455, 0.33221, 0.33714, 0.33397,
0.32347, 0.31899, 0.31567, 0.30213, 0.29288, 0.29132, 0.29346]
daterange = pd.date_range(start='2012-07-31', end='2016-04-30',freq='M')
A = pd.Series(dataA, daterange)
B = pd.Series(dataB, daterange)
数据 A 和数据 B 来自季节性分解(加法模型):
from statsmodels.tsa.seasonal import seasonal_decompose
ADecomp = seasonal_decompose(ARaw)
dataA = ADecomp.trend
BDecomp = seasonal_decompose(BRaw)
dataB = BDecomp.trend
我想这更像是一个计量经济学问题,而不是 Python 问题。
首先要做的是查看两个序列是否平稳。
如果静止: 您可以通过 OLS 对它们进行回归以获得估计值。平稳序列是方差在差分顺序上最低的序列。
如果不是静止的: 1) 使用 Engle Granger 方法检验协整。两个非平稳序列可以联合平稳。您也可以在这里 运行 OLS。 2) 如果它们不是协整的,你将不得不采用它们静止的 n 阶差分序列,然后 运行 一个 OLS 来获得预测变量。
希望这能回答您的问题。