R中时间序列回归的效率:如何才能做得更好?

R中时间序列回归的效率:如何才能做得更好?,r,time-series,regression,R,Time Series,Regression,我正在研究时间序列,希望检查所有滞后差异的显著性(基本上是手工做dickey fuller测试),但这并不重要。我能做到,但它确实是机械的,必须有一种方法能更优雅地做到这一点。或者至少更有效。有什么想法吗 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=-

我正在研究时间序列,希望检查所有滞后差异的显著性(基本上是手工做dickey fuller测试),但这并不重要。我能做到,但它确实是机械的,必须有一种方法能更优雅地做到这一点。或者至少更有效。有什么想法吗

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)
y怎么样

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])
require(动物园)
delta.y.t该包将时间序列运算符的处理添加到R公式中:

dynlm
的接口和内部结构与
lm
非常相似,但是 与直接使用
lm
相比,当前
dynlm
提供了三个优势:1。 扩展公式处理,2。时间序列的保存 属性,3。工具变量回归(通过两阶段最小二乘法) 正方形)。对于指定拟拟合模型的公式,有 是否有其他功能可供使用,以方便 动力学规范(通过
d()
L()
)或线性/循环 模式(通过
trend()
seasure()
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)

您需要y的变化。尝试设置种子(4)
<代码>y=zoo(cumprod((1+rnorm(200,0.1,0.3)));绘图(y)
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)