我有一个向量并运行以下自相关函数,其中我获得了显着的滞后并创建了一个数据框,调整到滞后的最小长度。该示例生成随机数,因此可能需要重复代码,以便出现滞后变量。
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 ......)也可能会改变)
谢谢
答案 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)))