Записать R-код модели AR (2) для временных данных ser ie из файла `rsav` - PullRequest
1 голос
/ 25 марта 2020

Мне нужно написать R-код для моделирования данных времени ie из файла rsav. Вот подробная информация о вопросе:

Файл “file.rsav” (который можно загрузить в R с помощью load(“file.rsav”)) содержит временной ряд (“xx”). Эта серия является ежемесячным потоком дохода “demeaned” (в миллионах долларов) для компании. Есть n = 96 наблюдений.

Ряд был “demeaned”; обычно это означало бы, что мы вычитаем $ \ bar {X} $ из каждой точки данных, но представим, что на данный момент мы точно знаем среднее значение $ miu $, поэтому мы вычитаем µ из каждой точки данных, поэтому новый ряд точно (теоретически ) значит 0. (Но при этом его выборочное среднее значение не совсем 0.)

Мы рассмотрим возможные ARMA модели для серии $ X_t $. Мы предполагаем, что соответствующий белый шум является гауссовым (поэтому X_t является гауссовым). Сначала рассмотрим модель AR(2). Мы предполагаем, что знаем точную модель точно: $ X_t = .1.34X_ {t-1} - .48X_ {t-2} + W_t, W_t \ sim iid N (0, σ ^ 2) $ .

Меня попросили вычислить прогнозы обратного вещания с использованием модели с точностью до 25 временных шагов в будущем и в прошлом.

Написать код для выполнения предсказания вручную (т. Е. Не используя функцию predict()). Постройте данные, прогноз и интервалы прогнозирования 95% [в предположении гауссовости] (все на одном графике). (Примечание: вам не нужно делать коррекцию кратности для интервалов прогнозирования.)

Код:

load('./file.rsav')
str(xx)
xx

Out:

Time-Series [1:96] from 1 to 8.92: 2.45 2.18 0.389 -1.44 -1.47 ...
          Jan         Feb         Mar         Apr         May         Jun         Jul
1  2.45017780  2.17955829  0.38874020 -1.43979552 -1.47049807 -2.25233354 -0.82580703
2  1.92378321  1.87944208  1.07382472  1.01933130  1.88660307 -0.31109156 -0.25732342
3  0.60732330  1.53185399  1.58614371  0.63922270  0.82728407  0.28910411 -1.18154941
4  0.41375543  1.96633332  1.97402973  4.16058136  5.15474250  5.71865844  3.93136013
5 -1.51228022 -3.03396294 -3.65446772 -4.69589618 -3.51276584 -2.97682246 -3.08655352
6  3.43027017  4.68909032  6.55598795  4.95816124  4.87626503  3.17103291  0.79093946
7 -0.62481997 -0.94469455 -2.13648402 -3.64364158 -2.07214317 -3.26793808 -3.38573375
8  0.67823828  1.09908274  0.93832242  0.08791237  1.77322327  2.01201710  3.70197246
          Aug         Sep         Oct         Nov         Dec
1  0.53048061  1.31994246  0.69306401  1.25916404  1.53363966
2 -0.47154459  0.52849630  0.90548093  0.71783457  0.86908457
3 -0.52525201 -0.40335058  0.73415310  0.58501633  0.29875228
4  2.50242432  1.69408297  0.96230124  0.53164036 -0.64480235
5 -1.60735865 -0.20500888 -0.44508903 -0.01443040  1.71087427
6 -0.09975821 -0.85972650 -0.41557374 -0.99876068  0.52620555
7 -2.25968715 -0.91700127 -0.49302872 -1.44275203 -0.66221559
8  4.62724761  4.17549847  3.43992950  3.15302462  4.17300576

Я не слишком много знаю о rsav файле расширения, может кто-нибудь помочь мне решить эту проблему или дать мне несколько советов? Заранее спасибо.

1 Ответ

1 голос
/ 26 марта 2020

Я думаю, что под "обратным просмотром" подразумевается выборка, подходящая для последних 25 наблюдений. Для прогноза по модели AR(2) вам просто нужны последние 2 наблюдения для следующего шага.

Модель: x_t = ar1 * x_{t-1} + ar2 * x_{t-2} + error

Теперь нам просто нужно вставить оценочные параметры ar и наблюдения за x_{t-1} и x_{t-2}. Для следующего шага нам понадобится шаг прогноза и последнее наблюдение:

x_{t+1} = ar1 * x_{t} + ar2 * x_{t-1} + error

Это то, что мы повторяем 25 раз. Предполагается, что погрешность считается нормально распределенной, поэтому ожидается, что она равна нулю.

Мы делаем то же самое для «обратной передачи», подбора образца, но здесь нам нужны только наблюдения с момента времени. серия.

Больше завтра

forecast<-numeric(25)
backcast<-numeric(25)

forecast[1]<-0.134*xx[length(xx)]+0.48*xx[length(xx)-1]
forecast[2]<-0.134*forecast[1]+0.48*xx[length(xx)]
for(i in 3:25)
{
forecast[i]<-0.134*forecast[i-1]+0.48*forecast[i-2]
}

for(i in 1:25)
{
backcast[i]<-0.134*xx[length(xx)-i-1]+0.48*xx[length(xx)-i-2]
}

ts.plot(xx)
...