2017-06-04 5 views
1

Je me demandais si quelqu'un pouvait me guider à travers la fonction rollapply dans R. Je veux conduire une régression glissante d'un an avec des facteurs fama-français. L'ensemble de données est préparé dans Excel et contient des données hebdomadaires de 2011-2017. Par conséquent, la fenêtre de temps est définie sur 52 semaines. Je veux calculer des coefficients beta glissants de 1 an pour la période 2012-2017, donc la fenêtre de temps passera de [1:52] à [2:53] à partir de la première semaine de 2011. J'ai plusieurs facteurs de prix, ceci signifie que je dois exécuter une régression linéaire multiple.Calcul des coefficients bêta de Fama-French spécifiques d'une entreprise à partir d'une régression glissante d'un an

C'est ce que je l'ai essayé jusqu'à présent:

Rollingregression <- read_excel("C:/Users/neri_/Desktop/Fama French Regression.xlsx", col_names = TRUE, sheet = 1) 
 
Rollingregression <- xts(Rollingregression[,2:7],order.by = Rollingregression[,1]) 
 
coeffs <- rollapply(Rollingregression, width=52, FUN = function(Z) coef(lm(Rollingregression$`Excess Return` ~ Rollingregression$OBX + Rollingregression$SMB + Rollingregression$HML + Rollingregression$PR1YR + Rollingregression$LIQ, data = as.data.frame(Z))), by.column=FALSE, align="right")

Cependant, je n'obtenir les 5 ans bêtas roulement hebdomadaire, mais au lieu de la régression sur toute la période:

(Intercept)   Rollingregression$OBX Rollingregression$SMB 
 
    [1,] 0.0001511391    0.7529416   -0.007408397 
 
    [2,] 0.0001511391    0.7529416   -0.007408397 
 
    [3,] 0.0001511391    0.7529416   -0.007408397 
 
    [4,] 0.0001511391    0.7529416   -0.007408397 
 
    [5,] 0.0001511391    0.7529416   -0.007408397

La sortie me donne également les mêmes bêtas pour les autres facteurs fama-français tout au long de la période.

2011-01-04           
 
2011-01-11           
 
2011-01-18           
 
2011-01-25           
 
2011-02-01

Je pensais que le code XTS j'ai fait veilleraient à ce que R compris que tje ensemble de données est une série chronologique.

J'ai aussi essayé ceci:

coeffs <- (rollapply(zoo(Rollingregression), width=52, FUN = function(Z){t = lm(Rollingregression$`Excess Return` ~ Rollingregression$OBX + Rollingregression$SMB + Rollingregression$HML + Rollingregression$PR1YR + Rollingregression$LIQ, data = as.data.frame(Z), model = TRUE); return(t$coef)}, by.column = FALSE, align = "right"))

me donne toujours la même sortie. Je suis assez nouveau avec R, donc toute aide est très appréciée.

Merci!

+0

Jetez un oeil à cette réponse: https://stackoverflow.com/a/23163104/7357438 – Lstat

Répondre

1

essai en remplaçant la fonction (Z) avec la fonction (Rollingregression) ...

coeffs < - rollapply (Rollingregression, largeur = 52, FUN = function (Rollingregression) coef (lm (Rollingregression Excess Return $ ~ $ Rollingregression OBX + Rollingregression $ SMB + Rollingregression $ HML + Rollingregression $ PR1YR + Rollingregression $ LIQ, données = as.data.frame (Z))), par.colonne = FAUX, align = "right")

(réf. Eric Zivot