Main Content

カテゴリ平均値の差分の検定

この例では、"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")

Figure contains an axes object. The axes object with title Miles per Gallon, Grouped by Decade of Manufacture contains 14 objects of type line.

この箱ひげ図からわかるように、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" 検定を実行し、アンサンブルの平均に有意差があるか確認します。仮説は以下のとおりです。

H0:μ70=μ80HA:μ70μ80.

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 か国あります。ヨーロッパの国での観測数が比較的少なくなっています。

カテゴリのマージ

カテゴリ FranceGermanyItalySwedenEurope という新しいカテゴリにまとめます。

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 を実行し、DecadeLocation の因子レベルの間にガロンあたりの想定走行マイル数の差があるか検定します。

統計モデルは次のとおりです。

MPGij=μ+αi+βj+ϵij,i=1,2;j=1,2,3,

ここで、MPGij は製造年代 i に生産地 j で生産された自動車の応答 (ガロンあたりの走行マイル数) を表します。最初の因子 (製造年代) の処理効果は αi 項です (合計はゼロになります)。2 番目の因子 (生産地) の処理効果は βj 項です (合計はゼロになります)。ϵij は無相関の正規分布ノイズ項です。

検定する仮説は、製造年代の効果の等価性と、

H0:α1=α2=0HA:atleastoneαi0,

生産地の効果の等価性です。

H0:β1=β2=β3=0HA:atleastoneβj0.

anovan を使用すると複数因子 ANOVA を実行できます。

anovan(MPG,{Decade,Location}, ...
    "Varnames",["Decade","Location"]);

{"String":"Figure N-Way ANOVA contains objects of type uicontrol.","Tex":[],"LaTex":[]}

この出力結果は 2 因子 ANOVA の結果を示しています。製造年代の効果の等価性を検定した結果の p 値は 2.88503e-18 で、帰無仮説は有意水準 0.05 で棄却されます。生産地の等価性を検定した結果の p 値は 7.40416e-10 で、この帰無仮説も棄却されます。

ANOCOVA 分析の実行

この解析での交絡因子として、自動車の重量が考えられます。重量が大きい自動車の方が、燃費効率が低くなると予想されます。変数 Weight を ANOVA の連続共変量として使用し、ANOCOVA 分析を実行します。

平行ラインを仮定すると、統計モデルは次のようになります。

MPGijk=μ+αi+βj+γWeightijk+ϵijk,i=1,2;j=1,2,3;k=1,...,100.

このモデルと 2 因子 ANOVA モデルの違いは、連続予測子 Weightijk の有無です。これは i 番目の年代に j 番目の場所で生産された k 番目の自動車の重量を表します。勾配パラメーターは γ です。

anovan の 2 番目の入力引数の 3 つ目のグループとして、連続共変量を追加します。名前と値の引数 Continuous を使用して、Weight (3 番目のグループ) を連続に指定します。

anovan(MPG,{Decade,Location,Weight},"Continuous",3, ...
    "Varnames",["Decade","Location","Weight"]);

{"String":"Figure N-Way ANOVA contains objects of type uicontrol.","Tex":[],"LaTex":[]}

この出力結果からは、自動車の重量について、生産地による効果の十分な証拠は存在しません (p 値 = 0.1044)。

対話型ツールの使用

対話型の aoctool を使用すると、この結果を調査することができます。このコマンドを実行すると、3 つのダイアログ ボックスが開きます。

aoctool(Weight,MPG,Location);

{"String":"Figure ANOCOVA Prediction Plot contains an axes object and other objects of type uimenu, uicontrol. The axes object contains 8 objects of type line. These objects represent Europe, Japan, USA.","Tex":[],"LaTex":[]}

{"String":"Figure ANOCOVA Test Results contains objects of type uicontrol.","Tex":[],"LaTex":[]}

{"String":"Figure ANOCOVA Coefficients contains objects of type uicontrol.","Tex":[],"LaTex":[]}

[ANOCOVA 予測プロット] ダイアログ ボックスで [異なる平均] モデルを選択します。

anocova-separate-means.png

この出力結果からは、Weight がモデル内に含まれていない場合、3 か所の生産地の間でガロンあたりの想定走行マイル数に大きな差が出ることがわかります。なお、このモデルでは、製造年代の調整はされていません。

次に、[平行ライン] モデルを選択します。

anocova-parallel-lines.png

Weight がモデル内に含まれている場合、3 か所の生産地の間でのガロンあたりの想定走行マイル数の差はかなり小さくなります。

参考

| | | | |

関連するトピック