De uma fórmula a uma regressão completa
statsmodels.formula.api.ols('excess ~ mkt_rf + smb + hml', data=table).fit() ajusta uma regressão de mínimos quadrados ordinários a partir de uma fórmula de uma linha: o nome à esquerda de ~ é o que se explica, os da direita são os regressores, e uma constante é adicionada para você (escreva - 1 para removê-la). O objeto de resultado guarda tudo: params (os coeficientes), bse (seus erros padrão), tvalues, pvalues, rsquared, rsquared_adj, aic, resid e summary() para o relatório impresso. Como cada um é uma Series do pandas ou um número, colocá-los lado a lado num DataFrame dá uma tabela limpa, e res.predict(nova_tabela) aplica a fórmula ajustada a novas linhas com os mesmos nomes de coluna. A regressão fatorial de uma ação é o uso padrão: excess é o retorno da ação acima da taxa livre de risco, mkt_rf o do mercado, smb o fator tamanho e hml o fator valor.
Duas comparações tornam a tabela útil. O CAPM usa só o mercado, excess ~ mkt_rf; o modelo de três fatores acrescenta smb e hml. Acrescentar regressores nunca reduz o R², então use o R² ajustado, o AIC ou um teste F: ff3.compare_f_test(capm) devolve a estatística F, seu valor p e o número de regressores extras, e um valor p pequeno diz que os dois fatores extras trazem poder explicativo real. Outro ponto de rotina é a própria tabela. Os retornos de fim de mês vêm do último fechamento de cada mês civil (prices.groupby(prices.index.to_period('M')).last() e depois pct_change()), e devem ser unidos à tabela de fatores no mesmo mês: uma regressão com meses desalinhados é uma regressão sobre ruído.
- Uma linha, uma regressão: a fórmula nomeia a resposta e os regressores, e o objeto de resultado guarda cada estatística.
- Compare modelos aninhados com a ferramenta certa: o R² sempre sobe, então use o R² ajustado, o AIC ou o teste F.
- Alinhe os meses primeiro: um retorno de fim de mês vai com os fatores do mesmo mês.
Lab: o que é avaliado
- A tabela de regressão mensal15 pts
- O ajuste do CAPM10 pts
- O ajuste de três fatores10 pts
- Uma tabela de coeficientes limpa15 pts
- O modelo maior vale a pena?15 pts
- Uma previsão10 pts
- O estudo completo25 pts