在forecast
包上的R中有一个非常有用的函数findfrequency
,它返回时间序列主频的周期。作者关于该函数的更多信息可以在这里找到:https://robjhyndman.com/hyndsight/tscharacteristics/
我想在Python中实现一些等效的东西,但我遇到了与findfrequency中的spec.ar
R函数相等的函数的问题。
该功能从解列开始,这可以用x = statsmodels.tsa.tsatools.detrend(myTs, order=1, axis=0)
轻松完成。现在我有了我想在Python中做的残差,相当于R中的spec.ar
函数,它首先将AR模型拟合到x(或使用现有拟合(,并计算(默认情况下绘制(拟合模型的光谱密度。
我没有发现任何类似的东西,所以我一次做每一步,首先是AR,然后是规格估计。我使用的是Airpassengers
时间序列,对于AR顺序或系数,我无法在R和Python上获得相同的结果。
我的R代码:
x <- AirPassengers
x <- residuals(tslm(x ~ trend))
ARmodel <- ar(x)
ARmodel
我得到15是我的自回归模型的选择顺序。
我的Python代码:
import statsmodels.api as sm
dataPeriodic = pd.read_csv('AirPassengers.csv')
tsPeriodic = dataPeriodic.iloc[:,1]
x = statsmodels.tsa.tsatools.detrend(tsPeriodic, order=1, axis=0)
n = x.shape[0]
est_order = sm.tsa.AR(x).select_order(maxlag=20, ic='aic', trend='nc')
print(est_order)
在这里,我得到了一个非常不同的结果,选择的顺序等于10而不是15,我必须用maxlag参数指定滞后搜索的上限。。
我尝试过tsa.AutoReg
,但没有成功,我得到了另一个不同的结果。
那么,有没有一种方法可以像R一样拟合AR模型呢?类似spec.ar
的东西,甚至类似findfrequency
的功能?我对"相同"方法在两种语言中输出的巨大差异感到困惑。
对于Rforecast
包的findfrequency
,我在Python中能找到的最接近的是使用pandas.infer_freq,如下所示:
>>> import pandas as pd
>>> ts_data = pd.read_csv("ts_data.csv")
>>> pd.infer_freq(ts_data.index.values)
4