Quant500 Academy

7. Reading the output: coefficients and t-stats

Level 6: Regression and Pricing Models

Estimating the model is the easy part. The hard part is reading the table that comes out.

From each fitted model two objects are extracted that must always be looked at together: the coefficients (.params) and the t statistics (.tvalues). The lecturer collects them in a single DataFrame and also uses summary_col to present the three models in comparable columns:

CAPMcoeff, CAPMtstat = CAPM.params, CAPM.tvalues
FF3coeff, FF3tstat = FF3.params, FF3.tvalues
FF5coeff, FF5tstat = FF5.params, FF5.tvalues

results_df = pd.DataFrame({'CAPMcoeff': CAPMcoeff, 'CAPMtstat': CAPMtstat,
                           'FF3coeff': FF3coeff, 'FF3tstat': FF3tstat,
                           'FF5coeff': FF5coeff, 'FF5tstat': FF5tstat},
                          index=['Intercept', 'MKT', 'SMB', 'HML', 'RMW', 'CMA'])

dfoutput = summary_col([CAPM, FF3, FF5], stars=True, float_format='%0.4f',
                       model_names=['CAPM', 'FF3', 'FF5'],
                       info_dict={'N': lambda x: '{0:d}'.format(int(x.nobs)),
                                  'Adjusted R2': lambda x: '{:.4f}'.format(x.rsquared_adj)},
                       regressor_order=['Intercept', 'MKT', 'SMB', 'HML', 'RMW', 'CMA'])
print(dfoutput)

FF5.summary()

Putting the three models side by side is exactly what lets you answer the question that matters: how the intercept moves as we add factors. If the CAPM alpha was large and by the time you reach FF5 it has shrunk to nothing, the conclusion is that what looked like skill was factor exposure.

The cov_type='HAC' argument with maxlags=1 deserves a note: it changes how the standard errors are computed and therefore the t statistics and the p-values. It does not change the coefficients. If two colleagues obtain identical betas but different t-stats, that is nearly always the explanation.

Parameter terminology. Here comes a distinction that sounds pedantic and is not. In general we do not know the true underlying values of the beta coefficients. We write beta-hat for the estimate of the unknown parameter beta. And we can speak of beta-hat in two different ways:

When we speak of beta-hat as an estimator, we can also speak of its mean, its variance and its distribution, which matter a great deal when deciding whether one particular estimation method is better than an alternative.

Translated into what you do every day: the 1.42 that shows up in the MKT column is an estimate, a number that came out of that sample. The OLS procedure that produced it is the estimator. If you repeated the exercise over another period another number would come out, and the dispersion of those hypothetical numbers is exactly what the standard error measures. That is why a beta without its standard error beside it is incomplete information: without the second column you do not know whether the 1.42 is solid or noise with decimals.

To go deeper into this lesson

The rest of Quant500

What you are learning, applied to the index every day:

The model portfolio, weekly in your inbox

Every Saturday, its week in one minute: how it went, the best and the worst, and which insiders bought with their own money. Plus, the day the model is rebuilt, which stocks come in and which go out. A simulation, not advice. At most one email a week, no ads, no account; one-click unsubscribe. Made by one person: Pol Gracia.

A model portfolio with simulated results, not a personalized recommendation. Your email is used for this only: privacy.

Behind the Academy and the rest of Quant500 there is one person: Pol Gracia Serrahima.