超過兩個解釋變數

使用 Python 的 statsmodels 進行迴歸分析:中級

Maarten Van den Broeck

Content Developer at DataCamp

回顧上次內容

sns.scatterplot(x="length_cm", 
                y="height_cm",
                data=fish,
                hue="mass_g")

2D 散佈圖,以色彩呈現第三個數值變數 mass。

使用 Python 的 statsmodels 進行迴歸分析:中級

依物種分面

grid = sns.FacetGrid(data=fish,

col="species",
hue="mass_g", col_wrap=2,
palette="plasma")
grid.map(sns.scatterplot,
         "length_cm",
         "height_cm")
plt.show()

魚的高度、長度與質量散佈圖,依物種分面。顏色越亮代表越重。

使用 Python 的 statsmodels 進行迴歸分析:中級

依物種分面

  • 可以用多個類別變數來分面
  • 注意過度分面
  • 變數越多,繪圖越難讀

魚的高度、長度與質量散佈圖,依物種分面。顏色越亮代表越重。

使用 Python 的 statsmodels 進行迴歸分析:中級

不同層級的交互作用

沒有交互作用

ols("mass_g ~ length_cm + height_cm + species + 0", data=fish).fit()

變數兩兩之間的二因交互作用

ols(
  "mass_g ~ length_cm + height_cm + species +
  length_cm:height_cm + length_cm:species + height_cm:species + 0", data=fish).fit()

三因交互作用(三者同時)

ols(
  "mass_g ~ length_cm + height_cm + species + 
  length_cm:height_cm + length_cm:species + height_cm:species + length_cm:height_cm:species + 0", data=fish).fit()
使用 Python 的 statsmodels 進行迴歸分析:中級

包含所有交互作用

ols(
  "mass_g ~ length_cm + height_cm + species + 
  length_cm:height_cm + length_cm:species + height_cm:species + length_cm:height_cm:species + 0", 
  data=fish).fit()

等同於

ols(
  "mass_g ~ length_cm * height_cm * species + 0", 
  data=fish).fit()
使用 Python 的 statsmodels 進行迴歸分析:中級

僅二因交互作用

ols(
  "mass_g ~ length_cm + height_cm + species + 
  length_cm:height_cm + length_cm:species + height_cm:species + 0", 
  data=fish).fit()

等同於

ols(
  "mass_g ~ (length_cm + height_cm + species) ** 2 + 0", 
  data=fish).fit()
使用 Python 的 statsmodels 進行迴歸分析:中級

預測流程

mdl_mass_vs_all = ols(
  "mass_g ~ length_cm * height_cm * species + 0",
  data=fish).fit()

length_cm = np.arange(5, 61, 5)
height_cm = np.arange(2, 21, 2)
species = fish["species"].unique()

p = product(length_cm, height_cm, species)

explanatory_data = pd.DataFrame(p,
                                columns=["length_cm",
                                         "height_cm",
                                         "species"])

prediction_data = explanatory_data.assign(
  mass_g = mdl_mass_vs_all.predict(explanatory_data))

print(prediction_data)
     length_cm  height_cm species       mass_g
0            5          2   Bream  -570.656437
1            5          2   Roach    31.449145
2            5          2   Perch    43.789984
3            5          2    Pike   271.270093
4            5          4   Bream  -451.127405
..         ...        ...     ...          ...
475         60         18    Pike  2690.346384
476         60         20   Bream  1531.618475
477         60         20   Roach  2621.797668
478         60         20   Perch  3041.931709
479         60         20    Pike  2926.352397

[480 rows x 4 columns]
使用 Python 的 statsmodels 進行迴歸分析:中級

一起來練習吧!

使用 Python 的 statsmodels 進行迴歸分析:中級

Preparing Video For Download...