给定一个季度收益矩阵,其中的列代表不同股票的收益,我如何应用一个函数来返回一个具有年收益的新矩阵?
由于我是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行。
答案 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)