从矩阵将季度回报转换为年度回报

时间:2019-08-05 07:38:34

标签: r

给定一个季度收益矩阵,其中的列代表不同股票的收益,我如何应用一个函数来返回一个具有年收益的新矩阵?

由于我是R的新手,所以我真的不知道从哪里开始解决这个问题。

# Quarterly returns for stock A and B 
a <- c(-0.2, 0.02, 0.06, 0.041)
b <- c(0.18, -0.04, 0.06, 0.07)
ab <- cbind(a,b)

使用以下公式:

prod(1 + x) - 1

我需要输出一个矩阵,其中包含每只股票的年收益。

我每年需要一个行条目。因此,如果我观察了8个季度(2年),则矩阵将有2行。

2 个答案:

答案 0 :(得分:3)

您可以这样做:

a <- c(-0.2, 0.02, 0.06, 0.041, 0.18, -0.04, 0.06, 0.07)
b <- c(0.18, -0.04, 0.06, 0.07, -0.2, 0.02, 0.06, 0.041)
ab <- cbind(a,b)

yret <- function(x) apply(matrix(1+x, nrow=4), 2, prod) - 1
apply(ab, 2, yret)
# > apply(ab, 2, yret)
#                a           b
# [1,] -0.09957664  0.28482176
# [2,]  0.28482176 -0.09957664

或如Roland所评论:

apply(array(ab, c(4, nrow(ab)/4, ncol(ab))) + 1, 2:3, prod) - 1 # or
apply(array(ab+1, c(4, nrow(ab)/4, ncol(ab))), 2:3, prod) - 1

以保存列名:

apply(array(ab+1, c(4, nrow(ab)/4, ncol(ab)), dimnames=list(NULL, NULL, colnames(ab))), 2:3, prod) - 1

答案 1 :(得分:-2)

apply(ab,2,function(x)prod(1 + x)-1)