为了计算R中时间序列的二次变化,我想对每个点求和当前点和最后x个点的日志返回的平方。
我知道您可以通过键入
来构建py的日志返回的平方diff(log(py))^2
但是,我如何建立一个时间序列,在最后5个点的每个点上求和,以构建二次变量?
答案 0 :(得分:3)
功能embed
与rowSums
相结合,可满足您的需求:
cbind(
AirPassengers,
sum5=c(rep(NA, 4), rowSums(embed(AirPassengers, 5)))
)
AirPassengers sum5
Jan 1949 112 NA
Feb 1949 118 NA
Mar 1949 132 NA
Apr 1949 129 NA
May 1949 121 612
Jun 1949 135 635
Jul 1949 148 665
...
embed
做的是创建一个具有初始向量的滞后值的矩阵:
embed(AirPassengers, 5)
[,1] [,2] [,3] [,4] [,5]
[1,] 121 129 132 118 112
[2,] 135 121 129 132 118
[3,] 148 135 121 129 132
[4,] 148 148 135 121 129
[5,] 136 148 148 135 121
[6,] 119 136 148 148 135
[7,] 104 119 136 148 148
[8,] 118 104 119 136 148
...
你可以在这个矩阵的行上使用rowSums
或任何其他操作。