Regresii liniare simple

Analiza seriilor de timp în Python

Rob Reider

Adjunct Professor, NYU-Courant Consultant, Quantopian

Ce este o regresie?

  • Regresia liniară simplă:

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

Analiza seriilor de timp în Python

Ce este o regresie?

  • Metoda celor mai mici pătrate (OLS)
Analiza seriilor de timp în Python

Pachete Python pentru regresii

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

Atenție: ordinea argumentelor x și y diferă de la un pachet la altul

Analiza seriilor de timp în Python

Exemplu: Regresia randamentelor small-cap pe large-cap

  • Importați modulul statsmodels
    import statsmodels.api as sm
    
  • Ca anterior, calculați variațiile procentuale ale ambelor serii
    df['SPX_Ret'] = df['SPX_Prices'].pct_change()
    df['R2000_Ret'] = df['R2000_Prices'].pct_change()
    
  • Adăugați o constantă în DataFrame pentru interceptul regresiei
    df = sm.add_constant(df)
    
Analiza seriilor de timp în Python

Exemplu de regresie (continuare)

  • Observați că primul rând de randamente este 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ți rândul cu NaN
      df = df.dropna()
    
  • Rulați regresia
      results = sm.OLS(df['R2000_Ret'],df[['const','SPX_Ret']]).fit()
      print(results.summary())
    
Analiza seriilor de timp în Python

Exemplu de regresie (continuare)

  • Rezultatele regresiei

  • Interceptul în results.params[0]
  • Panta în results.params[1]
Analiza seriilor de timp în Python

Exemplu de regresie (continuare)

  • Rezultatele regresiei

Analiza seriilor de timp în Python

Relația dintre R-pătrat și corelație

  • $ [\text{corr} (x,y)]^2 = R^2$ (sau R-pătrat)
  • $ \text{sign(corr)} = \text{sign(panta regresiei)}$
  • În ultimul exemplu:
    • R-pătrat = 0,753
    • Panta este pozitivă
    • corelație = $ + \sqrt{0.753} = 0.868$
Analiza seriilor de timp în Python

Să exersăm!

Analiza seriilor de timp în Python

Preparing Video For Download...