4
$\begingroup$

I have some trouble understanding how to create factor mimicking portfolio returns. As pointed out in this question, Tsay provides a small description, but I am unsure if my procedure is correct. In more detail, I want to generate factor mimicking returns for consumption growth as explained in the paper "Empirical Test of the Consumption Oriented CAPM" (Breeden, Gibbons, Litzenberger; 1989).

Procedure in R

First, I download real personal consumption expenditures per capita from FRED

library(quantmod)
library(dplyr)

cons <- getSymbols('A794RX0Q048SBEA', 
                   src='FRED',
                   auto.assign = FALSE)
cons_growth <- data.frame(Date = index(cons),
                         cons_exp=100*as.vector(diff(log(cons$A794RX0Q048SBEA))))[-1,]
rownames(cons_growth)<-NULL
head(cons_growth)

        Date    cons_exp
1 1947-04-01  1.19832958
2 1947-07-01 -0.12981650
3 1947-10-01 -0.43789643
4 1948-01-01  0.07114062
5 1948-04-01  0.75570085
6 1948-07-01 -0.28271900

Consumption growth data from Fed

The data is available on a quarterly basis. As stated by Breeden et al., more precise evidence on the CCAPM can be provided if only returns were needed to test the theory.

CCAPM justifies the use of betas measured relative to a portfolio that has maximum correlation with growth in aggregate consumption, in place of betas measured relative to aggregate consumption.

In the original paper, monthly returns on individual securities are gathered from CRSP and twelve portfolios are used. For illustrative purposes I want to use factor portfolio returns obtained by Kenneth Frenchs homepage.

Download Fama French Factors

famaFrenchZip <- "http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Benchmark_Factors_Monthly.zip"
famaFrenchFile <- "F-F_Benchmark_Factors_Monthly.txt"
temp <- tempfile()
download.file(famaFrenchZip,temp)
ffData <- read.table(unz(temp, famaFrenchFile),  header = TRUE)
unlink(temp)

names(ffData) <- c('Date', 'Rm.Rf', 'SMB', 'HML')
ffData$Date <- as.Date(paste0(ffData$Date, '01'), format='%Y%m%d')
head(ffData)

        Date Rm.Rf   SMB   HML
1 1926-07-01  2.69 -2.49 -2.91
2 1926-08-01  2.52 -1.25  4.25
3 1926-09-01  0.00 -1.38  0.22
4 1926-10-01 -3.06 -0.20  0.71
5 1926-11-01  2.42 -0.34 -0.40
6 1926-12-01  2.66 -0.07 -0.11

Compute the maximum correlation portfolio weights

The aim is to create portfolio weights whose portfolio returns exhibit the highest correlation with the consumption growth. In the original paper, Breeden et al. show that mathematically, the MCP solves $$\min_w w'Vw + 2\lambda(\beta_{c,nb}-w'\beta_c)$$

where $V$ is the $N\times N$ unconditional covariance matrix for the returns, $\beta_c$ is the $N\times 1$ vector of unconditional consumption betas and $\beta_{c, nb}$ is the unconditional consumption beta of the MCP.

I first create the vector $\beta_c$ of unconditional consumption betas by multivariate linear regression

jdata <- left_join(cons_growth, ffData, by='Date')
X <- cbind(1, jdata%>%.$cons_exp)
betac <- solve(t(X)%*%X)%*%t(X)%*%as.matrix(jdata%>%select(Rm.Rf:HML))

betac
     Rm.Rf        SMB       HML
[1,] 0.7154750 -0.1411068 0.6945837
[2,] 0.1728738  0.3052810 0.3483269

The second row corresponds to the unconditional consumption betas of the individual factor returns (first row are intercept terms). Then the MCP weights are computed as

V <- cov(jdata%>%select(Rm.Rf:HML)) # unconditional covariance matrix of the assets
w <- solve(V)%*%betac[2,]
w <- w/sum(w)

The results look as follows:

w
            [,1]
Rm.Rf 0.07773869
SMB   0.43093279
HML   0.49132852

cov(as.matrix(jdata%>%select(Rm.Rf:HML))%*%w, jdata$cons_exp)
0.2066

I would interpret the monthly factor mimicking portfolio returns as

r <- as.matrix(ffData%>%select(-Date))%*%w

Factor mimicking portfolio returns

Questions

  • is this procedure correct so far?
$\endgroup$
1
  • $\begingroup$ Even if late, here's my 2 cents. The portfolio mimicking approach finds the maximally correlated portfolio of a target variable using a set of base assets. It is not clear to me why you have 6 coefficients after "I first create the vector βc...". If you have only one time series to mimick (cons_exp), then the result of the regression would be simply the 3 coefficients on the ff factors plus the intercept. The, the fitted values without considering the constant become your mimicking portfolio. See Ang, Hodrick, Xing, and Zhang (2006). $\endgroup$ Commented Mar 4, 2022 at 14:39

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.