R добавление запаздывающей переменной в модель сарима - PullRequest
0 голосов
/ 07 декабря 2018

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

temp = tempr-mean(tempr)
ded = ts.intersect(cmort, trend=time(cmort), temp, temp2=temp^2, part, partL4=lag(part,-4))
summary(fit <- lm(cmort~trend + temp + temp2 + part + partL4, data=ded))
pairs(ded) # easiest way is to do all of them
cor(ded)
AIC(fit)/nrow(ded) - log(2*pi)
BIC(fit)/nrow(ded) - log(2*pi)

Где temp - это центрированные значения температуры, temp2 - это квадратично-центрированная температура, part - уровень загрязнения частиц в воздухе, а partL4 - уровень содержания частиц за четыре недели.до.Эта регрессия работает как задумано и не дает мне никаких проблем.Однако проблемы возникают, когда я пытаюсь использовать модель аримы в этой новой коллекции переменных.Вот код, который я использую для использования модели arima в исходной коллекции переменных без новой переменной lag:

trend = time(cmort); temp = tempr - mean(tempr); temp2 = temp^2
fit = lm(cmort~trend + temp + temp2 + part, na.action=NULL)
acf2(resid(fit), 52) # implies AR2
sarima(cmort, 2,0,0, xreg=cbind(trend, temp, temp2, part) )

Эта модель также работает.Однако когда я пытаюсь ввести переменную с запаздыванием partL4, я получаю сообщение об ошибке:

Ошибка в stats :: arima (xdata, order = c (p, d, q), сезонный = список (order =c (P,: длины 'x' и 'xreg' не совпадают

Когда я проверяю длину cmort и новую коллекцию переменных, используемых в xreg, длины немного отклоняются. Однако, когдаЯ удаляю переменную partL4, как это было в исходном коде, длины совпадают.

Я действительно потерялся в том, как решить эту проблему и запустить модель arima для новой коллекции переменных. Единственная библиотека, которая нуждаетсянужно использовать:

library(astsa)

Любая помощь будет принята с благодарностью, так как я не уверен, как выровнять длины или есть другой лучший способ сделать это.

Вот мой полный код на данный момент (выдает ошибку):

library(astsa)
temp = tempr-mean(tempr)
temp2=temp^2
trend=time(cmort)
partly=lag(part, -4)

ded = ts.intersect(cmort, trend, temp, temp2, part, partL4, dframe=TRUE)

fit <- lm(cmort~trend + temp + temp2 + part + partL4, data=ded, na.action=NULL)
summary(fit)

attach(ded)
tsplot(resid(fit))
acf2(resid(fit)) #implies AR2


sarima(cmort, 2,0,0, xreg=cbind(trend, temp, temp2, part, partL4))
# pairs(ded) # easiest way is to do all of them
# cor(ded)
# AIC(fit)/nrow(ded) - log(2*pi)
# BIC(fit)/nrow(ded) - log(2*pi)
detach(ded)

1 Ответ

0 голосов
/ 07 декабря 2018

Я полагаю, что проблема связана с задержкой: вы меняете значения во времени, поэтому, когда вы вызываете cbind во всех временных рядах, вы получаете данные, которые выходят за пределы конечной даты для cmort и R жалуется.(Попробуйте cbind(trend, temp, temp2, part, partL4), и вы ясно увидите, что происходит).Если вы сбросите эти значения с partL4 до вызова sarima, это должно сработать:

partL4_new <- window(partL4, end = 1979.750)
sarima(cmort, 2,0,0, xreg=cbind(trend, temp, temp2, part, partL4_new))
...