{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Paper Review 3: Quality Minus Junk\n", "\n", "By: Chengyi (Jeff) Chen\n", "\n", "### Table of Contents\n", "1. [Data, Methodology, and Quality Measures](#1)\n", "2. [Ex Ante Quality Forecasts Fundamentals](#2)\n", "3. [The Price of Quality](#3)\n", "4. [The Return of Quality Stocks](#4)\n", "5. [Quality Minus Junk](#5)\n", "6. [The Time Variation of the Price of Quality: Predicting QMJ](#6)\n", "7. [Quality at a Reasonable Price](#7)\n", "8. [QMJ on the Right-Hand-Side of a Factor Model](#8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 1. Data, Methodology, and Quality Measures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data Sources" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Long Sample" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- U.S. only stocks\n", "\n", "- Jun 1956 - Dec 2012" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Broad Sample" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- ALL available common stocks om 24 developed markets in the [CRSP](http://www.crsp.org/) and [XpressFeed Global database](https://www.spglobal.com/marketintelligence/en/solutions/xpressfeedtm)\n", "\n", "- Jan 1986 - Dec 2012" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Quality Score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{align}\n", " x &: \\text{variable of interest} \\\\\n", " r &: \\text{vector of ranks}, r_i = rank(x_i) \\\\\n", " \\mu_r &: \\text{cross sectional mean} \\\\\n", " \\sigma_r &: \\text{cross sectional standard deviation } \\\\\n", " z(x) &= \\frac{(r - \\mu_r)}{\\sigma_r} \\\\\n", "\\end{align}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ProxyDefinitionFormula
ProfitabilityAverage of $z$-scores of profitability measures\n", " \\begin{array}\n", " \\\\\n", " z( \\\\\n", " z_{\\text{gross profits over assets (GPOA)}} \\\\\n", " + z_{\\text{return on equity (ROE)}} \\\\\n", " + z_{\\text{return on assets (ROA)}} \\\\\n", " + z_{\\text{cash flow over assets (CFOA)}} \\\\\n", " + z_{\\text{gross margin (GMAR)}} \\\\\n", " + z_{\\text{fraction of earnings composed of cash (i.e. low accruals, ACC)}} \\\\\n", " ) \\\\\n", " \\end{array}\n", "
Growth5-year prior growth in profitability\n", " \\begin{array}\n", " \\\\\n", " z( \\\\\n", " z_{\\Delta\\text{gross profits over assets (GPOA)}} \\\\\n", " + z_{\\Delta\\text{return on equity (ROE)}} \\\\\n", " + z_{\\Delta\\text{return on assets (ROA)}} \\\\\n", " + z_{\\Delta\\text{cash flow over assets (CFOA)}} \\\\\n", " + z_{\\Delta\\text{gross margin (GMAR)}} \\\\\n", " + z_{\\Delta\\text{fraction of earnings composed of cash (i.e. low accruals, ACC)}} \\\\\n", " ) \\\\\n", " \\end{array}\n", "
SafetyAverage of $z$-scores of safety measures\n", " \\begin{array}\n", " \\\\\n", " z( \\\\\n", " z_{\\text{CAPM }\\beta\\text{ (BAB)}} \\\\\n", " + z_{\\text{idiosyncratic volatility (IVOL)}} \\\\\n", " + z_{\\text{leverage (LEV)}} \\\\\n", " + z_{\\text{bankruptcy risk (O-score)}} \\\\\n", " + z_{\\text{bankruptcy risk (Z-score)}} \\\\\n", " + z_{\\text{ROE volatility (EVOL)}} \\\\\n", " ) \\\\\n", " \\end{array}\n", "
PayoutAverage of $z$-scores of payout measures\n", " \\begin{array}\n", " \\\\\n", " z( \\\\\n", " z_{\\text{equity net issuance (EISS)}} \\\\\n", " + z_{\\text{debt net issuance (DISS}} \\\\\n", " + z_{\\text{total net payout over profits (NPOP)}} \\\\\n", " ) \\\\\n", " \\end{array}\n", "
QualityAverage of $z$-scores of 4 proxies\n", " \\begin{array}\n", " \\\\\n", " z( \\\\\n", " Profitability \\\\\n", " + Growth \\\\\n", " + Safety \\\\\n", " + Payout \\\\\n", " ) \\\\\n", " \\end{array}\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Portfolios" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "NYSE Breakpoints: \n", "\n", "- https://quant.stackexchange.com/questions/49651/what-is-nyse-breakpoint-as-used-by-fama-french\n", "\n", "- http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/Data_Library/six_portfolios.html\n", "\n", "- https://quant.stackexchange.com/questions/41729/fama-french-sorting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "#### Quality-sorted Portfolios" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "U.S. Long Sample\n", "\n", "```python\n", " def country_quality_sorted_portfolio(country):\n", " \"\"\"Returns 1 value-weighted quality-sorted portfolio for the country\n", " \"\"\"\n", " # 1. Sort each stock in the investable universe by quality score defined above\n", " # 2. Partition sorted stocks into 10 portfolios based on NYSE breakpoints\n", " # 3. Weigh each portfolio by value and combine into a single country portfolio\n", " # 4. Rebalance at the end of each calendar month\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Global Broad Sample\n", "\n", "```python\n", " def global_quality_sorted_portfolio(country):\n", " \"\"\"Returns 1 country-total-(lagged)-market-cap-weighted portfolio\n", " \"\"\"\n", " # 1. Get the quality-sorted portfolios for each country\n", " portfolios = []\n", " for country in broad_sample.countries:\n", " portfolios.append(country_quality_sorted_portfolio(country))\n", " # 2. Weigh each country portfolio by the country’s total (lagged) market capitalization and combine into 1 global portfolio\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quality-Minus-Junk factor portfolio (QMJ)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "U.S. Long Sample\n", "\n", "```python\n", " def country_qmj_portfolio(country):\n", " \"\"\"Returns 1 value-weighted quality-minus-junk factor portfolio for the country\n", " \n", " Resources: \n", " - Kenneth French's website: http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/Data_Library/six_portfolios.html\n", " \"\"\"\n", " # 1. Partition stocks in each country into 2, Big and Small, using median NYSE Market equity as breakpoint for U.S. and 80th percentile of market equity for International stocks\n", " # 2. Further partition each size partition into 3 groups sorted on quality (similar to the Fama-french sorting)\n", " # 3. QMJ factor return is the avg return on the 2 high quality portfolios - avg return on the 2 low quality portfolios\n", " QMJ_return = 0.5*(small_quality + big_quality) - 0.5*(small_junk + big_junk)\n", " return QMJ_return\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Global Broad Sample\n", "\n", "```python\n", " def global_qmj_portfolio(country):\n", " \"\"\"Returns 1 country-total-(lagged)-market-cap-weighted portfolio\n", " \"\"\"\n", " # 1. Get the quality-minus-junk factor portfolios for each country\n", " portfolios = []\n", " for country in broad_sample.countries:\n", " portfolios.append(country_qmj_portfolio(country))\n", " # 2. Weigh each country portfolio by the country’s total (lagged) market capitalization and combine into 1 global portfolio\n", " \n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 2. Ex Ante Quality Forecasts Fundamentals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Quality firms today remain high quality firms + 120Months" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 3. The Price of Quality" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Fama-Macbeth Regressions\n", "\n", "\\begin{align}\n", " P^i_t &: z_{\\text{stock i's market-to-book (MB) ratio at time t}}\n", "\\end{align}\n", "\n", "1. Regress the Time Series of $P^i_t$ against Time Series of $Quality^i_t$ (defined in section 1) to get overall quality score exposure of each stock $i$'s market-to-book (MB) ratio.\n", "\\begin{align}\n", " \\hat{P^i_t} &= a + bQuality^i_t + \\epsilon^i_t \\\\\n", " b &: \\text{if quality improves by one standard deviation, then the price-to-book increases by }b\\text{ standard deviations} \\\\ \n", "\\end{align}\n", "2. Regress $P^i_t$ of all the stocks in the Portfolio @ time $t$ against the overall quality score exposure of each stock $i$'s market-to-book (MB) ratio" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The fama-macbeth regressions are also run by regressing the time series of $P^i_t$ on different combinations of:\n", "\n", "- $Size$: z-score of the stock’s market equity (ME)\n", "\n", "- $Ret(t-12,t)$: stock's return in the prior year\n", "\n", "- Industry fixed effects\n", "\n", "- Country fixed effects\n", "\n", "Price of Quality $b$'s Interpretation with the inclusion of industry / country fixed effects: \n", "\n", "- if quality improves by one standard deviation above its country-industry mean, then the price-to-book increases by b standard deviations above its country-industry mean.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Summary:\n", "\n", "- Price of quality is statistically significantly positive from both US and global samples across different combinations of country / industry fixed effects, and with and without the other covariates $Size$, and $Ret(t-12, t)$\n", "\n", "- Quality does not explain a large portion of the cross sectional variance in prices (low average $R^2$), meaning that there are other big forces driving the prices besides quality alone\n", "\n", "- When regressing against separate components of the quality measurement, we find:\n", "\n", " - Price of $Profitability$ is $> 0$\n", " \n", " - Price of $Growth$ is $> 0$\n", " \n", " - Price of $Safety$ is $< 0$ in univariate regression, but $> 0$ when regressed with the other quality measure proxies\n", " \n", " - Possibly explained by: If investors are constrained from leveraging, risky assets command higher prices (and lower returns) while safe assets have lower prices (and higher returns).\n", " \n", " - Price of $Payout$ is $< 0$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 4. The Return of Quality Stocks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Possible theories as to why Quality is limited in explaining Prices:\n", "\n", "1. Limited Market Efficiency\n", "\n", " - Implication: High-quality stocks have high risk-adjusted returns than low-quality stocks as investors are underpricing high quality characteristics\n", " \n", " - Most agreeable with the analysis\n", "\n", "2. Market uses superior quality measures\n", "\n", " - Implication: No relation between our measured quality and ex post returns or at least a greatly attenuated one\n", " \n", " - Results clearly show that there is a statistically significant relationship ($\\beta$ coefficient in regression) between quality and ex post returns as excess returns increase almost monotonically in quality such that high-quality stocks outperform low-quality stocks (difference between the highest and lowest deciles and the associated t-statistic), disproving this theory. \n", "\n", "3. Quality is linked to risk in a way not captured by our safety measure\n", "\n", " - Implication: Univariate relation between quality and future returns which is reduced or eliminated by an effective risk model\n", " \n", " - When we control for market risk and other factor exposures, the outperformance in the alpha of high-quality stocks is in fact even larger meaning that High-quality stocks have lower market exposures than junk stocks, disproving this theory." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 5. Quality Minus Junk" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Correlation Analysis of monthly returns of $QMJ, Profitability, Safety, Growth, Payout$ factors\n", "\n", "- Pairwise correlations mostly $> 0$\n", "\n", " - High magnitude in one proxy for quality is usually associated with a different proxy even though it didn't necessarily have to be\n", "\n", "- Correlation between $Growth$ factor and $Payout$ factor $< 0$\n", "\n", " - Higher payout is naturally associated with lower growth" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Factor Loadings of $MKT, SMB, HML, UMD$ factors with $QMJ, Profitability, Safety, Growth, Payout$ factors\n", "\n", "- QMJ factor has a significantly negative market and size exposures\n", "\n", " - QMJ is long low-beta and large stocks, while being short high-beta small ones\n", " \n", "- Profitability, safety, and growth factors have significantly negative HML loadings in the U.S. and global samples\n", "\n", " - we expect that high-quality stocks have high prices while the value factor HML is long cheap stocks, we would expect a negative HML loading\n", " \n", "- The payout factor has a positive loading in the U.S. and global samples\n", "\n", " - Positive payout loading could be driven by cheap stocks endogenously choosing a low payout. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Performance of the QMJ factor across countries\n", "\n", "- QMJ factor delivers positive returns and alphas in all but one of the 24 countries\n", "\n", " - Negative in New Zealand, one of the smallest countries in market capitalization and number of stocks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Performance of the QMJ factor over time\n", "\n", "- QMJ factor has consistently delivered positive excess returns and risk-adjusted returns over time " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Driver of large and significant 1- , 3- and 4-factor abnormal returns in QMJ portfolios that are long high quality stocks and short junk stocks\n", "\n", "- Evidence points away from compensation for tail risk \n", "\n", " - The strong return in extreme down markets is consistent with a flight to quality (or at least profitability), meaning that taking on tail risk during economic downturns is not plausible evidence that QMJ returns are driven by compensation for tail risk\n", " \n", " - Hence, market mispricing might be more plausible a theory." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 6. The Time Variation of the Price of Quality: Predicting QMJ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Variation of the price of quality is not pure noise but, rather, reflects changes in the market pricing of quality characteristics, generating variation in QMJ returns." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 7. Quality at a Reasonable Price" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Fair price of quality is above the level paid by the market, meaning that quality is currently undervalued." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 8. QMJ on the Right-Hand-Side of a Factor Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Regressing each non-market factor in 4-factor model ($SMB, HML, UMD$) against $QMJ$ factor and the other factors\n", "\n", "#### $SMB$\n", "\n", "- $SMB$ has a very large negative exposure to $QMJ$.\n", "\n", "#### $HML$\n", "\n", "- $HML$ has a negative loading on $QMJ$\n", "\n", " - Cheap stocks (with high book-to-market) are naturally lower quality than expensive stocks\n", " \n", " - Implication: controlling for $QMJ$ increases the alpha of $HML$, strengthening the value effect. \n", " \n", " \n", "#### $UMD$\n", "\n", "- $UMD$ has positive loading on QMJ, which is significant in the global but not U.S. sample. Controlling for this exposure to quality lowers the alpha of UMD, but the momentum effect remains highly significant in both samples" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false } }, "nbformat": 4, "nbformat_minor": 4 }