Can investors reliably pick mutual funds which beat the market?

I am a very big fan of index funds. However, I often hear the argument from my friends and relatives that index investors are content to be “average” and that smart investors who are well informed and willing to put in a little extra work should be able to “beat the market”.

If only it were that easy! There are numerous academic studies showing that, after fees, the average active mutual fund underperforms low cost index funds. These studies also show that there is very little “persistence” among the mutual funds that have managed to beat the indexes in the past. In other words, we can’t accurately predict which funds which will beat the market in the future by looking at past performance.

Despite all the evidence in favor of index funds, I find that it is very difficult to change the mind of a diehard believer in active management. Instead, I choose to stress the importance of carefully measuring investment performance. I strongly believe that any investor who does not carefully measure and evaluate investment performance is not a serious investor!  I have found that most investors who carefully and honestly monitor the performance of their investments and compare this performance to a relevant benchmark will eventually convince themselves that indexing is the way to go.

Evaluating the Performance of Some Carefully Chosen Mutual Funds

In this post, I’m going to demonstrate two methods for evaluating investment performance. First, I’ll compare the returns of some carefully chosen mutual funds to a broad index benchmark. Next, I’ll do a risk-adjusted evaluation of these same funds using the Fama-French Three Factor model.

How the Sample Funds were Selected

One very well known and long established list of carefully selected mutual funds is the Forbes Honor Roll. This list of 10 mutual funds is published annually, and, according to Forbes, the funds are chosen based on “consistency and great long-term returns”.

To keep this analysis simple, I’m going to use only the Top 5 funds from the 2005 Honor Roll list. I’ve chosen a 5-year interval as a minimum amount of time to begin to evaluate the performance and risk of the chosen funds.

5-year Performance of Selected Funds vs. Total Stock Market

So, how have the Honor Roll funds from 5-years ago performed? A plot of the total returns (including dividends) of the Top 5 Honor Roll Funds from 2005 is shown here:

The bold red line is an index based on the total stock market (VTI). We can see that 3 of 5 funds outperformed the total stock market. Not bad for the Honor Roll!  However, a closer look shows that two funds beat the index by a very small margin, and one fund underperformed by a large amount. In fact, an investor who invested an equal amount in each of these Top 5 Honor Roll funds would have underperformed the VTI index by more than 4% over the 5-year period.

What about risk?

One potential problem with comparing these funds to VTI is that VTI may not be an appropriate benchmark. Some of the funds may take on more risk than others, and the returns of the funds should be judged on a risk-adjusted basis.

For example, most investors believe that stocks are likely to outperform bonds over the long run, but investors still buy bonds in spite of their lower expected returns. Why? Of course, the reason is that stocks are more risky than bonds. Stocks are likely to outperform bonds, but they also have a risk of doing very poorly…even over relatively long horizons. Investors who are not willing to bear this risk will choose bonds over stocks in spite of the fact that returns are likely to be lower.

Similarly, not all stocks have the same risk/return characteristics. Some stocks have higher risk and higher expected return. A mutual fund which overweights these risky stocks will tend to have higher returns than the broader market when times are good, but it may also have a higher chance of disaster when the markets are under stress.

The best way to account for differences in risk is to evaluate funds using an asset pricing model such as the Capital Asset Pricing Model (CAPM) or Fama-French Three Factor (FF3F) model. I prefer the Fama-French model since it does a better job of explaining returns across a wide variety of investment strategies.

Fama-French Regression Results

The Fama-French Three Factor model regression results are shown here:

Fund NameTickerMonthly AlphaFF-BetaFF-s (size)FF-h (value)R-squared
Calamos Growth Fund ACVGRX-0.129%1.240.17-0.570.93
Bruce FundBRUFX0.168%0.610.150.090.66
Muhlencamp FundMUHLX-0.725%*0.900.100.110.90
Mairs&Powers Growth FundMPGFX-0.032%0.780.180.330.91
Keeley Small Cap Value FundKSCVX-0.148%1.180.630.060.91

Only the Bruce fund has a positive alpha over the 5-year evaluation period.  In other words, only the Bruce Fund has outperformed after adjusting for risk.  Further, the only statistically significant alpha is the negative alpha for the Muhlencamp fund.

Conclusion

In this post, I’ve demonstrated two basic methods for evaluating the performance of a mutual fund.  We can compare the performance to a broad market benchmark, or we can use an asset pricing model to evaluate whether the funds deliver excess returns after accounting for risk.  If your investment strategy is underperforming by a meaningful margin when evaluated by either of these two methods, then you might consider switching to a simpler index based portfolio.

Additional Information:

Data: The data for this analysis was taken from Yahoo! Finance and the Fama-French website.

Code: The R-code used to run the regressions and generate the plots is shown below.

# Goal: Using data from Yahoo finance, estimate the Fama-French Factors for Forbes Honor Roll
# using monthly returns

library(tseries)

# Load FF factor returns
startyear <- 2006
startmonth <- 1
endyear <- 2010
endmonth <- 12

start <- (startyear-1926.5)*12+startmonth
stop <- (endyear - 1926.5)*12+endmonth

ff_returns <- read.table("F-F_Factors_monthly.txt")
rmrf <- ff_returns[start:stop,2]/100
smb <- ff_returns[start:stop,3]/100
hml <- ff_returns[start:stop,4]/100
rf <- ff_returns[start:stop,5]/100

# Load Fund Data
prices1 <- get.hist.quote("CVGRX", quote="Adj", start="2005-12-25", retclass="zoo")
prices2 <- get.hist.quote("BRUFX", quote="Adj", start="2005-12-25", retclass="zoo")
prices3 <- get.hist.quote("MUHLX", quote="Adj", start="2005-12-25", retclass="zoo")
prices4 <- get.hist.quote("MPGFX", quote="Adj", start="2005-12-25", retclass="zoo")
prices5 <- get.hist.quote("KSCVX", quote="Adj", start="2005-12-25", retclass="zoo")

# Benchmark
prices.vti <- get.hist.quote("VTI", quote="Adj", start="2005-12-25", retclass="zoo")

prices1 <- na.locf(prices1)               # Copy last traded price when NA
prices2 <- na.locf(prices2)
prices3 <- na.locf(prices3)
prices4 <- na.locf(prices4)
prices5 <- na.locf(prices5)

# To make monthly returns, you must have this incantation:
monthly.prices <- aggregate(prices1, as.yearmon, tail, 1)
monthly.prices2 <- aggregate(prices2, as.yearmon, tail, 1)
monthly.prices3 <- aggregate(prices3, as.yearmon, tail, 1)
monthly.prices4 <- aggregate(prices4, as.yearmon, tail, 1)
monthly.prices5 <- aggregate(prices5, as.yearmon, tail, 1)

# Benchmark
monthly.vti <- aggregate(prices.vti, as.yearmon, tail, 1)

# Convert selected monthly prices into monthly returns to run regression
r <- diff(log(monthly.prices))  # Need to chnage this line to estimate factors for desired fund
r1 <- exp(r)-1

# Now shift out of zoo into ordinary matrix
rj <- coredata(r1)
rj <- rj[1:60]
rjrf <- rj - rf

d <- lm(rjrf ~ rmrf + smb + hml)               # FF model estimation.
print(summary(d))

series1 <- 100*(monthly.prices/coredata(monthly.prices[1])-1)
series2 <- 100*(monthly.prices2/coredata(monthly.prices2[1])-1)
series3 <- 100*(monthly.prices3/coredata(monthly.prices3[1])-1)
series4 <- 100*(monthly.prices4/coredata(monthly.prices4[1])-1)
series5 <- 100*(monthly.prices5/coredata(monthly.prices5[1])-1)

series.vti <- 100*(monthly.vti/coredata(monthly.vti[1])-1)

dates <- 2005+10/12 + (1:64)/12
series <- cbind(series1,series2,series3,series4,series5,series.vti)
dates <- cbind(dates,dates,dates,dates,dates,dates)
matplot(dates,series,type='l',lty = c(3,4,5,6,2,1),col=c(3,4,5,6,9,2),lwd=c(2,2,2,2,2,5),ylab="",xlab="")
legend(2006,45,c("CVGRX","BRUFX","MUHLX","MPGFX","KSCVX","VTI"),lty = c(3,4,5,6,2,1),col=c(3,4,5,6,9,2),lwd=c(2,2,2,2,2,5))
title("Total Returns of Forbes Honor Roll Funds vs. VTI",xlab="Date",ylab="Percent Gain",cex.main="2.25",cex.lab="1.75")

5 Responses to “Passive vs. Active Management: The Importance of Performance Evaluation”

  1. Nice analysis. It should get performance chasers to pause and reflect.

    • Thanks, hopefully it will provide some food for thought. I know my own investing practices changed for the better after I started to measure my results more carefully.

  2. I referenced your study in my post this morning at http://rwinvesting.blogspot.com/2011/03/mutual-fund-track-records.html
    I think too often people see the results of studies summarized but don’t get the sophistication behind the methods used to attain the results.
    I think your analysis shows people how risk is accounted for etc.and is excellent for many bloggers out there who have never seen the statistical techniques.

  3. I am fairly inexperienced, but was looking at the Bruce fund as a possible investment option. Are you basically saying from this article that a fund like VTI is an index fund that makes more sense than many top performing mutual funds out there?

    • Hi Young Investor33, Thank you for visiting my blog. As a blogger, I can’t give individual financial advice, so I can’t comment on whether or not a particular fund is a good investment option for you. I prefer to use indexes in my own investing for many of the reasons I outlined in the post, but you should work with a professional or do your own research to decide what is the best option for you.

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)