平行傾き線形回帰

statsmodels を使った中級 Regression

Maarten Van den Broeck

Content Developer at DataCamp

前のコース

このコースは、Introduction to Regression with statsmodels in Python の知識を前提としています

statsmodels を使った中級 Regression

単回帰から重回帰へ

重回帰は、説明変数を複数持つ回帰モデルです。

説明変数を増やすことで、より深い洞察やより正確な予測を得られます。

statsmodels を使った中級 Regression

コースの内容

第1章

  • 「平行傾き」回帰

第2章

  • 交互作用
  • シンプソンのパラドックス

第3章

  • 説明変数の追加
  • 線形回帰の仕組み

第4章

  • 重ロジスティック回帰
  • ロジスティック分布
  • ロジスティック回帰の仕組み
statsmodels を使った中級 Regression

魚のデータセット

massg lengthcm species
242.0 23.2 Bream
5.9 7.5 Perch
200.0 30.0 Pike
40.0 12.9 Roach
  • 各行は1匹の魚を表します
  • mass_g は応答変数です
  • 数値の説明変数が1つ、カテゴリの説明変数が1つ
statsmodels を使った中級 Regression

説明変数を1つずつ扱う

from statsmodels.formula.api import ols

mdl_mass_vs_length = ols("mass_g ~ length_cm",
                         data=fish).fit()
print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
dtype: float64
  • 切片の係数が1つ
  • 傾きの係数が1つ
mdl_mass_vs_species = ols("mass_g ~ species + 0",
                          data=fish).fit()

print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
dtype: float64
  • カテゴリごとに切片の係数が1つ
statsmodels を使った中級 Regression

両方の説明変数を同時に扱う

mdl_mass_vs_both = ols("mass_g ~ length_cm + species + 0",
                       data=fish).fit()
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
dtype: float64
  • 傾きの係数が1つ
  • カテゴリごとに切片の係数が1つ
statsmodels を使った中級 Regression

係数を比較する

print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
statsmodels を使った中級 Regression

可視化:数値の説明変数が1つの場合

import matplotlib.pyplot as plt
import seaborn as sns

sns.regplot(x="length_cm",
            y="mass_g",
            data=fish,
            ci=None)

plt.show()

魚の質量と体長の散布図(線形トレンドライン付き)

statsmodels を使った中級 Regression

可視化:カテゴリの説明変数が1つの場合

sns.boxplot(x="species",
            y="mass_g",
            data=fish,
            showmeans=True)

種ごとの魚の質量の箱ひげ図

statsmodels を使った中級 Regression

可視化:両方の説明変数を使う場合

coeffs = mdl_mass_vs_both.params
print(coeffs)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
ic_bream, ic_perch, ic_pike, ic_roach, sl = coeffs
sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="species",
                data=fish)
plt.axline(xy1=(0, ic_bream), slope=sl, color="blue")
plt.axline(xy1=(0, ic_perch), slope=sl, color="green")
plt.axline(xy1=(0, ic_pike), slope=sl, color="red")
plt.axline(xy1=(0, ic_roach), slope=sl, color="orange")

種ごとに分けた、魚の質量と体長の平行傾きモデル

statsmodels を使った中級 Regression

練習しましょう!

statsmodels を使った中級 Regression

Preparing Video For Download...