从基于矩阵运算的R函数中获取xts对象
Obtaining xts object from R function that is based on matrix operations
我有以下 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"
来自 PerformanceAnalytics
包的 Return.calculate()
函数。
我目前得到的输出是:
> class(EWMAvol)
[1] "matrix"
是否可以从我的代码中 return xts
或 zoo
object/data?
另外,我想保留列名。我怎样才能做到这一点?
谢谢。
Return.calculate
函数 return 是一个 xts
,因此您可以使用它的 index
将最终的 return 值转换为 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)
我有以下 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"
来自 PerformanceAnalytics
包的 Return.calculate()
函数。
我目前得到的输出是:
> class(EWMAvol)
[1] "matrix"
是否可以从我的代码中 return xts
或 zoo
object/data?
另外,我想保留列名。我怎样才能做到这一点?
谢谢。
Return.calculate
函数 return 是一个 xts
,因此您可以使用它的 index
将最终的 return 值转换为 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)