Skip to content
All library documents

Constructing a Consumption-Growth-Mimicking Portfolio

Article Quant Q&A · Author: Stefan Voigt

Summary

The document outlines a proposed method for constructing a factor-mimicking portfolio whose returns are strongly related to aggregate consumption growth, following the consumption-oriented CAPM literature. It describes calculating quarterly log consumption growth, aligning it with monthly Fama–French factor returns, estimating each factor’s consumption beta by regression, and combining the factors using the inverse covariance matrix multiplied by the beta vector. The proposed weights are then normalized to sum to one, and portfolio returns are formed from the factor returns.

The author provides sample data, regression output, weights, and a covariance calculation to illustrate the procedure, but asks whether the approach is correct rather than presenting a validated result. A key practical caveat is the mismatch between quarterly consumption observations and monthly returns, which requires careful frequency alignment. The excerpt also does not resolve whether its weight calculation and normalization match the stated maximum-correlation optimization, or establish out-of-sample performance. Treat the calculations as a proposed workflow, not a confirmed portfolio recipe.

Key ideas

  • The proposed portfolio aims to track aggregate consumption growth through traded factor returns.
  • Consumption betas are estimated by regressing factor returns on consumption growth.
  • The proposed weights use the inverse factor covariance matrix applied to the beta vector, followed by sum normalization.
  • The example combines quarterly consumption data with monthly factor returns, so frequency alignment needs scrutiny.
  • The document poses the procedure as a question and does not validate its optimality or performance.

Tags

Full text
# Creating Factor mimicking portfolio returns


# Creating Factor mimicking portfolio returns












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
```

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
```

## Questions

- is this procedure correct so far?

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.