Jednoduchá lineární regrese

Analýza časových řad v Pythonu

Rob Reider

Adjunct Professor, NYU-Courant Consultant, Quantopian

Co je to regrese?

  • Jednoduchá lineární regrese:

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

Analýza časových řad v Pythonu

Co je to regrese?

  • Metoda nejmenších čtverců (OLS)
Analýza časových řad v Pythonu

Pythonovské balíčky pro regresi

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

Pozor: pořadí x a y není napříč balíčky jednotné

Analýza časových řad v Pythonu

Příklad: Regrese výnosů malých akcií na velkých

  • Importujte modul statsmodels
    import statsmodels.api as sm
    
  • Jako dříve vypočítejte procentní změny obou řad
    df['SPX_Ret'] = df['SPX_Prices'].pct_change()
    df['R2000_Ret'] = df['R2000_Prices'].pct_change()
    
  • Přidejte do DataFrame konstantu pro intercept regrese
    df = sm.add_constant(df)
    
Analýza časových řad v Pythonu

Příklad regrese (pokračování)

  • První řádek výnosů je 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
    
  • Odstraňte řádek s NaN
      df = df.dropna()
    
  • Spusťte regresi
      results = sm.OLS(df['R2000_Ret'],df[['const','SPX_Ret']]).fit()
      print(results.summary())
    
Analýza časových řad v Pythonu

Příklad regrese (pokračování)

  • Výstup regrese

  • Intercept v results.params[0]
  • Sklon v results.params[1]
Analýza časových řad v Pythonu

Příklad regrese (pokračování)

  • Výstup regrese

Analýza časových řad v Pythonu

Vztah mezi R-kvadrátem a korelací

  • $ [\text{corr} (x,y)]^2 = R^2$ (neboli R-kvadrát)
  • $ \text{sign(corr)} = \text{sign(regression slope)}$
  • V předchozím příkladu:
    • R-kvadrát = 0,753
    • Sklon je kladný
    • Korelace = $ + \sqrt{0.753} = 0.868$
Analýza časových řad v Pythonu

Pojďme si procvičit!

Analýza časových řad v Pythonu

Preparing Video For Download...