packages

library(pacman)
packages <- c("dplyr", "quantmod", "tidyverse", "ggthemes", "forecast", "tseries",
              "data.table", "tidyquant", "gridExtra", "rugarch", "kableExtra", 
              "tidyr", "goftest", "vars", "knitr", "FinTS", "aTSA", "timeSeries",
              "fGarch", "fBasics", "caTools", "PerformanceAnalytics", "zoo", 
              "timetk", "sjPlot", "xts", "readr")

pacman::p_load(packages)

Importing the data

library(readr)
factors <- read_csv("factors2022-23-exam (2).csv")

Report average Monthly returns

#selecting sample period 196307 to202110

sample_data<- head(factors,712)

#calculating the mkt return 

market_return <- sample_data$Mkt_RF + sample_data$RF

factors <- cbind.data.frame(sample_data, market_return)

Time series deviation

standard_deviations <- cbind(sd(factors$Mkt_RF),sd(factors$SMB), sd(factors$HML), sd(factors$RMW), sd(factors$CMA), sd(factors$RF), sd(factors$market_return))
names(standard_deviations) <- cbind("Mkt_RF","SMB","HML","RMW","CMA","RF","market_return")
table (standard_deviations)
## standard_deviations
## 0.267972115973355   2.0510543069673   2.2156806287361  2.97609678477868 
##                 1                 1                 1                 1 
##  3.02137839441839  4.47975953982533  4.49455202938133 
##                 1                 1                 1
#Sharpe ratio

Three factor model

library(ff)

# Specify the model
model<-lm(market_return ~ Mkt_RF + SMB + HML  ,data=factors)
summary(model)
## 
## Call:
## lm(formula = market_return ~ Mkt_RF + SMB + HML, data = factors)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.45463 -0.22643  0.01191  0.13194  0.95146 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.363365   0.010183  35.682   <2e-16 ***
## Mkt_RF       0.995842   0.002377 418.997   <2e-16 ***
## SMB         -0.001345   0.003458  -0.389    0.697    
## HML          0.004692   0.003446   1.362    0.174    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2672 on 708 degrees of freedom
## Multiple R-squared:  0.9965, Adjusted R-squared:  0.9964 
## F-statistic: 6.638e+04 on 3 and 708 DF,  p-value: < 2.2e-16

five factor model

library(ff)

# Specify the model
model<-lm(market_return ~ Mkt_RF + SMB + HML + CMA + RF ,data=factors)
summary(model)
## 
## Call:
## lm(formula = market_return ~ Mkt_RF + SMB + HML + CMA + RF, data = factors)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -2.147e-13 -1.080e-16  1.680e-16  5.190e-16  8.623e-14 
## 
## Coefficients:
##               Estimate Std. Error    t value Pr(>|t|)    
## (Intercept)  4.793e-15  5.608e-16  8.547e+00   <2e-16 ***
## Mkt_RF       1.000e+00  8.169e-17  1.224e+16   <2e-16 ***
## SMB          5.912e-17  1.134e-16  5.220e-01    0.602    
## HML         -1.061e-16  1.518e-16 -6.990e-01    0.485    
## CMA          5.766e-17  2.310e-16  2.500e-01    0.803    
## RF           1.000e+00  1.232e-15  8.120e+14   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.756e-15 on 706 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 3.722e+31 on 5 and 706 DF,  p-value: < 2.2e-16
stock.rets = cbind.data.frame(factors$market_return, factors$Mkt_RF, factors$SMB, factors$HML)/100
fit3 = lm(stock.rets$`factors$market_return` ~ stock.rets$`factors$Mkt_RF`+ stock.rets$`factors$SMB` + stock.rets$`factors$HML`, data=stock.rets)
sigF3 = as.matrix(var(cbind(stock.rets$`factors$Mkt_RF`, 
                            stock.rets$`factors$SMB`, 
                            stock.rets$`factors$HML`)))
rolling_betas = as.matrix(fit3$coefficients)
rolling_betas = rolling_betas[-1,]
rolling_betas
## stock.rets$`factors$Mkt_RF`    stock.rets$`factors$SMB` 
##                 0.995841752                -0.001345196 
##    stock.rets$`factors$HML` 
##                 0.004692126