2017-10-17 17 views
1

J'ai la fonction R suivante qui calcule la volatilité EWMA des titres donnés:XTS Obtention objet de la fonction R qui est basée sur les opérations de la matrice

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) 
} 

Les données que cette fonction repose sur est:

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

qui provient de la fonction Return.calculate() du package PerformanceAnalytics.

La sortie que je reçois actuellement:

> class(EWMAvol) 
[1] "matrix" 

Est-il possible de retourner un xts ou zoo objet/données à partir de mon code? Aussi, je voudrais garder les noms des colonnes. Comment puis-je y parvenir?

Merci.

Répondre

1

La fonction Return.calculate retourne un xts, de sorte que vous pouvez utiliser le index de ce pour convertir votre valeur de retour finale à un xts.

Je le ferais en remplaçant la dernière ligne de votre fonction

return(EWMA.mat) 

ce qui suit:

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

Merci, +1. Maintenant, un problème mineur - comment puis-je conserver les noms de colonnes? – AK88

+1

C'est facile! Je vais éditer ma réponse – lebelinoz

+0

Great! Vous avez suivi votre activité ici puisque vous êtes un Quant. Juste curieux, avez-vous fini de développer vos modèles de facteurs? – AK88