Fama and MacBeth (1973) Two-Pass Regressions

Questions related to panel (pooled cross-section time series) data.
TomDoan
Posts: 7776
Joined: Wed Nov 01, 2006 4:36 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by TomDoan »

Aren't you confusing Fama-French with Fama-MacBeth? Fama-French does a time series regression for each i, then a cross section regression on the estimates (which sounds like what you're trying to do). Fama-MacBeth does a cross section regression at each t, then a time series regression on the estimates.
fan
Posts: 215
Joined: Wed Jun 19, 2013 5:14 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by fan »

TomDoan wrote:Aren't you confusing Fama-French with Fama-MacBeth? Fama-French does a time series regression for each i, then a cross section regression on the estimates (which sounds like what you're trying to do). Fama-MacBeth does a cross section regression at each t, then a time series regression on the estimates.
Dear Tom, Thank you for the reply. The information I found about the Fama-MacBeth two pass regressions is such:

The Fama-Macbeth regression works with multiple assets across time (panel data). The parameters are estimated in two steps:
1) First regress each asset against the proposed risk factors to determine that asset's beta for that risk factor.
2) Then regress all asset returns for a fixed time period against the estimated betas to determine the risk premium for each factor.

My understanding is that that the first step is the time-series regressions to generate the betas and then do the cross-section regressions in the second step by using the estimated betas as explanatory variables. Would you please kindly let me know if my understanding is incorrect? Thank you
TomDoan
Posts: 7776
Joined: Wed Nov 01, 2006 4:36 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by TomDoan »

The information that I have on Fama and MacBeth comes from reading....Fama and MacBeth. They do an elaborate calculation that generates time-varying betas for each portfolio. That generates a data set similar to the one that I posted in the example above which can be analyzed by cross section regressions for each time period followed by time series "regressions" (on a constant) for each component. You do not have such a data set and you aren't generating one with what you're doing. That's why what you're trying makes no real sense, since you're taking a fixed set of betas and replicating it across time. Since the beta's are the same at each time period, the first step in "Fama-MacBeth" is vacuous, since each regression will be identical. Instead, you should be doing Fama-French, which is as I described it.
fan
Posts: 215
Joined: Wed Jun 19, 2013 5:14 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by fan »

TomDoan wrote:The information that I have on Fama and MacBeth comes from reading....Fama and MacBeth. They do an elaborate calculation that generates time-varying betas for each portfolio. That generates a data set similar to the one that I posted in the example above which can be analyzed by cross section regressions for each time period followed by time series "regressions" (on a constant) for each component. You do not have such a data set and you aren't generating one with what you're doing. That's why what you're trying makes no real sense, since you're taking a fixed set of betas and replicating it across time. Since the beta's are the same at each time period, the first step in "Fama-MacBeth" is vacuous, since each regression will be identical. Instead, you should be doing Fama-French, which is as I described it.
hi Tom, Thanks for the reply. I totally agree with what you mentioned above. The reason why I am doing what I am doing is that Petkova(2006) and He,Huh,and Lee(2010) did Fama-Macbeth regressions in the same way as I am doing in their papers. One of my purposes is to replicate the study of He (2010) along with my own research. Could you please kindly let me know whether my code are right for the tests I would like to do, treating the betas as time invariant explanatory variables in the cross-section regressions?
TomDoan
Posts: 7776
Joined: Wed Nov 01, 2006 4:36 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by TomDoan »

I hate to keep harping on this, but He, Ho and Lee never reference Fama and MacBeth. They reference four Fama-French papers. Petkova has Fama-French in the title. They are not doing Fama-MacBeth. They are doing Fama-French. Both involve two passes, but they are a different pair of passes. (Fama-MacBeth really is three passes, since one is used to generate the time-varying betas). Is what you are trying to do Fama-French?
fan
Posts: 215
Joined: Wed Jun 19, 2013 5:14 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by fan »

TomDoan wrote:I hate to keep harping on this, but He, Ho and Lee never reference Fama and MacBeth. They reference four Fama-French papers. Petkova has Fama-French in the title. They are not doing Fama-MacBeth. They are doing Fama-French. Both involve two passes, but they are a different pair of passes. (Fama-MacBeth really is three passes, since one is used to generate the time-varying betas). Is what you are trying to do Fama-French?
Hi Tom. Thank you so much for point out my mistake and help me understand better about the fama-french and fama-macbeth regressions. Yes, I am trying to do Fama-French regressions here.
fan
Posts: 215
Joined: Wed Jun 19, 2013 5:14 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by fan »

Hi Tom, could you please kindly let me know how I can save coefficients into series ? Thank you.

Code: Select all

dec vect[series] b(4)
clear(zeros) b
linreg r1
# constant mktrf smb hml
compute %pt(b, [u]X[/u], %beta)
* I am not sure what I should put to replace X.
TomDoan
Posts: 7776
Joined: Wed Nov 01, 2006 4:36 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by TomDoan »

You don't have to create a panel data set since that was all part of generating a Fama-MacBeth style data set which you don't need. This does the time series regressions and saves the coefficients, then does the cross section regression of the mean returns on the beta's.

Code: Select all

dec vect[series] betas(3)
dec series avgret
clear(zeros) betas avgret
*
* Do time series regressions for each portfolio, saving the mean return (into
* avgret) and the coefficients on the factors (into BETAS).
*
compute port=0
dofor s = sl to bh
   linreg s
   # constant mktrf smb  hml   
   compute port=port+1
   compute %pt(betas,port,%xsubvec(%beta,2,4))
   compute avgret(port)=%mean
end dofor s
*
* Run the cross section regression across portfolios
*
linreg avgret 1 port
# betas
fan
Posts: 215
Joined: Wed Jun 19, 2013 5:14 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by fan »

TomDoan wrote:You don't have to create a panel data set since that was all part of generating a Fama-MacBeth style data set which you don't need. This does the time series regressions and saves the coefficients, then does the cross section regression of the mean returns on the beta's.

Code: Select all

dec vect[series] betas(3)
dec series avgret
clear(zeros) betas avgret
*
* Do time series regressions for each portfolio, saving the mean return (into
* avgret) and the coefficients on the factors (into BETAS).
*
compute port=0
dofor s = sl to bh
   linreg s
   # constant mktrf smb  hml   
   compute port=port+1
   compute %pt(betas,port,%xsubvec(%beta,2,4))
   compute avgret(port)=%mean
end dofor s
*
* Run the cross section regression across portfolios
*
linreg avgret 1 port
# betas
Thank you so much for the reply.
fan
Posts: 215
Joined: Wed Jun 19, 2013 5:14 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by fan »

TomDoan wrote:You don't have to create a panel data set since that was all part of generating a Fama-MacBeth style data set which you don't need. This does the time series regressions and saves the coefficients, then does the cross section regression of the mean returns on the beta's.

Code: Select all

dec vect[series] betas(3)
dec series avgret
clear(zeros) betas avgret
*
* Do time series regressions for each portfolio, saving the mean return (into
* avgret) and the coefficients on the factors (into BETAS).
*
compute port=0
dofor s = sl to bh
   linreg s
   # constant mktrf smb  hml   
   compute port=port+1
   compute %pt(betas,port,%xsubvec(%beta,2,4))
   compute avgret(port)=%mean
end dofor s
*
* Run the cross section regression across portfolios
*
linreg avgret 1 port
# betas
Dear Tom, Could you please kindly show me how I can implement shanken's (1992) correction to fix the errors-in-variables problem in the cross section regression ? Many Thanks
IRJ
Posts: 48
Joined: Wed Jan 10, 2007 1:15 am

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by IRJ »

My understanding is that the Shanken (1992) "On the estimation of beta pricing models", Review of Financial Studies 5, 1-34 correction amounts to multiplying the estimated variance of the OLS intercept (the variance of the alpha in the asset pricing model) by an adjustment factor of 1+(E(Rmkt)/Var(Rmkt))^2 where E(Rmkt) and var(Rmkt) are the mean and variance of the the excess returns on the market portfolio. You can compute the specific adjustment factor from your data directly by computing the mean of the excess returns on the market and its variance (so the adjustment factor depends on your specific sample period). While the prior adjustment factor is small for monthly data, it is important when using annual data.
fan
Posts: 215
Joined: Wed Jun 19, 2013 5:14 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by fan »

fan wrote:
TomDoan wrote:You don't have to create a panel data set since that was all part of generating a Fama-MacBeth style data set which you don't need. This does the time series regressions and saves the coefficients, then does the cross section regression of the mean returns on the beta's.

Code: Select all

dec vect[series] betas(3)
dec series avgret
clear(zeros) betas avgret
*
* Do time series regressions for each portfolio, saving the mean return (into
* avgret) and the coefficients on the factors (into BETAS).
*
compute port=0
dofor s = sl to bh
   linreg s
   # constant mktrf smb  hml   
   compute port=port+1
   compute %pt(betas,port,%xsubvec(%beta,2,4))
   compute avgret(port)=%mean
end dofor s
*
* Run the cross section regression across portfolios
*
linreg avgret 1 port
# betas
Thank you so much for the reply.
Hi Tom, If I would like to address the errors-in-variables problem in the cross section regression by using GLS estimation method, how I can do it? How can I find the adjustment factor matrix? Thank you in advance for your help
fan
Posts: 215
Joined: Wed Jun 19, 2013 5:14 pm

Re: Fama and MacBeth (1973) Two-Pass Regressions

Unread post by fan »

IRJ wrote:My understanding is that the Shanken (1992) "On the estimation of beta pricing models", Review of Financial Studies 5, 1-34 correction amounts to multiplying the estimated variance of the OLS intercept (the variance of the alpha in the asset pricing model) by an adjustment factor of 1+(E(Rmkt)/Var(Rmkt))^2 where E(Rmkt) and var(Rmkt) are the mean and variance of the excess returns on the market portfolio. You can compute the specific adjustment factor from your data directly by computing the mean of the excess returns on the market and its variance (so the adjustment factor depends on your specific sample period). While the prior adjustment factor is small for monthly data, it is important when using annual data.

hi IRJ, thank you for the reply. I am still not clear how to generate the Shanken corrected standard error for alphas on mktreturn, smb, and hml in the pricing test. Could you please kindly share your knowledge with me? Thanks
Post Reply