Regressioni lineari semplici

Analisi delle serie temporali in Python

Rob Reider

Adjunct Professor, NYU-Courant Consultant, Quantopian

Cos'è una regressione?

  • Regressione lineare semplice:

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

Analisi delle serie temporali in Python

Cos'è una regressione?

  • Ordinary Least Squares (OLS)
Analisi delle serie temporali in Python

Pacchetti Python per eseguire regressioni

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

Attenzione: l'ordine di x e y non è coerente tra i pacchetti

Analisi delle serie temporali in Python

Esempio: regressione dei rendimenti Small Cap su Large Cap

  • Importa il modulo statsmodels
    import statsmodels.api as sm
    
  • Come prima, calcola le variazioni percentuali di entrambe le serie
    df['SPX_Ret'] = df['SPX_Prices'].pct_change()
    df['R2000_Ret'] = df['R2000_Prices'].pct_change()
    
  • Aggiungi una costante al DataFrame per l'intercetta della regressione
    df = sm.add_constant(df)
    
Analisi delle serie temporali in Python

Esempio di regressione (continua)

  • Nota che la prima riga dei rendimenti è 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 riga con NaN
      df = df.dropna()
    
  • Esegui la regressione
      results = sm.OLS(df['R2000_Ret'],df[['const','SPX_Ret']]).fit()
      print(results.summary())
    
Analisi delle serie temporali in Python

Esempio di regressione (continua)

  • Output della regressione

  • Intercetta in results.params[0]
  • Pendenza in results.params[1]
Analisi delle serie temporali in Python

Esempio di regressione (continua)

  • Output della regressione

Analisi delle serie temporali in Python

Relazione tra R-quadro e correlazione

  • $ [\text{corr} (x,y)]^2 = R^2$ (o R-quadro)
  • $ \text{sign(corr)} = \text{sign(regression slope)}$
  • Nell'ultimo esempio:
    • R-quadro = 0,753
    • Pendenza positiva
    • correlazione = $ + \sqrt{0.753} = 0.868$
Analisi delle serie temporali in Python

Esercitiamoci!

Analisi delle serie temporali in Python

Preparing Video For Download...