カテゴリ平均値の差分の検定
この例では、"t" 検定、2 因子 ANOVA (分散分析)、ANOCOVA (共分散分析) を使用してカテゴリ (グループ) の平均値の有意差を検定する方法を示します。
自動車のガロンあたりの想定走行マイル数が生産年代で異なるのか、それとも生産地で異なるのかを判別します。
標本データの読み込み
load carsmall
unique(Model_Year)
ans = 3×1
70
76
82
変数 MPG
には、100 台の標本の自動車で測定したガロンあたりの走行マイル数が格納されています。変数 Model_Year
および Origin
には、それぞれの自動車のモデル年と生産国が格納されています。
最初の因子は製造年代です。データには 3 種類の製造年が存在します。
製造年代を示す因子の作成
70
年と 76
年の観測値を 1970s
というラベルのカテゴリにマージし、82
年の観測値を 1980s
というラベルのカテゴリに入れることで、Decade
という名前の categorical 配列を作成します。
Decade = discretize(Model_Year,[70 77 82], ... "categorical",["1970s","1980s"]); categories(Decade)
ans = 2x1 cell
{'1970s'}
{'1980s'}
カテゴリ別のデータのプロット
ガロンあたりの走行マイル数の箱ひげ図を、製造年代ごとに作成します。
boxplot(MPG,Decade)
title("Miles per Gallon, Grouped by Decade of Manufacture")
この箱ひげ図からわかるように、1980 年代に製造された自動車の方が、 1970 年代に製造された自動車よりもガロンあたりの走行マイル数が高くなっています。
要約統計量の計算
各年代でガロンあたりの走行マイル数の平均と分散を計算します。
[xbar,s2,grp] = grpstats(MPG,Decade,["mean","var","gname"])
xbar = 2×1
19.7857
31.7097
s2 = 2×1
35.1429
29.0796
grp = 2x1 cell
{'1970s'}
{'1980s'}
この出力結果では、1980 年代に製造された自動車のガロンあたりの走行マイル数は約 31.71
であり、1970 年代に製造された自動車は約 19.79
となっています。2 つのアンサンブルの分散は類似しています。
アンサンブルの平均が等しいか確認するための 2 標本 "t" 検定の実行
分散が等しいと仮定して 2 つの標本の "t" 検定を実行し、アンサンブルの平均に有意差があるか確認します。仮説は以下のとおりです。
MPG70 = MPG(Decade=="1970s"); MPG80 = MPG(Decade=="1980s"); [h,p] = ttest2(MPG70,MPG80)
h = 1
p = 3.4809e-15
論理値 1
は、既定の有意水準 0.05 で帰無仮説が棄却されていることを示します。この検定の p 値は非常に小さくなっています。1980 年代と 1970 年代に製造された自動車では、ガロンあたりの走行マイル数の平均が異っているという十分な証拠が存在しています。
生産地を示す因子の作成
2 番目の因子は生産地です。最初に、Origin
を categorical 配列に変換します。
Location = categorical(cellstr(Origin)); tabulate(Location)
Value Count Percent France 4 4.00% Germany 9 9.00% Italy 1 1.00% Japan 15 15.00% Sweden 2 2.00% USA 69 69.00%
生産国は 6 か国あります。ヨーロッパの国での観測数が比較的少なくなっています。
カテゴリのマージ
カテゴリ France
、Germany
、Italy
、Sweden
を Europe
という新しいカテゴリにまとめます。
Location = mergecats(Location, ... ["France","Germany","Italy","Sweden"],"Europe"); tabulate(Location)
Value Count Percent Europe 16 16.00% Japan 15 15.00% USA 69 69.00%
要約統計量の計算
ガロンあたりの走行マイル数の平均を、生産地別に計算します。
[meanMPG,locationGroup] = grpstats(MPG,Location,["mean","gname"])
meanMPG = 3×1
26.6667
31.8000
21.1328
locationGroup = 3x1 cell
{'Europe'}
{'Japan' }
{'USA' }
この結果、ガロンあたりの走行マイル数の平均が最も低いのは、米国製の自動車の標本ということがわかります。
2 因子 ANOVA の実行
2 因子 ANOVA を実行し、Decade
と Location
の因子水準の間にガロンあたりの想定走行マイル数の差があるか検定します。
統計モデルは次のとおりです。
ここで、 は製造年代 に生産地 で生産された自動車の応答 (ガロンあたりの走行マイル数) を表します。最初の因子 (製造年代) の処理効果は 項です (合計はゼロになります)。2 番目の因子 (生産地) の処理効果は 項です (合計はゼロになります)。 は無相関の正規分布ノイズ項です。
検定する仮説は、製造年代の効果の等価性と、
生産地の効果の等価性です。
anovan
を使用すると複数因子 ANOVA を実行できます。
anovan(MPG,{Decade,Location}, ... "Varnames",["Decade","Location"]);
この出力結果は 2 因子 ANOVA の結果を示しています。製造年代の効果の等価性を検定した結果の p 値は 2.88503e-18
で、帰無仮説は有意水準 0.05 で棄却されます。生産地の等価性を検定した結果の p 値は 7.40416e-10
で、この帰無仮説も棄却されます。
ANOCOVA 分析の実行
この解析での交絡因子として、自動車の重量が考えられます。重量が大きい自動車の方が、燃費効率が低くなると予想されます。変数 Weight
を ANOVA の連続共変量として使用し、ANOCOVA 分析を実行します。
平行ラインを仮定すると、統計モデルは次のようになります。
このモデルと 2 因子 ANOVA モデルの違いは、連続予測子 の有無です。これは 番目の年代に 番目の場所で生産された 番目の自動車の重量を表します。勾配パラメーターは です。
anovan
の 2 番目の入力引数の 3 つ目のグループとして、連続共変量を追加します。名前と値の引数 Continuous
を使用して、Weight
(3 番目のグループ) を連続に指定します。
anovan(MPG,{Decade,Location,Weight},"Continuous",3, ... "Varnames",["Decade","Location","Weight"]);
この出力結果からは、自動車の重量について、生産地による効果の十分な証拠は存在しません (p 値 = 0.1044
)。
対話型ツールの使用
対話型の aoctool
を使用すると、この結果を調査することができます。このコマンドを実行すると、3 つのダイアログ ボックスが開きます。
aoctool(Weight,MPG,Location);
[ANOCOVA 予測プロット] ダイアログ ボックスで [異なる平均] モデルを選択します。
この出力結果からは、Weight
がモデル内に含まれていない場合、3 か所の生産地の間でガロンあたりの想定走行マイル数に大きな差が出ることがわかります。なお、このモデルでは、製造年代の調整はされていません。
次に、[平行ライン] モデルを選択します。
Weight
がモデル内に含まれている場合、3 か所の生産地の間でのガロンあたりの想定走行マイル数の差はかなり小さくなります。
参考
categorical
| boxplot
| grpstats
| ttest2
| anovan
| aoctool