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