4
$\begingroup$

I'm toying around w/ the Fama-French 3 factor data, and I'm having a hard time getting results that approximate what was covered in their paper here: https://www.bauer.uh.edu/rsusmel/phd/Fama-French_JFE93.pdf

I downloaded the latest csv file from their website at this url: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html#Research.

Here's some python code of a regression I did on a single stock. I know this isn't the same as an entire portfolio, but I still think the results are incorrect.

# cleaned file
fama = pd.read_csv('Downloads/fama_french_factors.csv')

# single stock data
data = yf.download('AAPL', freq = 'M')['Adj Close']

# get EOM returns for Apple
data = data.resample('M', convention = 'end').last()
data = data.pct_change().dropna()
data.index = data.index + MonthEnd(0)

# merge the files together
data = pd.merge_asof(data, fama, left_index = True, right_index = True)

# run a regression
y = data['Return']
X = data[['Mkt', 'SMB', 'HML']]
X = sm.add_constant(X)

# fit model w/ statsmodels
mod = sm.OLS(y, X)
res = mod.fit()

print(res.summary())

When I run this the regression gives an R2 value of 0.288, which strikes me as really low. I know my regressions don't exactly match what was done in paper, which is excess return for a portfolio regressed against the 3 factors, but I suspect there's something wrong, likely with how the dates are indexed against one another.

The fama data only contains year and month, and I'm not clear if those represent returns at the beginning of the month or the end of the month, which might be impact the results.

Wondering if anyone knows what's wrong with my setup.

$\endgroup$
1
  • 3
    $\begingroup$ Fama french regressions have high r-square when the lefthandside is the return of some portfolio, usually not a single stock. $\endgroup$ Commented Sep 18, 2023 at 18:35

1 Answer 1

8
$\begingroup$

That's perfectly normal. You are running a regression for a single stock. Single stocks have a lot of idiosyncratic risk (which is what the $R^2$ is capturing).

I just run the fama-french regression for Apple, and here's what I got (so very similar to you):

      Source |       SS           df       MS      Number of obs   =       504
-------------+----------------------------------   F(3, 500)       =     66.44
       Model |  2.39063767         3  .796879224   Prob > F        =    0.0000
    Residual |  5.99656588       500  .011993132   R-squared       =    0.2850
-------------+----------------------------------   Adj R-squared   =    0.2807
       Total |  8.38720355       503  .016674361   Root MSE        =    .10951

------------------------------------------------------------------------------
     aapl_rf | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
       mktrf |   1.235098   .1121975    11.01   0.000     1.014661    1.455535
         hml |   -.862915   .1624236    -5.31   0.000    -1.182032    -.543798
         smb |   .2237973   .1714526     1.31   0.192     -.113059    .5606537
       _cons |   .0135796   .0049681     2.73   0.006     .0038186    .0233406
------------------------------------------------------------------------------

So $R^2 = 0.285$

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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