Получение объекта xts из функции R, основанной на матричных операциях
У меня есть следующая функция 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"
Можно ли вернуть xts
или же zoo
объект / данные из моего кода? Кроме того, я хотел бы сохранить названия столбцов. Как я могу этого достичь?
Спасибо.
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)