使用 statsmodels 模型拟合另一个数据集

Use statsmodels model fit on another dataset

假设我使用来自 statsmodels.tsa.statespace.sarimax 的 SARIMAX 在数据集 dataset1 上拟合一个模型 - 然后是否可以使用此拟合对另一个数据集 dataset2 进行预测?

即,考虑以下内容:

from statsmodels.tsa.statespace.sarimax import SARIMAX
import pandas as pd
import numpy as np

# generate example data
n=90
idx = pd.PeriodIndex(pd.date_range(start = '2015-01-02',end='2015-04-01',freq='D'))
dat = np.sin(np.linspace(0,12*np.pi,n)) + np.random.randn(n)/10
dataset1 = pd.Series(dat, index = idx)

# fit model
fit = SARIMAX(dataset1, order = (1,0,1)).fit()
# make 30 day forecast on dataset1
fit.forecast(30)

我将如何使用 fitdataset2 进行预测?

dat = np.sin(np.linspace(0,12*np.pi,n)) + np.random.randn(n)/10
dataset2 = pd.Series(dat, index = idx)

理想情况下,它应该是类似于 fit(dataset2).forecast(30) 的超级简单的东西,但显然情况并非如此。

我知道我可以提取估计的参数 fit.params 但如果不经过这个繁琐的过程,是否有内置的方法或 hack 来使用现有的 fit 实例?

您可以使用 apply 结果方法:

from statsmodels.tsa.statespace.sarimax import SARIMAX
import pandas as pd
import numpy as np

# generate example data
n=90
idx = pd.PeriodIndex(pd.date_range(start = '2015-01-02',end='2015-04-01',freq='D'))
dat = np.sin(np.linspace(0,12*np.pi,n)) + np.random.randn(n)/10
dataset1 = pd.Series(dat, index = idx)

# fit model
fit = SARIMAX(dataset1, order = (1,0,1)).fit()
# make 30 day forecast on dataset1
fit.forecast(30)

# ------------------------------------

# get the new dataset
dat = np.sin(np.linspace(0,12*np.pi,n)) + np.random.randn(n)/10
dataset2 = pd.Series(dat, index = idx)

# apply the parameters from `fit` to the new dataset
fit2 = fit.apply(dataset2)
# make 30 day forecast on dataset2
fit2.forecast(30)