Python で二元配置分散分析を実行する方法
二元配置分散分析は、 2 つの因子に分割された 3 つ以上の独立したグループの平均間に統計的に有意な差があるかどうかを判断するために使用されます。
二元配置分散分析の目的は、応答変数に対する 2 つの因子の影響を判断し、応答変数に対する 2 つの因子間に交互作用があるかどうかを判断することです。
このチュートリアルでは、Python で二元配置分散分析を実行する方法について説明します。
例: Python での二元配置分散分析
植物学者は、植物の成長が日光への曝露や水やりの頻度によって影響を受けるかどうかを知りたいと考えています。彼女は 30 個の種を植え、日光への曝露や水やりの頻度などのさまざまな条件で 2 か月間成長させます。 2 か月後、彼女は各植物の高さをインチ単位で記録します。
次の手順を使用して二元配置分散分析を実行し、水やりの頻度と日光への曝露が植物の成長に重大な影響を与えるかどうか、また水やりの頻度と太陽光への曝露の間に相互作用効果があるかどうかを判断します。水やりと太陽にさらすこと。
ステップ 1: データを入力します。
まず、次の 3 つの変数を含む pandas DataFrame を作成します。
- 水:各植物に水をやる頻度: 毎日または毎週
- 太陽:各植物が受ける太陽光の量: 低、中、または高
- 高さ: 2 か月後の各植物の高さ (インチ)
import numpy as np import pandas as pd #create data df = pd.DataFrame({'water': np.repeat(['daily', 'weekly'], 15), 'sun': np.tile(np.repeat(['low', 'med', 'high'], 5), 2), 'height': [6, 6, 6, 5, 6, 5, 5, 6, 4, 5, 6, 6, 7, 8, 7, 3, 4, 4, 4, 5, 4, 4, 4, 4, 4, 5, 6, 6, 7, 8]}) #view first ten rows of data df[:10] water sun height 0 daily low 6 1 daily low 6 2 daily low 6 3 daily low 5 4 daily low 6 5 daily med 5 6 daily med 5 7 daily med 6 8 daily med 4 9 daily med 5
ステップ 2: 二元配置分散分析を実行します。
次に、statsmodels ライブラリのanova_lm() 関数を使用して二元配置分散分析を実行します。
import statsmodels.api as sm from statsmodels.formula.api import ols #perform two-way ANOVA model = ols('height ~ C(water) + C(sun) + C(water):C(sun)', data=df).fit() sm.stats.anova_lm(model, typ=2) sum_sq df F PR(>F) C(water) 8.533333 1.0 16.0000 0.000527 C(sun) 24.866667 2.0 23.3125 0.000002 C(water):C(sun) 2.466667 2.0 2.3125 0.120667 Residual 12.800000 24.0 NaN NaN
ステップ 3: 結果を解釈します。
表内の各因子の次の p 値を確認できます。
- 水: p 値 = 0.000527
- 太陽: p 値 = 0.0000002
- 水*太陽: p 値 = 0.120667
水と太陽の p 値は両方とも 0.05 未満であるため、これは両方の要因が草丈に対して統計的に有意な影響を及ぼしていることを意味します。
また、相互作用効果の p 値 (0.120667) は 0.05 未満ではないため、日光への曝露と水やりの頻度の間に有意な相互作用効果がないことがわかります。
注: ANOVA の結果は、水やりの頻度と日光への曝露が草丈に統計的に有意な影響を与えることを示していますが、さまざまなレベルの水と日光が草丈にどのように影響するかを正確に判断するには、事後テストを実行する必要があります。
追加リソース
次のチュートリアルでは、Python で他の一般的なタスクを実行する方法について説明します。