1
$\begingroup$

I am trying to implement an unconditional asset pricing test according to the Fama & MacBeth (1973) method. The calculation of the factor-loadings as average of monthly cross-sectional regressions are all set and working. A challenge I am facing is the implementation of a proper t-Stat. Originally I just the calculation based on Cochrane (2005): $$ \sigma^2(\lambda)=1/T^2*\sum \limits_{t=1}^T (\hat\lambda_t-\bar\lambda)^2 $$ This value I used in the t-Test: $$ tStat=\frac{\bar\lambda-0}{\sqrt{\sigma^2}} $$

As this calculation of the t-Stat does not contain a correction for the error in variables problem I looked for a Shanken (1992) adjustment on the standard error. Unfortunately many papers state, that they apply the Shanken adjustments to their t-Stats but do not include a calculation for it. I found a description for the implementation of a Shanken-adjustment (http://lipas.uwasa.fi/~sjp/Teaching/eaptx/lectures/p5.pdf - slide 41 and following). This example also includes a sample implementation of the Shanken-adjustment in Stata for a single cross-sectional regression. I used this example and transferred the calculations into Matlab-code.

The problem now is that I am uncertain how the aggregation of periodic standard error calculations (following the Shanken-adjustments) into one standard error for the t-test happens. With a single cross-section regression there is no aggregation of values - but for the periodical cross-section regression according to Fama & MacBeth I run monthly cross-sectional regressions. I implemented "my interpretation" of a Shanken-adjustment in a 60 month rolling regression to reconcile the results of Artmann (2011: https://www.econstor.eu/bitstream/10419/70130/1/736358048.pdf page 36, table 8, panel F) who implemented a Shanken t-stat with Fama & MacBeth implementation. I can reconcile the paper's factor loadings approximately but the calculated t-stats a far off.

enter image description here

Whereas the paper arrives at a t-stat of 3.6 for the intercept my t-stat is only 1.28. Hence I assume my implementation of the Shanken-adjustment for the rolling beta estimation Fama/Macbeth procedure is faulty. My code works as follows:

% general calculation:
varianceOfDependent = cov(testAssetReturnData) ./ estimationPeriod;
factorCovariance = cov(factorData);

% ########################################################
% calculation for each cross-section regression:
% 1) variance calculation:
variance = (X'*X)^-1 * X' * varianceOfDependent * X * (X'*X)^-1; % variance estimate according to Cochrane, with X as Nxk matrix

% 2) calculate correctional factors
c =  regResult.beta(2:end) * factorCovariance^-1 * regResult.beta(2:end)'; % with regResult.beta(2:end) corresponding to the coefficient estimates for all factors (no intercept!)
modifiedFactorCovariance = [zeros(1,size(factorCovariance,2)+1); 

zeros(size(factorCovariance,2),1) factorCovariance];
    standardErrorsShanken = diag(sqrt(variance*(1+c) + modifiedFactorCovariance ./estimationPeriod))';
    tStatShanken = transpose(regResult.beta) ./ standardErrorsShanken; % transpose(regResult.beta) as lambda estimates of the period  

% ########################################################  
% Each tStatShanken is stored and the average is taken for each factor to arrive at the t-stat results

The implementation follows equation 41 of the linked paper: enter image description here

Do you know how to properly implement the Shanken-adjustments for the Fama/MacBeth approach? Many thanks!

$\endgroup$
0
$\begingroup$

I think I got the answer of how to implement the adjustment:

Based on the variance of lambdas for the Fama/MacBeth calculation $$ \sigma_{OLS}^2(\lambda)=1/T^2*\sum \limits_{t=1}^T (\hat\lambda_t-\bar\lambda)^2 $$

I implemented the following adjustment: $$ \sigma_{Shanken}^2(\lambda)=\sigma_{OLS}^2(\lambda) * (1+c) + \frac{\tilde{\sum_F}}{T} $$ with: $$ c = \hat{\lambda} * cov(factors)^{-1}* \hat{\lambda}'$$ where:

  • $$cov(factors)$$ is the variance-covariance matrix of assessed factors (which is an Nxk matrix for k-factors)
  • $$\hat{\lambda}$$ is the lambda estimate vector resulting from the mean of periodic cross-sectional regression
  • $$\tilde{\sum_F}$$ is the adjusted variance-covariance matrix from above with zeros in the first row and first column and the variance-covariance matrix in the right-bottom corner

When calculating a rolling-regression for the beta estimate the Shanken adjustments changes to c*: $$c^*=c*(1-\frac{1.6}{n})$$ with n as number of years in sample

!!! Please note that the adjustment factors changes if beta-estimation period deviates from a 60 month rolling beta approach !!!

Regards, Stonehenge

$\endgroup$
  • $\begingroup$ Cool, thanks for sharing your solution! $\endgroup$ – Richard Hardy Jun 11 at 9:57

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.