GLM с авторегрессионным членом для коррекции последовательной корреляции

StackOverflow https://stackoverflow.com/questions/1899243

Вопрос

У меня есть стационарный временной ряд, к которому я хочу подогнать линейную модель с авторегрессионным членом для коррекции последовательной корреляции, т. е.используя формулу At = c1*Bt + c2*Ct + ut, где ut = r * ut-1 + et

(ut - это термин AR (1) для коррекции последовательной корреляции в терминах ошибок)

Кто-нибудь знает, что использовать в R для моделирования этого?

Спасибо Карл

Это было полезно?

Решение

В ГЛММарп упаковка подойдет для этих моделей.Если вам просто нужна линейная модель с гауссовскими ошибками, вы можете сделать это с помощью arima() функция , в которой ковариаты задаются с помощью xreg аргумент.

Другие советы

Есть несколько способов сделать это в R.Вот два примера использования Набор данных временных рядов "Ремни безопасности" в пакете datasets это приходит вместе с R.

В arima() функция поставляется в пакете: статистика, которая входит в комплект R.Функция принимает аргумент вида order=c(p, d, q) где вы можете указать порядок авторегрессионного, интегрированного и скользящего среднего компонента.В своем вопросе вы предполагаете, что хотите создать модель AR (1) для исправления автокорреляции первого порядка в ошибках, и это все.Мы можем сделать это с помощью следующей команды:

arima(Seatbelts[,"drivers"], order=c(1,0,0),
      xreg=Seatbelts[,c("kms", "PetrolPrice", "law")])

Значение для order указывает, что нам нужна модель AR (1).Компонентом xreg должен быть ряд других Xs, которые мы хотим добавить как часть регрессии.Выходные данные немного похожи на выходные данные summary.lm() повернулся на бок.

Другой альтернативный процесс, который может быть более знаком с тем, как вы подбираете регрессионные модели, заключается в использовании gls() в пакет nlme.Следующий код превращает объект временных рядов ремня безопасности в фрейм данных, а затем извлекает и добавляет новый столбец (t) это просто счетчик в отсортированном объекте временного ряда:

Seatbelts.df <- data.frame(Seatbelts)
Seatbelts.df$t <- 1:(dim(Seatbelts.df)[1])

Две строки выше только придают данным форму.С тех пор как arima() функция предназначена для временных рядов, она может легче считывать объекты временных рядов.Чтобы подогнать модель под nlme, затем вы должны запустить:

library(nlme)
m <- gls(drivers ~ kms + PetrolPrice + law,
         data=Seatbelts.df,
         correlation=corARMA(p=1, q=0, form=~t))
summary(m)

Строка, начинающаяся с "корреляции", - это способ передачи структуры корреляции ARMA в GLS.Результаты будут не совсем одинаковыми, потому что arima() использует максимальное правдоподобие для оценки моделей и gls() по умолчанию используется ограниченное максимальное правдоподобие.Если вы добавите method="ML" на призыв к gls() вы получите те же оценки, что и с помощью функции ARIMA, приведенной выше.

Какова ваша функция ссылки?

То, как вы это описываете, звучит как базовая линейная регрессия с автокоррелированными ошибками.В этом случае одним из вариантов является использование lm чтобы получить согласованную оценку ваших коэффициентов и использовать Стандартные ошибки HAC Ньюи-Уэста.

Я не уверен, что это лучший ответ для GLM в более общем плане.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top