簡單線性迴歸

Python 中的時間序列分析

Rob Reider

Adjunct Professor, NYU-Courant Consultant, Quantopian

什麼是迴歸?

  • 簡單線性迴歸

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

Python 中的時間序列分析

什麼是迴歸?

  • Ordinary Least Squares (OLS)
Python 中的時間序列分析

用於執行迴歸的 Python 套件

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

警告:xy 的順序在不同套件中不一致

Python 中的時間序列分析

範例:小型股報酬對大型股的迴歸

  • 匯入 statsmodels 模組
    import statsmodels.api as sm
    
  • 和之前一樣,計算兩個序列的報酬率變動百分比
    df['SPX_Ret'] = df['SPX_Prices'].pct_change()
    df['R2000_Ret'] = df['R2000_Prices'].pct_change()
    
  • 在 DataFrame 中加入常數項作為截距
    df = sm.add_constant(df)
    
Python 中的時間序列分析

迴歸範例(續)

  • 注意第一列報酬為 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
    
  • 刪除含 NaN 的列
      df = df.dropna()
    
  • 執行迴歸
      results = sm.OLS(df['R2000_Ret'],df[['const','SPX_Ret']]).fit()
      print(results.summary())
    
Python 中的時間序列分析

迴歸範例(續)

  • 迴歸輸出

  • 截距在 results.params[0]
  • 斜率在 results.params[1]
Python 中的時間序列分析

迴歸範例(續)

  • 迴歸輸出

Python 中的時間序列分析

R-squared 與相關係數的關係

  • $ [\text{corr} (x,y)]^2 = R^2$(或 R-squared)
  • $ \text{sign(corr)} = \text{sign(regression slope)}$
  • 在上一個範例:
    • R-squared = 0.753
    • 斜率為正
    • correlation = $ + \sqrt{0.753} = 0.868$
Python 中的時間序列分析

一起來練習吧!

Python 中的時間序列分析

Preparing Video For Download...