Asset Pricing [5c : Fama and French 3 Factor Model]

The point of Fama and French’s time series regression is not to explain stock returns as much as assessing  estimated intercept terms as well as linking parameter estimates to average excess portfolio returns in a positive and linear fashion. Since it is unintuitive (and perhaps unwieldy) to plot average excess returns against respective parameter estimates when there are 4 dimensions (expected return ~ mkt + smb + hml), it is useful to visualise model fit by plotting actual average excess returns against model predictions across the 25 sorted FF portfolios. The vertical axis is still the average return of the test assets,but instead of plotting these against estimated parameters as before,the horizontal axis reflect predicted values from the CAPM and FF models. The points should lie on the 45 degree line if the model is correct. The vertical distance between this line and plot points reflects the discrepancies between actual data and model projections.

The code for the cross sectional regressions follows.

###############################################################
#Cross Section
###############################################################
 
#[Size perspective]
SZ.focus <- matrix(unlist(SZ.BM$size.port.mean),ncol=1) - mean(rf.ret) 
######capm
    SZ.capm.b <- matrix(unlist(s.betas),ncol=1)
    SZ.capm.cross <- lm(SZ.focus~SZ.capm.b)
    SZ.capm.alpha <- as.matrix(coef(SZ.capm.cross)[1])
    SZ.capm.beta <- as.matrix(coef(SZ.capm.cross)[2])
    SZ.capm.fitted <- fitted(SZ.capm.cross)
    SZ.capm.rsq <- summary(SZ.capm.cross)$adj.r.squared
 
######fama french 3 factor
    SZ.ff.b <- t(matrix(unlist(s.ff.betas),nrow=3))
    colnames(SZ.ff.b) <- c('MKT','SMB','HML')
    SZ.ff.cross <- lm(SZ.focus~SZ.ff.b)
    SZ.ff.alpha <- as.matrix(coef(SZ.ff.cross)[1])
    SZ.ff.beta <- as.matrix(coef(SZ.ff.cross)[2:4])
    SZ.ff.fitted <- fitted(SZ.ff.cross)
    SZ.ff.rsq <- summary(SZ.ff.cross)$adj.r.squared
 
 
#[Value perspective]
BZ.focus <- matrix(unlist(BM.SZ$value.port.mean),ncol=1) - mean(rf.ret) 
######capm
    BZ.capm.b <- matrix(unlist(v.betas),ncol=1)
    BZ.capm.cross <- lm(BZ.focus~BZ.capm.b)
    BZ.capm.alpha <- as.matrix(coef(BZ.capm.cross)[1])
    BZ.capm.beta <- as.matrix(coef(BZ.capm.cross)[2])
	  BZ.capm.fitted <- fitted(BZ.capm.cross)
    BZ.capm.rsq <- summary(BZ.capm.cross)$adj.r.squared
 
######fama french 3 factor
    BZ.ff.b <- t(matrix(unlist(v.ff.betas),nrow=3))
    colnames(BZ.ff.b) <- c('MKT','SMB','HML')
    BZ.ff.cross <- lm(BZ.focus~BZ.ff.b)
    BZ.ff.alpha <- as.matrix(coef(BZ.ff.cross)[1])
    BZ.ff.beta <- as.matrix(coef(BZ.ff.cross)[2:4])
	  BZ.ff.fitted <- fitted(BZ.ff.cross)
    BZ.ff.rsq <- summary(BZ.ff.cross)$adj.r.squared
###############################################################################

To visualise the cross sectional results for the CAPM and FF3F models across 25 sorted portfolios.

###################################################################################################
#Fitted vs Actual
###################################################################################################

windows()
layout(matrix(c(1,2,3,4),ncol=2,byrow=T))

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[SizeFocus]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#CAPM
par(mai=c(0.1,0.65,0.65,0))
  plot(x=SZ.capm.fitted*100,y=SZ.focus*100,xlab='',xaxt='n',ylab='Average Excess Returns',cex.main=0.85,cex.lab=0.7,cex.axis=0.65,xlim=c(0.2,1.2),ylim=c(0.2,1.2),col='white')
    for(i in 1:5){
	  	lines(x=SZ.capm.fitted[beg[i]:end[i]]*100,y=SZ.focus[beg[i]:end[i]]*100,col=cols.m[i])
		  points(x=SZ.capm.fitted[beg[i]:end[i]]*100,y=SZ.focus[beg[i]:end[i]]*100,col=cols.m[i],pch=20+i)
    }
abline(0,1)
legend(title='CAPM\n\nLines connect same\n Size Quintile','bottomright',pch=21:25,col=cols.m,legend=c('Smallest Size Portfolio',paste('Size Portfolio',2:4),'Largest Size Portfolio'),ncol=1,bg='white',bty='n',cex=0.6)

#Fitted 3 factor models
par(mai=c(0.1,0.2,0.65,0.45))
plot(x=SZ.ff.fitted*100,y=SZ.focus*100,xlab='',xaxt='n',ylab='',yaxt='n',cex.main=0.85,cex.lab=0.7,cex.axis=0.65,xlim=c(0.2,1.2),ylim=c(0.2,1.2),col='white')
    for(i in 1:5){
	  	lines(x=SZ.ff.fitted[beg[i]:end[i]]*100,y=SZ.focus[beg[i]:end[i]]*100,col=cols.m[i])
		  points(x=SZ.ff.fitted[beg[i]:end[i]]*100,y=SZ.focus[beg[i]:end[i]]*100,col=cols.m[i],pch=20+i)
    }
mtext(font=2,line=2,adj=1,cex=0.75,text='25 Size/BM sorted Portfolios : Actual average excess returns against model predictions',side=3)

abline(0,1)
legend(title='3 Factor Model\n\nLines connect same\n Size Quintile','bottomright',pch=21:25,col=cols.m,legend=c('Smallest Size Portfolio',paste('Size Portfolio',2:4),'Largest Size Portfolio'),ncol=1,bg='white',bty='n',cex=0.6)
#*************************************************************************************************#

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[ValueFocus]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#CAPM
par(mai=c(0.65,0.65,0.1,0))
plot(x=BZ.capm.fitted*100,y=BZ.focus*100,xlab='Predicted Mean Excess Returns',ylab='Average Excess Returns',cex.main=0.85,cex.lab=0.7,cex.axis=0.65,xlim=c(0.2,1.2),ylim=c(0.2,1.2),col='white')
    for(i in 1:5){
	  	lines(x=BZ.capm.fitted[beg[i]:end[i]]*100,y=BZ.focus[beg[i]:end[i]]*100,col=cols.m[i])
		  points(x=BZ.capm.fitted[beg[i]:end[i]]*100,y=BZ.focus[beg[i]:end[i]]*100,col=cols.m[i],pch=20+i)
    }
abline(0,1)
legend(title='CAPM\n\nLines connect same\n Book-Market Quintile','bottomright',pch=21:25,col=cols.m,legend=c('Lowest B/M Portfolio',paste('Value Portfolio',2:4),'Highest B/M Portfolio'),ncol=1,bg='white',bty='n',cex=0.6)

#Fitted 3 factor models
par(mai=c(0.65,0.2,0.1,0.45))
plot(x=BZ.ff.fitted*100,y=BZ.focus*100,xlab='Predicted Mean Excess Returns',ylab='',yaxt='n',cex.main=0.85,cex.lab=0.7,cex.axis=0.65,xlim=c(0.2,1.2),ylim=c(0.2,1.2),col='white')
    for(i in 1:5){
	  	lines(x=BZ.ff.fitted[beg[i]:end[i]]*100,y=BZ.focus[beg[i]:end[i]]*100,col=cols.m[i])
		  points(x=BZ.ff.fitted[beg[i]:end[i]]*100,y=BZ.focus[beg[i]:end[i]]*100,col=cols.m[i],pch=20+i)
    }
abline(0,1)
legend(title='3 Factor Model\n\nLines connect same\n Book-Market Quintile','bottomright',pch=21:25,col=cols.m,legend=c('Lowest B/M Portfolio',paste('Value Portfolio',2:4),'Highest B/M Portfolio'),ncol=1,bg='white',bty='n',cex=0.6)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#

yy

The first row of plots charts mean excess returns against cross sectional predictions across both CAPM and FF3F models with lines connecting different BM portfolios within each size category The second row of plots examines the risk return relation by connecting different size portfolios within each BM category. In both cases, the scatter of points is closer to the 45 degree line for the FF3F model than for the CAPM, implying that variation in average returns of the 25 portfolios can be explained by varying loadings on the 3 factors. The adjusted r-squared increases from 0.23% to 72.78% as we move away from the CAPM to the 3 factor model.

At this point it is instructive, at least in terms of keeping a diary of experiments for myself,to embed the idea of factor models discussed above in the microeconomic framework outlined in part 1 of the asset pricing series. The economic intuition for valuing uncertain cash flows starts with

[1] the basic consumer problem of maximising current and future expected utility of consumption :

cv

leading to [2] the central asset pricing relation according to which the price of any asset is simply its discounted payoffs : p = E(mx) where

bs

providing [3] a set of important relations such as

hjn

fd

  • Asset prices (p) are equal to the expected cash flow payoff (x) discounted at the risk free rate (rf) plus a risk premium.
  • This risk premium depends on the covariance of the payoff with the discount factor.
  • Assets whose payoff covaries positively with the stochastic discount factor (m) or negatively with consumption growth commands a higher price and a lower expected return.
  • Assets whose payoff covaries negatively with the discount factor or positively with consumption growth commands a lower price and a higher expected return.
  • Investors dislike uncertainty in their consumption streams.
  • Assets whose payoff vary positively with consumption disrupt an investor’s consumption stream and hence must be cheap in terms of price and high in terms of expected returns.
  • Assets whose payoff vary negatively with consumption help stabilise an investors consumption stream and hence can be expensive in terms of price and low in terms of expected returns.
  • A positive covariance between asset payoff and consumption characterises an asset that pays off well when investors are already wealthy (bad when investors already feel poor).
  • A negative covariance between asset payoff and consumption characterises an asset that pays off poorly when investors feel wealthy (well when investors feel poor).
  • Price/Expected return depend on covariance not individual risks.

Practical applications tend to use linear approximations of the form : 

ghh

leading to the well worn specification of :

kl

Although this consumption based approach should in principle provide a complete answer to most absolute pricing issues,empirically it is not perfect. Essentially, the slew of factor models is a response to the question posed by Cochrane : ‘what variables  other than consumption might indicate bad times (high marginal utility)’. 

aw

Value stocks, which combine high book values with low market prices, tend to be particularly affected in times of recession and crises, inducing investors to only hold such assets at low prices/high premiums. Assets that covary negatively with m and hence positively with consumption must pay a higher average return. Since value stocks do poorly in recessions when consumption levels are low, they are covarying positively with consumption,negatively with the stochastic discount factor, and hence must provide a greater premium/lower price to entice investors. The original authors suggest that the economic meaning of HML is as a proxy for this distress risk. Along similar lines of reasoning,the SMB can be thought of as a mimicking portfolio for illiquidity risk. It should be noted that while the 3 factor model is an empirical improvement in most applications, the economic meaning of the factors on the right hand side seem to be less certain.

Advertisements
2 comments
  1. jmh530 said:

    I’ve been enjoying the latest posts. I think a very interesting post would be to compare how well these different factor techniques actually do.

    • Thank you very much for stopping by and also for your suggestion.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: