I am trying to test the statistical significance of the alphas in my trading strategy.

However, I do not understand the difference between the alphas generated in R.

To test the statistical significance you run the regression

$$ R_{pt} - r_f= \alpha_P + \beta_P (R_{Mt}-r_f)+e_{Pt} $$

I interpret this as running the excess returns of the strategy on the l.h.s, and the returns predicted by the CAPM/market on the r.h.s., which is:

lm(strategy - rf ~ alpha + beta*(market-rf) (lm() is the regression function in R)

I use the package PerformanceAnalytics and function CAPM.alpha() which get the same alpha as when I do summary((lm(strategy -rf ~ market - rf)), where market is simply the historical returns from the market.

So, which is the right method to test for the statistical significance (t-test, p-value etc.) of the alpha?

  1. lm(strategy - rf ~ alpha + beta*(market-rf) (CAPM on rhs), or
  2. lm(strategy - rf ~ market - rf)

I. $R_{pt} - r_f= \alpha_P + \beta_P (R_{Mt}-r_f)+e_{Pt}$

II. $R_{pt} - r_f = R_{Mt} - r_f$

The former method is statistically significant, while the latter is not.


A time-series regression with properly time indices for testing the CAPM would be $$ R_{i,t}-R_{t}^f = a_i + \beta_i(R_{t}^m-R_{t}^f)+\epsilon_{i,t} $$

You may look at this answer for a deeper explanation of the above regression.

You have to consider how regression in R is implemented. As stated in the manual ?lm,

A formula has an implied intercept term.

So your properly regression would be lm(strategy - rf ~ market - rf), as it already implies an intercept term, i.e. $\alpha_i$ in the above regression. The CAPM implies, that $\alpha_i$ would be zero for any asset or portfolio of stocks. In a short example with the Cisco stock and monthly data for five years, i run the regression above and get the following output:

summary(lm(capm$CiscoExcessRet ~ capm$MarketExcessRet)

                 Estimate Std.  Error     t value   Pr(>|t|)    
(Intercept)          0.005569   0.006097   0.913    0.362    
capm$MarketExcessRet 1.540705   0.124895  12.336   <2e-16 ***
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

As you can see, $\beta_i$ as the coefficient of the market risk premia for Cisco is 1.54 and highly statistically significant. The intercept is the $\alpha_i$ for Cisco and it's value of 0.0056 is not statistically different from zero, as its t-value is only 0.913. In summary, the implications of the CAPM are holding for this example.

| improve this answer | |
  • $\begingroup$ Thanks for the explanation. It is much more clear now. I am not sure how familiar you are with the package PerformanceAnalytics but there are two functions CAPM.alpha and CAPM.jensenAlpha which provide two different solutions. The first function obtains its values from the regression lm(), while the second formula obtains its values from the mathematical regression function (above). Do you know the difference? $\endgroup$ – Mataunited17 Jul 31 '18 at 10:02
  • 1
    $\begingroup$ CAPM.alphais the return contribution to an asset or portfolio, which is unexplained from the CAPM and therefore not affected by the exposure towards market risk. If you would like to test the CAPM use this value, which should be indifferent from zero (see above; but CAPM.alphadoes not provide any test statistic). CAPM.jensenAlphawill provide a time series of returns in the meaning of a tracking error. For each time step, it is calculated as the expected ret. (e.g. from the CAPM) minus the actual asset ret. This alpha provides a test for the investors capability of "beating the market". $\endgroup$ – skoestlmeier Jul 31 '18 at 10:52
  • $\begingroup$ Do you have a suggestion for how to obtain the test statistic for statistical significance for CAPM.jensenAlpha? I've read different approaches both online and in the literature. $\endgroup$ – Mataunited17 Jul 31 '18 at 11:54
  • 1
    $\begingroup$ You could simply use a two-tailed t-test with the Null-Hypothesis, that Jensen's $\alpha_i$ is zero. If you apply t.test(alpha_timeseries, method = "two-sided", mu = 0) you get the t-value. If its significant, you reject the Null-Hypothesis and can assume, that the investment strategy outperforms your benchmark. Additionally you may correct standard errors for autocorrelation or heteroscedasticity applying Newey/West(1987) adjustment (in R with the sandwich and lmtest package). In this case, apply an intercept only model reg <- lm(alpha_timeseries~1) and coeftest(reg, NeweyWest(reg)). $\endgroup$ – skoestlmeier Jul 31 '18 at 12:24
  • 1
    $\begingroup$ As comments are not for extended discussion; let me refer to common econometric textbooks like Econometrics by Murray or Econometric Analysis by Greene. $\endgroup$ – skoestlmeier Aug 1 '18 at 10:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.