
書記が数学やるだけ#337 交互作用を含めた二元配置分散分析
前回に続き,今回は交互作用を含めたモデルを考える。
問題
本問は『一般線形モデルによる生物科学のための現代統計学』で公開されているデータセットに基づいている。
説明
交互作用は2つ以上の因子の組み合わせにより現れる相乗効果のことで,各要因のみでは説明できない効果を示す。
交互作用図により可視化でき,グラフが平行でない場合に交互作用の存在を疑う。
交互作用を含めることにより,平方和や自由度はさらに分割される。
交互作用は要因間の積によりモデル化される。
解答
今回は,交互作用図を描くためにstatsmodels.graphics.factorplotsを使ってみる。
#ライブラリの読み込み
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import scipy as sp
import statsmodels
import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.graphics.factorplots import interaction_plot#データの読み込み
data = pd.read_csv('分散分析-3.csv')
data#カテゴリカル変数への変換
data['BED'] = data['BED'].astype(str)
data['WATER'] = data['WATER'].astype(str)
data['SHADE'] = data['SHADE'].astype(str)交互作用図をプロットしてみる。
#WATERとSHADEの交互作用図
fig_WS = interaction_plot(data.WATER, data.SHADE, data.BLOOMS)#BEDとWATERの交互作用図
fig_BW = interaction_plot(data.BED, data.WATER, data.BLOOMS)#BEDとSHADEの交互作用図
fig_BS = interaction_plot(data.BED, data.SHADE, data.BLOOMS)図を見たところでは,「WATERとSHADE」「BEDとSHADE」では交互作用が強そうで,「BEDとWATER」は弱そうである。
実際にモデル化して確かめてみる。
# モデル化
anova_mod = smf.ols('BLOOMS ~ BED+WATER+SHADE+WATER*SHADE+BED*WATER+BED*SHADE', data=data).fit()
# 分散分析表
anova_table = sm.stats.anova_lm(anova_mod)
anova_tableこのことから,各説明変数はいずれも有意であり,さらに「WATERとSHADE」「BEDとSHADE」の交互作用が有意であることが言える。
本記事のもくじはこちら:









