从R函数中获取基于矩阵运算的xts对象

时间:2017-10-17 04:43:06

标签: r matrix xts performanceanalytics

我有以下R函数来计算给定证券的EWMA波动率:

EWMAvol = function(returns, lambda, rollwindow){
  EWMA.mat = matrix(NA, nrow = nrow(returns), ncol = ncol(returns))
  for (k in 1 : ncol(returns)){  
    for (j in rollwindow : nrow(returns)){
      td = returns
      data = as.matrix(td[(j - rollwindow + 1) : j, k])
      ewmaVar.mat = matrix()
      ewmaVar.mat[1] = 0
      for (i in 2 : rollwindow){
        ewmaVar.mat[i] = lambda * ewmaVar.mat[i-1]+ (1 - lambda) * data[i]^2
      }
      EWMA.mat[j, k] = sqrt(ewmaVar.mat[length(ewmaVar.mat)])
    }
  }
  return(EWMA.mat)
}

此功能所依赖的数据是:

> class(rets)
[1] "xts" "zoo"

来自Return.calculate()包中的PerformanceAnalytics函数。

我目前得到的输出是:

> class(EWMAvol)
[1] "matrix"

是否可以从我的代码中返回xtszoo个对象/数据? 另外,我想保留列名。我怎样才能做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:1)

Return.calculate函数返回xts,因此您可以使用index将最终返回值转换为xts

我会通过替换你函数的最后一行来实现它

return(EWMA.mat)

以下内容:

EWMA.xts = xts::xts(EWMA.mat, order.by = zoo::index(returns))
colnames(EWMA.xts) = colnames(returns) # to preserve column names
return(EWMA.xts)