R 计算时间序列的时间加权回报

R 计算时间序列的时间加权回报,r,finance,R,Finance,在R中,我有一个每月回报的xts对象,我希望为每个资产单独计算一个总的时间加权回报。以下是数据示例: SPY EFA 2005-02-28 0.0206 0.0371 2005-03-31 -0.0184 -0.0265 2005-04-29 -0.0189 -0.0163 例如,我希望计算SPY从2005年2月28日到2005年4月29日的时间加权回报。手动计算时,我会计算为[(1+.0206)*(1+-.01

在R中,我有一个每月回报的xts对象,我希望为每个资产单独计算一个总的时间加权回报。以下是数据示例:

                SPY      EFA   
 2005-02-28   0.0206   0.0371  
 2005-03-31  -0.0184  -0.0265  
 2005-04-29  -0.0189  -0.0163  

例如,我希望计算SPY从2005年2月28日到2005年4月29日的时间加权回报。手动计算时,我会计算为[(1+.0206)*(1+-.0184)*(1+.0189)-1]*100。我有100个向量的资产。我将如何在R中实现这一点?谢谢。

您可以使用匿名函数选择sapplyprod进行计算,如下所示:

df <- data.frame( spy = c(.0206,-0.0184,0.0189 ), efa = c(0.0371,-0.0265,-0.01631))

sapply(df,function(x)(prod(x+1)-1)*100)
手动乘以表达式可以得到:

((1 + .0206)*(1 + -.0184) * (1 + .0189) - 1) * 100 =  2.075538 (approx)
这和间谍的sapply结果一样

((1 + .0206)*(1 + -.0184) * (1 + .0189) - 1) * 100 =  2.075538 (approx)