r-findfrequency spec.ar在Python中的等价项



forecast包上的R中有一个非常有用的函数findfrequency,它返回时间序列主频的周期。作者关于该函数的更多信息可以在这里找到:https://robjhyndman.com/hyndsight/tscharacteristics/

我想在Python中实现一些等效的东西,但我遇到了与findfrequency中的spec.arR函数相等的函数的问题。

该功能从解列开始,这可以用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

相关内容

  • 没有找到相关文章

最新更新