Regresiones lineales simples

Análisis de series temporales en Python

Rob Reider

Adjunct Professor, NYU-Courant Consultant, Quantopian

¿Qué es una regresión?

  • Regresión lineal simple:

$\ \ \ \ y_t = \alpha + \beta x_t + \epsilon_t$

Análisis de series temporales en Python

¿Qué es una regresión?

  • Mínimos cuadrados ordinarios (OLS)
Análisis de series temporales en Python

Paquetes de Python para hacer regresiones

  • En statsmodels:
    import statsmodels.api as sm
    sm.OLS(y, x).fit()
    
  • En numpy:
    np.polyfit(x, y, deg=1)
    
  • En pandas:
    pd.ols(y, x)
    
  • En scipy:
    from scipy import stats
    stats.linregress(x, y)
    

Aviso: el orden de x y y no es consistente entre paquetes

Análisis de series temporales en Python

Ejemplo: regresión de small caps sobre large caps

  • Importa el módulo statsmodels
    import statsmodels.api as sm
    
  • Como antes, calcula los cambios porcentuales en ambas series
    df['SPX_Ret'] = df['SPX_Prices'].pct_change()
    df['R2000_Ret'] = df['R2000_Prices'].pct_change()
    
  • Añade una constante al DataFrame para el intercepto de la regresión
    df = sm.add_constant(df)
    
Análisis de series temporales en Python

Ejemplo de regresión (continuación)

  • Fíjate que la primera fila de retornos es NaN
                SPX_Price  R2000_Price   SPX_Ret  R2000_Ret
    Date                                                     
    2012-11-01  1427.589966   827.849976       NaN        NaN
    2012-11-02  1414.199951   814.369995 -0.009379  -0.016283
    
  • Elimina la fila con NaN
      df = df.dropna()
    
  • Ejecuta la regresión
      results = sm.OLS(df['R2000_Ret'],df[['const','SPX_Ret']]).fit()
      print(results.summary())
    
Análisis de series temporales en Python

Ejemplo de regresión (continuación)

  • Resultado de la regresión

  • Intercepto en results.params[0]
  • Pendiente en results.params[1]
Análisis de series temporales en Python

Ejemplo de regresión (continuación)

  • Resultado de la regresión

Análisis de series temporales en Python

Relación entre R-cuadrado y correlación

  • $ [\text{corr} (x,y)]^2 = R^2$ (o R-cuadrado)
  • $ \text{sign(corr)} = \text{sign(regression slope)}$
  • En el último ejemplo:
    • R-cuadrado = 0.753
    • La pendiente es positiva
    • correlación = $ + \sqrt{0.753} = 0.868$
Análisis de series temporales en Python

¡Vamos a practicar!

Análisis de series temporales en Python

Preparing Video For Download...