多于两个解释变量

Python 中级回归:使用 statsmodels

Maarten Van den Broeck

Content Developer at DataCamp

回顾上节课

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

二维散点图,质量用颜色表示第三个数值变量。

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

¡Vamos a practicar!

Python 中级回归:使用 statsmodels

Preparing Video For Download...