Эффективность регрессии временных рядов в R: Как я могу сделать это лучше? - PullRequest
1 голос
/ 26 января 2012

Я работаю над временными рядами и хочу проверить значимость всех запаздывающих различий (и, по сути, делаю тест на переполнение от руки), но это не важно.Я могу сделать это, но это действительно механично, и должен быть способ сделать это более элегантно.Или, по крайней мере, более эффективно.Любые идеи?

y <- log.real.gdp.ts

delta.y.t <- diff(y,differences=1)
lag.y <- lag(y, -1)
L1Dy <- lag(delta.y.t, k=-1)
L2Dy <- lag(delta.y.t, k=-2)    
L3Dy <- lag(delta.y.t, k=-3)    
L4Dy <- lag(delta.y.t, k=-4)    
L5Dy <- lag(delta.y.t, k=-5)    
L6Dy <- lag(delta.y.t, k=-6)    
L7Dy <- lag(delta.y.t, k=-7)    
L8Dy <- lag(delta.y.t, k=-8)    
L9Dy <- lag(delta.y.t, k=-9)    
L10Dy <- lag(delta.y.t, k=-10)  
L11Dy <- lag(delta.y.t, k=-11)  
L12Dy <- lag(delta.y.t, k=-12)  

d = ts.union(delta.y.t, lag.y, L1Dy, L2Dy, L3Dy, L4Dy, L5Dy, L6Dy, L7Dy, L8Dy, L9Dy, L10Dy, L11Dy, L12Dy)               ## takes care of NA's

lm.model.III <- lm(delta.y.t~ lag.y + time(lag.y) + L1Dy + L2Dy + L3Dy + L4Dy + L5Dy + L6Dy + L7Dy + L8Dy + L9Dy + L10Dy + L11Dy + L12Dy, data=d)

Мне бы очень хотелось какой-то цикл, где я могу генерировать запаздывающие различия 1: n, а затем какой-нибудь способ вставить все n в мою линейную модель, например

 lm.model.III <- lm(delta.y.t ~ lag.y + time(lag.y) + lagged.diffs.mts)

Ответы [ 2 ]

3 голосов
/ 13 ноября 2012

как насчет

require(zoo)

delta.y.t <- diff(y,differences=1)
lag.y <- lag(y, -1)
L1Dy <- lag(delta.y.t, -(0:12), na.pad=T)

#for any regression you can then access the number of lags you want:
# 0 lag and na.pad=T are crucial

lm(lag.y ~ L1Dy[,1:5])

Надеюсь, это поможет

-Крис

0 голосов
/ 21 декабря 2013

Пакет dynlm добавляет обработку операторов временных рядов в формулы R:

Интерфейс и внутренние компоненты dynlm очень похожи на lm, но в настоящее время dynlm предлагает три преимущества по сравнению с прямым использованием lm: 1. расширенная обработка формул, 2. сохранение временных рядов атрибуты, 3. регрессия инструментальных переменных (через двухэтапный минимум квадраты). Для определения формулы модели, которая будет установлена, есть доступны дополнительные функции, которые позволяют спецификация динамики (через d() и L()) или линейная / циклическая шаблоны (через trend(), season() и harmon()). Все новые формулы функции требуют, чтобы их аргументы были объектами временных рядов (т.е. "ts" или "zoo").

Вот пример:

library(foreign)
library(zoo)
library(dynlm)

dfKlein = read.dta('http://www.stata-press.com/data/r12/klein.dta')
summary(dfKlein)

zooKlein = as.zoo(dfKlein, order.by = dfKlein$year)
lmKlein = dynlm(consump ~ L(profits, 1) + profits + wagetot, 
                data = zooKlein)
summary(lmKlein)

Обратите внимание, в частности, что он позволяет указывать вектор лагов в объекте формулы, например y ~ L(y, 1:4).

...