用于创建等长滞后数据帧的一般表达式

时间:2014-08-10 03:01:42

标签: r

我有一个向量并运行以下自相关函数,其中我获得了显着的滞后并创建了一个数据框,调整到滞后的最小长度。该示例生成随机数,因此可能需要重复代码,以便出现滞后变量。

   L library(quantmod)

x <- filter(rnorm(100), filter=rep(1,3), circular=TRUE)   

a<-acf(x)
b<-a[[1]]   
c<-(b[2:length(b)])
posssignificance_level<-qnorm((1+0.95)/2)/sqrt(sum(!is.na(x)))
negsignificance_level<- -posssignificance_level
poscorr<-which(posssignificance_level<c)
negcorr<-which(negsignificance_level>c)
L<-(sort(c(poscorr,negcorr)))

#[1] 1  2  8  9 10


#Create lagged versions of x 
W1 <- na.omit (Lag(x, L[1]))
W2 <- na.omit (Lag(x, L[2]))
W3 <- na.omit (Lag(x, L[3]))
W4 <- na.omit (Lag(x, L[4]))
W5 <- na.omit (Lag(x, L[5]))


#make all laged versions equal in length 
shortest <-min(length(W1),length(W2),length(W3),length(W4),length(W5))
W1<-tail(W1, shortest)
W2<-tail(W2, shortest)
W3<-tail(W3, shortest)
W4<-tail(W4, shortest)
W5<-tail(W5, shortest)

#create data frame
df<-data.frame(W1,W2,W3,W4,W5)

是否有更高效,也许是一般的方法#Create滞后版本的x和#make所有laged版本的长度相等,以创建数据框,前提是如果x数字被更改,L的长度也可能会改变(对象的数量(W1,W2 ......)也可能会改变)

谢谢

1 个答案:

答案 0 :(得分:1)

这是一种在不需要知道L长度的情况下执行您所做的事情的方法。在您的示例中,所有滞后版本的长度相等(100个观察值),但如果不是这样,则应该有效:

# create lagged version
Wlist <- lapply(seq_along(L), function(ii) na.omit(Lag(x, L[ii])))
# find shortest
shortest <- Reduce(min, lapply(Wlist, function(x) length(x)))
# create data frame and make all lagged versions equal in length
data.frame(do.call(cbind, lapply(Wlist, tail, shortest)))