Testing predictability of stock returns using Fama-French approach 2018-04-23T13:16:05+00:00

This is a mimic of an approach of Fama and French. They tested whether we can predict stock returns based on past data. Fama (1970) wrote: "A market in which prices always “fully reflect” available information is called “efficient”". Similarly, Jensen (1978) wrote: "A market is efficient with respect to information set X if it is impossible to make economic profitsby trading on the basis of information set X" .

This is just a replication of those and related papers where different researches proved that and maintained that efficient market hypothesis works.

# Hansen–Jagannathan bound

Hansen–Jagannathan bound is a theorem in financial economics that says that the ratio of the standard deviation of a stochastic discount factor to its mean exceeds the Sharpe ratio attained by any portfolio. This result applies, among others, the Cauchy–Schwarz inequality.

This is based on the paper of Fama and French (1993). On related research topics, researchers found that if arbitrage opportunity exists, it won't exist for long (because sooner or later everyone would start exploiting it).

The Hansen-Jagannathan bound is calculated by first choosing (a class of) mt+1. Then we estimate​​ E(mt+1),​​ Var(mt+1),​​ ERt+1​​ and​​ Cov(Rt+1).

Then we find the Hansen-Jagannathan bound by:

Varmt+1β'CovRt+1β= ιJ-E(mt+1)ERt+1'Cov-1Rt+1ιJ-E(mt+1)ERt+1

Where:

• J … number of asset portfolios. In our case J=5 because we took 4 industry portfolios and SML (small minus big factor)

• mt+1… is the stochastic discount factor. It has one value every period so its size is 1x360

• Rt+1… matrix with returns (5 asset portfolios times 360 time periods; 5x360)

• CovRt+1… Variance-covariance matrix of returns (size 5x5)

We chose values of​​ E(mt+1)​​ to be between 0 and 1.5. ​​ We took a step size of 0.001 (so we made 1500 steps). The other values were calculated in our sample (we took 4 industry portfolios, namely consumer nondurables, consumer durables, manufacturing and energy portfolio and Fama-French SML factor). We tested that with r studio and we were interested in mean stochastic discount factor and standard deviation of the stochastic discount factor. We plot the results and got the following graph:

Next, we also drew a stohastic discount factor of CAPM model. We got an expectation of​​ 0.8044699​​ and standard deviation of​​ 0.0614768. We also calculated estimators of the Fama-French three factor model and also expectation (1.182032)​​ and standard deviation (0.3550003). Variance of the stochastic discount factor must be above the Hansen-Jagannathan bound. We draw the results on already plotted graph;

We can see that stochastic discount factor based on CAPM (mt+1CAPM​​ ) does not satisfy the equation​​

Varmt+1CAPMβ'CovRt+1β= ιJ-E(mt+1CAPM)ERt+1'Cov-1Rt+1ιJ-E(mt+1CAPM)ERt+1

Because

​​ Varmt+1CAPM=0.0038<ιJ-E(mt+1CAPM)ERt+1'Cov-1Rt+1ιJ-E(mt+1CAPM)ERt+1=0.09751207

Stohastic discount factor based on Fama and French three factor model (mt+1FF)​​ on the other hand satisfies the equation. We get

Varmt+1FF= 0.1260β'CovRt+1β= ιJ-Emt+1FFERt+1'Cov-1Rt+1ιJ-Emt+1FFERt+1=0.1023519

As a result we conclude stochastic discount factor based on Fama-French three factor model​​ satisfies Hansen-Jagannathan and stochastic discount factor based on CAPM model does not satisfy Hansen-Jagannathan.​​

# Testing predictability of stock returns

Here we focus on past returns. We used the same portfolios as before, namely consumer nondurables, consumer durables, manufacturing and energy portfolio. We also used SML (small minus big) and HML (high minus low) Fama-French factors. While using monthly data, we used one, two, three and four month past returns. We are testing return predictability in​​ the asset returns using past returns:

Model:

Ri,t+1= α+ βRi,t+ ϵi,t+1

H0: No return predictability;​​ β=0

H1: there is return predictability when using past returns;​​ β0

In order to test our hypothesis we do a regression of current return on past returns. We do the following​​ regressions:

Ri,t​​ is return of portfolio​​ i​​ in month t. The past return over the last​​ k​​ months is​​ Ri,t-1km. It holds that:

1+Ri,t-1km=1+Ri,t-1*1+Ri,t-2**(1+Ri,t-k). i is the portfolio, so i includes numbers​​ i={1,2,3,4,5,6}​​ (5 and 6 are for SML and HML)

• 1+Ri,t= α+ β1+Ri,t-1+ ϵi,t ​​​​ for t=2,3,…,360. And​​ E(ϵi,t11+Ri,t-1)=0 t,i

• 1+Ri,t= α+ β1+Ri,t-12m+ ϵi,t ​​​​ for t=3,4,…,360. And​​ E(ϵi,t11+Ri,t-1m)=0 t,i

• 1+Ri,t= α+ β1+Ri,t-13m+ ϵi,t ​​​​ for t=4,5,…,360. And​​ E(ϵi,t11+Ri,t-13m)=0 t,i

• 1+Ri,t= α+ β1+Ri,t-14m+ ϵi,t ​​​​ for t=5,6,…,360. And​​ E(ϵi,t11+Ri,t-14m)=0 t,i

Assumptions (beside already stated) are: time series​​ Rt​​ satisfies stationarity and ergodicity.

When we are regressing only a return on previous month we must used heteroscedasticity consistent estimator (Eicker–Huber–White estimator) and Newey-West estimator. We obtain the following results:

Table 1: Testing predictability of asset returns

 ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​​​ returns portfolio 1+Ri,t-1 1+Ri,t-12m 1+Ri,t-13m 1+Ri,t-14m Consumer nondurables portfolio .0858332(.0596907) .4940756(.02552) .316218 (.0254519) .2262744 (.0228671) Consumer durables portfolio .1215562 (.0667638) .5016395 (.0295277) .3091223(.0278729) .2352102 (.0210257) Manufacturing portfolio .0553865 (.0660072) .4962832(.0293641) .3152116 (.0319924) .2360745 (.0271636) Energy portfolio -.0279207 (.0650193) .492861(.0251402) .330025(.0262667) .2381039 (.0248111) HML portfolio ​​ .1372222(.0829833) .4921031(.0209439) .3171294 (.0222609) ​​ .2379676(.0214832) SMB portfolio -.0378716 (.1203001) .5124551(.0382973) .349654 (.0331835) .2470505 ​​ (.0410208)

Results of the regression of testing predictability of returns. The numbers stated are coeficient β and numbers in brackets are t-statistics that are testing H0:​​ β=0. H0​​ is rejected if absolute value of t-statistic is higher than 1.96.

We can that for all observed cases (for all observed portfolios in our period, including all sub periods) it holds that current return does not depend on past returns (because we cannot reject the null hypothesis). That means that we confirm the hypothesis of non-predictability​​ of stock returns for all six portfolios. We cannot explain current return based on past returns.

R studio code:

 Calculating Hansen-Jagannathan bound and CAPM and Fama-French three factor model SDFs. Also plotting graphs; data1 <-​​ read.table(“fama&french_monthly.txt", header=TRUE, quote="\"")data2 <- read.table(“monthly2.txt", quote="\"")install.packages('car')# require('car')k = data2[,2:6]b = data1[,3]# Getting the right data in data frame (called matrika).matrika <- kmatrika[,5] <- b# Calculate covariancekov <- cov(matrika[1:360,1:5])# Vector of ones.one <- c(1, 1, 1, 1,1)vektor = matrix(1,150,1)a1 = mean(matrika[1: nrow(matrika),1])a2 = mean(matrika[1: nrow(matrika),2])a3 = mean(matrika[1: nrow(matrika),3])a4 =​​ mean(matrika[1: nrow(matrika),4])a5 <- mean(matrika[1: nrow(matrika),5])# Create vector of means.sredina <- c(a1, a2, a3, a4,a5)i <- 1# Below we get vector of deviations like in Hansen-Jagannathan.while (i<=1500){ ​​​​ vektor[i] <- t(one-i*0.001*sredina)%*%solve(kov)%*%(one-i*0.001*sredina) ​​​​ vektor[i] <- sqrt(vektor[i]) ​​​​ i <- i + 1}vec2 = seq(from=0, to=1.499, by=0.001)  # We plot everythingplot(vec2,vektor,col="red",xlab="mean ",ylab="Standard deviation")legend("topright", "Hansen-Jagannathan​​ bound", ​​ ​​ ​​ ​​ ​​ ​​​​ pch = 15, col = 'red', title = "Legend")   plot(vec2,vektor,col="red", xlim=c(0,1.5), ylim=c(0,0.5),xlab="mean ",ylab="Standard deviation") # discount factors were obtained from elsewhere (see Stata code below).# CAPM discount factorb0 <-.794951​​ b1 <- ​​ .0136277​​ point1 <- b0 + b1 * homework[,2]povprecje <-mean(point1)deviation <- sd(point1)points(povprecje, deviation,col="blue", ​​ pch = 19) #Fama-French three factor modelbeta0 <- 1.177317 ​​ beta1 <- -.026906 ​​ beta2 <- .1154602​​ beta3 <- ​​ .0560836  ​​​​ threefactor <- beta0 + beta1 * data1 [,2] + beta2 * data1 [,3]+beta3 * data1 [,4]povpt <- mean(threefactor)dev <- sd(threefactor)points(povpt, dev,col="green", ​​ pch = 19)legend("topright", c("Hansen-Jagannathan bound", ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​​​  ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​​​ "SDF by CAPM","SDF by Fama-French 3 factor"),pch = c(15,19,19), col = c('red',"blue","green"), title = "Legend")

Stata code:

 Testing predictability of stock returns;Here we edit the data and apply the aforementioned equations to test​​ predictability;*opisi datause "\\studfiles.campus.uvt.nl\files\home\home07\u1268030\empirical finance\included\saved.dta", clear tsset year** get percentage returns.g nodur1 = 1+ nodur/100g durb1 = 1 + durbl/100g manuf1 = 1 + manuf/100g enrgy1 = 1​​ +enrgy/100g mkt_rf1 = 1 + mkt_rf/100g SMB1 = 1 + SMB/100g HML1 = 1 + HML/100 ** Set up equations with lags.g rSMB2m = SMB1 * l.SMB1g rSMB3m = SMB1* l.SMB1 * l.l.SMB1g rSMB4m = SMB1* l.SMB1 * l.l.SMB1 * l.l.l.SMB1 g rnodur2m = nodur1 * l.nodur1g​​ rnodur3m = nodur1 * l.nodur1 * l.l.nodur1g rnodur4m = nodur1 * l.nodur1 * l.l.nodur1 * l.l.l.nodur1  g rdurb2m = durb1 * l.durb1g rdurb3m = durb1 * l.durb1 * l.l.durb1g rdurb4m = durb1 * l.durb1 * l.l.durb1 * l.l.l.durb1 g rmanuf2m = manuf1 * l.manuf1g rmanuf3m = manuf1 * l.manuf1 * l.l.manuf1g rmanuf4m = manuf1 * l.manuf1 * l.l.manuf1 * l.l.l.manuf1 g rmkr_rf2m = mkt_rf1 * l.mkt_rf1​​ g rmkt_rf3m = mkt_rf1 * l.mkt_rf1 * l.l.mkt_rf1g rmkt_rf4m = mkt_rf1 * l.mkt_rf1 * l.l.mkt_rf1 * l.l.l.mkt_rf1 g rHML2m = HML1 * l.HML1g rHML3m = HML1 * l.HML1 * l.l.HML1g rHML4m = HML1 * l.HML1 * l.l.HML1 * l.l.l.HML1 g renrgy2m = enrgy1 * l.enrgy1g renrgy3m = enrgy1 * l.enrgy1 * l.l.enrgy1g renrgy4m = enrgy1 * l.enrgy1 * l.l.enrgy1 * l.l.l.enrgy1 ** Regress and use estimators to get relevant statistics.reg nodur1 l.nodur1, robust  newey nodur1 l.nodur1, lag(0)​​ newey nodur1 rnodur2m, lag(1)newey nodur1 rnodur3m, lag(2)newey nodur1 rnodur4m, lag(3)  reg durb1 l.durb1, robust  newey durb1 l.durb1, lag(0)​​ newey durb1 rdurb2m, lag(1)newey durb1 rdurb3m, lag(2)newey durb1 rdurb4m, lag(3)  reg manuf1 l.manuf1, robust  newey manuf1 l.manuf1, lag(0)​​ newey manuf1 rmanuf2m, lag(1)newey manuf1 rmanuf3m, lag(2)newey manuf1 rmanuf4m, lag(3)  reg SMB1 l.SMB1,​​ robust  newey SMB1 l.SMB1, lag(0)​​ newey SMB1 rSMB2m, lag(1)newey SMB1 rSMB3m, lag(2)newey SMB1 rSMB4m, lag(3)  reg HML1 l.HML1, robust  newey HML1 l.HML1, lag(0)​​ newey HML1 rHML2m, lag(1)newey HML1 rHML3m, lag(2)newey HML1 rHML4m, lag(3)   reg​​ enrgy1 l.enrgy1, robust  newey enrgy1 l.enrgy1, lag(0)​​ newey enrgy1 renrgy2m, lag(1)newey enrgy1 renrgy3m, lag(2)newey enrgy1 renrgy4m, lag(3)

 Testing validity of CAPM, estimating SDFs and testing hypothesis of the SDFs are jointly significant;   ** CAPM and 3 factor model estimations** const = alfa, std error is test statistic** CAPM** Here we get CAPM estimatesg ndrf = nodur - rfreg ndrf mkt_rf g drf = durbl - rfreg drf mkt_rf g manufrf = manuf - rfreg manufrf mkt_rf g enrgyrf = enrgy -​​ rfreg enrgyrf mkt_rf  ** Three-factor model:** Here we get three-factor model estimates reg ndrf mkt_rf SMB HMLreg drf mkt_rf SMB HMLreg manufrf mkt_rf SMB HMLreg enrgyrf mkt_rf SMB HML     g drf = durbl - rfreg drf mkt_rf   gmm ( ({b0} + {b1}*mkt_rf)*nodur - 1 ) ​​ ( ({b0} + {b1}*mkt_rf)*durbl - 1 ) ( ({b0} + {b1}*mkt_rf)*manuf - 1 ) ( ({b0} + {b1}*mkt_rf)*enrgy - 1 ) ( ({b0} + {b1}*mkt_rf)*SMB - 1 ) ​​ , winitial(identity) estat overidtest [b0]_cons [b1]_cons gmm ( ({b0} + {b1}*mkt_rf + {b2}*SMB​​ + {b3}*HML)*nodur - 1 ) ​​ ( ({b0} + {b1}*mkt_rf + {b2}*SMB + {b3}*HML)*durbl - 1 ) ( ({b0} + {b1}*mkt_rf + {b2}*SMB + {b3}*HML)*manuf - 1 ) ( ({b0} + {b1}*mkt_rf + {b2}*SMB + {b3}*HML)*enrgy - 1 ) (({b0} + {b1}*mkt_rf + {b2}*SMB + {b3}*HML)*SMB - 1 ) , winitial(identity) ​​ estat overidtest [b0]_cons [b1]_cons [b2]_cons [b3]_cons

error: Content is protected !!