R 使用跳过的值循环…或者是否有一种矢量化的方法从每日数据获取每周std dev?
我有一个5天返回数据矩阵(数据集跳过周末)。我想用前52周的标准差创建一个新的矩阵。这需要我从5天返回数据(我称之为lrets5)中选择52个值,方法是获取当前值,然后向后跳过52周中的每一周的5个值 我想要一个每天52周标准偏差的新值 我可以使用seq()找到我想要计算标准偏差的行,但是我还没有找到一个好方法从lrets5中提取这些值来计算标准偏差 这是我的最新尝试:R 使用跳过的值循环…或者是否有一种矢量化的方法从每日数据获取每周std dev?,r,R,我有一个5天返回数据矩阵(数据集跳过周末)。我想用前52周的标准差创建一个新的矩阵。这需要我从5天返回数据(我称之为lrets5)中选择52个值,方法是获取当前值,然后向后跳过52周中的每一周的5个值 我想要一个每天52周标准偏差的新值 我可以使用seq()找到我想要计算标准偏差的行,但是我还没有找到一个好方法从lrets5中提取这些值来计算标准偏差 这是我的最新尝试: weeklysd <- matrix(nrow=(nrow(lrets5)),ncol=20) #pre alloca
weeklysd <- matrix(nrow=(nrow(lrets5)),ncol=20) #pre allocate matrix
for (i in 2:21){ #skip the date column
x <- numeric()
vec <- (as.numeric(lrets5[,i]))
for (i in 256:nrow(lrets5)){
v52 <- seq(from = i, to = (i-255), by = -5)
x <- as.numeric(sd(vec[v52]))
}
weeklysd[,(k-1)] <- x
}
所有工作日都包含在数据集中,即使是在假日,市场也会受到影响
关闭我只是对计算前52周收益率的标准差感兴趣,忽略了一个事实,即有时一周内没有5天的交易。我算出了!我使用seq()生成了所需的行号,并将值存储在列表中
weeklylist <- list()
x <- numeric()
for (i in 256:nrow(lrets5)){
x <- numeric()
x <- seq(from = i, to = (i-255), by = -5) #generates the 52 row numbers
weeklylist[[i]] <- x
}
#-----------------------
weeklyvol <- matrix(nrow=(nrow(lrets5)),ncol=20)
for (i in 2:21){
abc <- numeric()
for (j in 256:nrow(lrets5)){
x <- as.vector(weeklylist[[j]])
abc <- sd(lrets5[(x[1:52]),i])
weeklyvol[j,(i-1)] <- abc *sqrt(52) #multiply by sqrt(52) to get volatility
}
}
weeklylist如果要在看起来像矩阵的东西上使用聚合,它可能只是
aggregate(mtx[,-1],
cut(1:nrow(mtx), seq(0,nrow(mtx)+4,by=5), right=TRUE, include.lowest=TRUE),
sd)
使用您使用的数据列,我得到:
aggregate(mtx,
list(wk=cut(1:nrow(mtx), seq(0,nrow(mtx)+4,by=5), right=TRUE, include.lowest=TRUE)),
sd)
#--------
wk ALLIANZ BASF BAYER BMW COBANK
1 [0,5] 0.03812483 0.02985568 0.03189135 0.02692465 0.02204558
考虑<代码>周期的组合。从XTS包中应用和端点< /代码>函数。<代码> TpEp> <代码> >代码>索引=格式(日期,%u) 。或者,如果它们真的不是日期,那么只需%/%5
(除法模5),但我认为假期周会使其容易出错。(如果您发布一个适当复杂的数据集,您会得到更好的答案。@DWin,我刚刚添加了一些示例数据。我正在阅读xts包上的文档。
aggregate(mtx,
list(wk=cut(1:nrow(mtx), seq(0,nrow(mtx)+4,by=5), right=TRUE, include.lowest=TRUE)),
sd)
#--------
wk ALLIANZ BASF BAYER BMW COBANK
1 [0,5] 0.03812483 0.02985568 0.03189135 0.02692465 0.02204558