给定数字向量x
和滞后t
,我需要并且有效地生成'自相关'矩阵,其中每行是x(i),x(i - 1) ,x(i - 2),...,x(i - t)。例如:
set.seed(1)
x = rnorm(6)
[1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 -0.8204684
使用x和t = 3:
M = autoreg.format(x, 3)
x x1 x2 x3
[1,] 1.5952808 -0.6264538 0.1836433 -0.8356286
[2,] 0.3295078 0.1836433 -0.8356286 1.5952808
[3,] -0.8204684 -0.8356286 1.5952808 0.3295078
目前我使用的是以下代码,效果很好。我只是想知道是否有更快或更简洁的方法:
autoreg.format = function(x, t) {
y = tail(x, -t)
x = matrix(t(sapply(head(1:length(x), -t), function(v){x[seq(v, length = t)]})), ncol = t)
data = cbind(y, x)
colnames(data) = c("x", paste("x", 1:t, sep = ""))
data
}
感谢您的任何见解!
答案 0 :(得分:2)
t = 3
ac <- embed(x,t+1)
会做的伎俩。但它的顺序与autoreg.format
函数的顺序不同。您可以标记列,如下所示:
colnames(ac) <- paste0("X",t:0)