モデル式における項の意味(層別モデルとダミー変数モデルの違いなど)
)前回の記事で、作成したモデル式はどういうことを仮定しているかちゃんと考えようという旨のことを書いた。
そのため、具体的に置いている仮定によってどうモデル式が変わるかを改めて考える。
例えば同じ数の変数を使っていても以下のような処理を加えるとモデルの仮定が変わる。
- ダミー変数をつける
- 交差項をつける
- インプットを特定の種類のデータのみにして、同じモデルを適応したとき
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)
まとめ
当たり前だが、モデル式を変えると背景に置いている仮定(データ同士の関係)が大きく変わる。
そのため、どういう仮定を置くことが現実を表しているか。また、結果が妥当か、どういうことが言えそうか。ということをしっかりと意識しながらモデルを作成することが大切。