Доверительный интервал симуляции не равен conf_int Результаты - PullRequest
0 голосов
/ 08 октября 2018

С учетом этих смоделированных данных:

import numpy as np
from statsmodels.tsa.arima_process import ArmaProcess
from statsmodels.tsa.statespace.structural import UnobservedComponents


np.random.seed(12345)
ar = np.r_[1, 0.9]
ma = np.array([1])
arma_process = ArmaProcess(ar, ma)

X = 100 + arma_process.generate_sample(nsample=100)
y = 1.2 * X + np.random.normal(size=100)

Мы строим модель UnobservedComponents с первыми 70 точками для выполнения выводов по последним 30 точкам, например:

model = UnobservedComponents(y[:70], level='llevel', exog=X[:70])
f_model = model.fit()

forecaster = f_model.get_forecast(
    steps=30,
    exog=X[70:].reshape(-1, 1)
)
conf_int = forecaster.conf_int()

Еслимы наблюдаем среднее значение для 95% доверительного интервала, получаем следующее:

conf_int.mean(axis=0)
array([118.19789195, 122.14101161])

Но при попытке получить те же значения с помощью моделирования, мы не совсем получаем те же результаты.Вот скрипт, который мы запускаем для смоделированных границ:

sim_model = UnobservedComponents(np.zeros(30), level='llevel', exog=X[70:])
res = []
predicted_state = f_model.predicted_state[..., -1]
predicted_state_cov = f_model.predicted_state_cov[..., -1]   
for i in range(1000):
     init_state = np.random.multivariate_normal(
         predicted_state,
         predicted_state_cov
     )
     sim = sim_model.simulate(
         f_model.params,
         30,
         initial_state=init_state)
     res.append(sim.mean())

Печатая нижний 2,5 и верхний 97,5 процентиль, мы получаем:

np.percentile(res, [2.5, 97.5])
array([119.06735028, 121.26810407])

Поскольку мы используем моделирование для различения сигнала от шума вПо данным, эта разница оказалась достаточно большой, чтобы привести к противоречивым выводам.Например, если мы сделаем:

y[70:] += 1

Затем, согласно первому методу, мы заключаем, что новый y не несет сигнала, поскольку его среднее значение ниже, чем 122.14.Но то же самое не верно, если мы используем второй метод: поскольку верхняя граница равна 121.2, мы заключаем, что есть сигнал.

Теперь мы пытаемся понять, ожидается ли это.Разве нижний и верхний 95% доверительный интервал обоих методов не должны быть равны?

...