まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

モデル式における項の意味(層別モデルとダミー変数モデルの違いなど)

)前回の記事で、作成したモデル式はどういうことを仮定しているかちゃんと考えようという旨のことを書いた。
そのため、具体的に置いている仮定によってどうモデル式が変わるかを改めて考える。

knknkn.hatenablog.com

例えば同じ数の変数を使っていても以下のような処理を加えるとモデルの仮定が変わる。

  • ダミー変数をつける
  • 交差項をつける
  • インプットを特定の種類のデータのみにして、同じモデルを適応したとき

irisを用いた例

それぞれの違いについてirisデータのSepal.Length(がく片の長さ)とSepal.Width(がく片の幅)とSpecies(種類)を用いて考える。
なお単純化のために、Sepal.Lengthをlength、Sepal.Widthをwidthと記載する。また、Speciesはsetosaとversicolorのみにした。

library(tidyverse)

data = as_tibble(iris) %>% 
  filter(Species %in% c('setosa', 'versicolor')) %>% 
  rename(species = Species,
         length = Sepal.Length,
         width = Sepal.Width) %>% 
  select(species, length, width)

一番単純な式

回帰式として 、length ~ widthを考える。

data %>% 
  lm(formula = length ~ width)

# Coefficients:
#   (Intercept)        width  
# 6.326       -0.276  

式に置いている仮定

これは、以下を仮定している。

  • lengthとwidthが線形
  • speciesが違ってもlengthとwidthの関係が変わらない(setosaでもversicolorでも傾きが同じ)
  • speciesが違ってもlengthのベースが変わらない(setosaでもversicolorでも切片が同じ)

結果の解釈

  • widthが1増えるとどのspeciesでもlengthが-0.276増加する
  • ベースの値(width=0)はどのspeciesでも6.326

ダミー変数をつける

回帰式として 、length ~ width + species(setosaダミー、versicolorダミー)を考える。

data %>%
  lm(formula = length ~ width + species)
# Coefficients:
#   (Intercept)              width  speciesversicolor  
# 2.3956             0.7615             1.4311  

式に置いている仮定

これは、以下を仮定している。

  • lengthとwidthが線形
  • speciesが違ってもlengthとwidthの関係が変わらない(setosaでもversicolorでも傾きが同じ)
  • speciesが違うとlengthのベースが変わる(setosaとversicolorで切片が違う)

結果の解釈

  • widthが1増えるとどのspeciesでもlengthが0.7615増加する
  • ベースの値(width=0)は、setosaが2.3956 + 0、versicolorが2.3956 + 1.4311

交差項がついたモデル

回帰式として 、length ~ width + species(setosaダミー、versicolorダミー) + width * species(setosaダミー、versicolorダミー)を考える。

data %>%
  lm(formula = length ~ width + species + width*species)

# Coefficients:
#   (Intercept)                    width        speciesversicolor  width:speciesversicolor  
# 2.6390                   0.6905                   0.9007                   0.1746  

式に置いている仮定

これは、以下を仮定している。

  • lengthとwidthが線形
  • speciesが違うとlengthとwidthの関係が変わる(setosaとversicolorで傾きが違う)
  • speciesが違うとlengthのベースが変わる(setosaとversicolorで切片が違う)

結果の解釈

  • widthが1増えると、setosaが0.6905 + 0、versicolorが0.6905 + 0.1746 増加する
  • ベースの値(width=0)は、setosaが2.6390 + 0、versicolorが2.6390 + 0.9007

インプットを特定の種類のデータのみにして、同じモデルを適応したとき

回帰式として 、インプットがsetosaのときのlength ~ width、versicolorのときのlength ~ widthをそれぞれ考える。

# satoseのみ
data %>%
  filter(species == 'setosa') %>%
  lm(formula = length ~ width)
# Coefficients:
#   (Intercept)        width  
# 2.6390       0.6905  

# versicolorのみ
data %>%
  filter(species == 'versicolor') %>%
  lm(formula = length ~ width)
# Coefficients:
#   (Intercept)        width  
# 3.5397       0.8651  

式に置いている仮定

これは、以下を仮定している。

  • lengthとwidthが線形
  • speciesが違うとlengthとwidthの関係が変わる(setosaとversicolorで傾きが違う)
  • speciesが違うとlengthのベースが変わる(setosaとversicolorで切片が違う)

つまり、「(全データをインプットとした)交差項がついたモデル」のlength ~ width + species(setosaダミー、versicolorダミー) + width * species(setosaダミー、versicolorダミー)と全く同じモデルとなる。

このことは結果が同じことを言っていることからもわかる。

結果の解釈

  • widthが1増えると、setosaが0.6905、versicolorが0.8651( = 0.6905 + 0.1746) 増加する
  • ベースの値(width=0)は、setosaが2.6390 + 0、versicolorが3.5397( = 2.6390 + 0.9007)

まとめ

当たり前だが、モデル式を変えると背景に置いている仮定(データ同士の関係)が大きく変わる。

そのため、どういう仮定を置くことが現実を表しているか。また、結果が妥当か、どういうことが言えそうか。ということをしっかりと意識しながらモデルを作成することが大切。