Main Content

1 因子 ANOVA

1 因子 ANOVA の紹介

関数 anova1 を使用して、1 因子の分散分析 (ANOVA) を実行できます。1 因子 ANOVA の目的は、1 つの因子をもつ複数のグループ (水準) のデータに、共通の平均があるかどうかを判別することです。つまり、1 因子 ANOVA を使用すると、1 つの独立変数をもつさまざまなグループは、応答変数 y に与える影響が異なるかどうかを調べることができます。ある病院で、推奨されている 2 つの新しい予約方法を採用すると、以前の予約方法の場合より患者の待ち時間が短くなるかどうかを調べようとしているとします。この場合、独立変数は予約方法、応答変数は患者の待ち時間です。

1 因子 ANOVA は、線形モデルの単純な特殊ケースです。1 因子 ANOVA のモデルは、以下の式で示されます。

yij=αj+εij

以下が仮定されています。

  • yij は、i が観測番号、j が変数 y の別のグループ (水準) を表している観測値です。yij はすべてが独立しています。

  • αj は、j 番目のグループ (水準または処理) の母集団平均を表します。

  • εij は、それぞれが独立している確率的誤差です。平均が 0 で分散が一定の正規分布、つまり εij ~ N(0,σ2) になっています。

このモデルは、"平均モデル" とも呼ばれます。このモデルでは、y の各列が定数 αj に誤差成分 εij を加えた値であると仮定しています。ANOVA は、この定数がすべて同じであるかどうかを判別するために役立ちます。

ANOVA では、すべてのグループで平均が等しいという仮説 (H0:α1=α2=...=αk) を、少なくとも 1 つのグループが他と異なるという対立仮説 (少なくとも 1 つの i および j について H1:αiαj) に対して検定します。anova1(y) は、各列が異なるグループを表しているが、観測値が同じ数である行列 (つまり、平衡な設計) y のデータについて、列の平均が等しいかどうかを調べます。anova1(y,group) は、ベクトルまたは行列 y のデータについて、group で指定したグループの平均が等しいかどうかを調べます。この場合、各グループ (列) の観測数は異なっていてもかまいません (不平衡な設計)。

ANOVA は、すべての標本母集団が正規分布になっているという仮定に基づいています。この仮定に多少違反していても信頼性が損なわれないことが知られています。正規性の仮定は、正規性プロット (normplot) を使用すると視覚的にチェックできます。あるいは、正規性をチェックする Statistics and Machine Learning Toolbox™ の関数のいずれかを使用して、アンダーソン・ダーリング検定 (adtest)、カイ二乗適合度検定 (chi2gof)、ジャック・ベラ検定 (jbtest) またはリリーフォース検定 (lillietest) を行うこともできます。

1 因子 ANOVA 用データの準備

標本データとしてベクトルまたは行列を使用できます。

  • 標本データがベクトル y に含まれている場合、anova1(y,group) というように入力変数 group を使用してグループ化変数を指定する必要があります。

    group は、y の各要素に対する名前が 1 つずつ含まれている数値ベクトル、logical ベクトル、categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列でなければなりません。関数 anova1 は、 対応する group 名が同じであれば y 値を同じグループの一部として扱います。たとえば、以下のようにします。

    Example of the sample data input argument y and the group input argument g. Each element in g represents a group name of the corresponding element in y.

    この設計は、各グループに含まれている要素の数が異なる場合 (不平衡な ANOVA) に使用します。

  • 標本データが行列 y に含まれている場合、グループ情報の指定はオプションです。

    • 入力変数 group を指定しなかった場合、anova1 では y の各列が別々のグループとして扱われ、各列の母集団平均が等しいかどうかが評価されます。たとえば、以下のようにします。

      Example of the sample data input argument Y in a matrix form, illustrating how anova1 treats each column of y as a separate group

      この形式の設計は、各グループに含まれている要素の数が同じ場合 (平衡な ANOVA) に使用します。

    • 入力変数 group を指定する場合、group の各要素は、y の対応する列のグループ名を表します。関数 anova1 は、同じグループ名の列を同じグループの一部として扱います。たとえば、以下のようにします。

      Example of the sample data input argument Y in a matrix form and the group input argument group. Each element in group represents a group name of the corresponding column in Y.

anova1 は、y 内の任意の NaN 値を無視します。また、group に空または NaN の値が含まれている場合、anova1y 内の対応する観測値を無視します。関数 anova1 は、空または NaN の値を無視した後、各グループに同じ数の観測値がある場合、平衡型 ANOVA を実行します。そうでない場合、anova1 は不平衡な ANOVA を実行します。

1 因子 ANOVA の実行

この例では、1 因子 ANOVA を実行して、複数のグループから取得したデータが共通の平均をもつかどうかを判別する方法を説明します。

標本データを読み込んで表示します。

load hogg
hogg
hogg = 6×5

    24    14    11     7    19
    15     7     9     7    24
    21    12     7     4    19
    27    17    13     7    15
    33    14    12    12    10
    23    16    18    18    20

このデータは、出荷された牛乳に含まれているバクテリア数に関する Hogg と Ledolter の研究 (1987) から得られたものです。行列 hogg の各列は、出荷ごとの差を示しています。行は、それぞれの出荷から無作為に取り出した牛乳パック内のバクテリア数です。

バクテリア数が他より高くなっている出荷があるか検定します。既定の設定では、anova1は 2 つの図を返します。1 つは標準的な ANOVA 表、もう 1 つはグループ別のデータの箱ひげ図です。

[p,tbl,stats] = anova1(hogg);

Figure One-way ANOVA contains objects of type uicontrol.

Figure contains an axes object. The axes object contains 35 objects of type line. One or more of the lines displays its values using only markers

p
p = 1.1971e-04

p 値は約 0.0001 という小さい値なので、出荷ごとにバクテリア数が異なることがわかります。

箱ひげ図を見ると、平均が異なることをグラフィカルに確認できます。ただし、ノッチは平均ではなく中央値を比較しています。この表示の詳細はboxplotを参照してください。

標準的な ANOVA 表を表示します。anova1 では、標準的な ANOVA 表が出力引数 tbl に cell 配列として格納されます。

tbl
tbl=4×6 cell array
    {'Source' }    {'SS'        }    {'df'}    {'MS'      }    {'F'       }    {'Prob>F'    }
    {'Columns'}    {[  803.0000]}    {[ 4]}    {[200.7500]}    {[  9.0076]}    {[1.1971e-04]}
    {'Error'  }    {[  557.1667]}    {[25]}    {[ 22.2867]}    {0x0 double}    {0x0 double  }
    {'Total'  }    {[1.3602e+03]}    {[29]}    {0x0 double}    {0x0 double}    {0x0 double  }

F 統計量を変数 Fstat に格納します。

Fstat = tbl{2,5}
Fstat = 9.0076

グループの平均を多重対比較するために必要な統計量を表示します。anova1 では、これらの統計量は構造体 stats に格納されます。

stats
stats = struct with fields:
    gnames: [5x1 char]
         n: [6 6 6 6 6]
    source: 'anova1'
     means: [23.8333 13.3333 11.6667 9.1667 17.8333]
        df: 25
         s: 4.7209

すべてのグループで平均が等しいという帰無仮説が ANOVA により棄却されたので、多重比較を使用してどのグループの平均が他と異なるかを判別できます。多重比較検定を実行するには、入力引数として stats を受け入れる関数 multcompare を使用します。この例では、4 つの出荷すべてで平均バクテリア数が互いに等しいという帰無仮説 H0:μ1=μ2=μ3=μ4anova1 により棄却されます。

多重比較検定を実行し、平均バクテリア数に関して他と異なるのはどの出荷であるかを判別します。

results = multcompare(stats);

Figure Multiple comparison of means contains an axes object. The axes object with title Click on the group you want to test, xlabel 3 groups have means significantly different from Group 1 contains 11 objects of type line. One or more of the lines displays its values using only markers

図にも同じ結果が示されています。青いバーは 1 番目のグループの平均に関する比較区間を示しており、赤で示されている 2、3 および 4 番目のグループの平均に関する比較区間と重なっていません。灰色で示されている 5 番目のグループの平均に関する比較区間は、1 番目のグループの平均に関する比較区間と重なっています。したがって、1 番目と 5 番目のグループの平均は有意に異なってはいません。

多重比較の結果を table で表示します。

tbl = array2table(results,"VariableNames", ...
    ["Group A","Group B","Lower Limit","A-B","Upper Limit","P-value"])
tbl=10×6 table
    Group A    Group B    Lower Limit      A-B      Upper Limit     P-value 
    _______    _______    ___________    _______    ___________    _________

       1          2          2.4953         10.5       18.505      0.0059332
       1          3          4.1619       12.167       20.171      0.0012925
       1          4          6.6619       14.667       22.671      0.0001262
       1          5         -2.0047            6       14.005        0.21195
       2          3         -6.3381       1.6667       9.6714        0.97193
       2          4         -3.8381       4.1667       12.171        0.55436
       2          5         -12.505         -4.5       3.5047        0.48062
       3          4         -5.5047          2.5       10.505        0.88757
       3          5         -14.171      -6.1667       1.8381        0.19049
       4          5         -16.671      -8.6667     -0.66193       0.029175

初めの 2 列には、どのグループの平均を比較したかが示されています。たとえば、1 行目ではグループ 1 とグループ 2 の平均を比較しています。最後の列には、検定の p 値が示されています。0.0059、0.0013 および 0.0001 という p 値から、1 番目の出荷の牛乳に含まれている平均バクテリア数が 2、3 および 4 番目の出荷のものと異なることがわかります。0.0292 という p 値から、4 番目の出荷の牛乳に含まれている平均バクテリア数が 5 番目の出荷とは異なることがわかります。この手順では、他のグループについて平均が互いに異なるという仮説を棄却できませんでした。

計算の詳細

ANOVA では、データの変動全体を次の 2 つの成分に分割することにより、グループの平均の違いを調べます。

  • 全体的な平均に対するグループの平均の変動 y¯.jy¯.. (グループ間の変動)。ここで、y¯.j はグループ j の標本平均、y¯.. は全体的な標本平均です。

  • グループの平均観測値に対する各グループの観測値の変動 yijy¯.j (グループ内の変動)

言い換えると、二乗和の合計 (SST) がグループ間効果に起因する二乗和 (SSR) と誤差の二乗和 (SSE) に分割されます。

ij(yijy¯..)2SST=jnj(y¯.jy¯..)2SSR+ij(yijy¯.j)2SSE,

ここで、nj は j 番目のグループの標本サイズです (j = 1, 2, ..., k)。

次に、グループ間の変動とグループ内の変動が比較されます。グループ内の変動に対するグループ間の変動の比率が著しく大きい場合、グループの平均が有意に異なると結論づけることができます。この値は、自由度が (k - 1, N - k) の F 分布になっている検定統計量を使用すると計算できます。

F=SSRk1SSENk=MSRMSE~Fk1,Nk,

ここで、MSR は平均二乗処理、MSE は平均二乗誤差、k はグループの数、N は観測値の総数です。F 統計量の p 値が有意水準より小さい場合、すべてのグループの平均が等しいという帰無仮説が棄却され、他と異なるグループの平均が少なくとも 1 つは存在すると結論づけられます。最も一般的な有意水準は、0.05 と 0.01 です。

ANOVA 表

ANOVA 表には、原因別のモデルの変動性、この変動性の有意性を検定するための F 統計量、およびこの変動性の有意性を判別するための p 値が記録されます。anova1 が返す p 値は、モデル方程式におけるランダム外乱 εij についての仮定によって決まります。正確な p 値を得るには、これらの外乱が独立、正規分布、および一定の分散になっている必要があります。標準的な ANOVA 表の形式は次のとおりです。

ANOVA table for a one-way ANOVA. The ANOVA table has columns named Source, SS, df, MS, F, and p-value.

anova1 は、6 つの列がある cell 配列として標準的な ANOVA 表を返します。

定義
Source変動性の原因
SS各原因による二乗和
df各原因に関連付けられている自由度N が観測値の総数、k がグループの数であるとします。すると、N - k はグループ内の自由度 (Error)、k - 1 はグループ間の自由度 (Columns)、N - 1 は全体の自由度 (N - 1 = (N - k) + (k - 1)) になります。
MS各原因の平均二乗 (比率 SS/df)
FF 統計量 (平均二乗の比率)
Prob>Fp 値は、F 統計量の値が検定統計量の計算値より大きくなる確率です。anova1 では、F 分布の cdf からこの確率が導き出されます。

ANOVA 表の各行には、データの変動性が原因別に示されます。

行 (原因)定義
Groups または Columnsグループの平均の違いによる変動性 (グループ "間" の変動性)
Error各グループのデータ間の違いとグループの平均の違いによる変動性 (グループ "内" の変動性)
Total全体の変動性

参照

[1] Wu, C. F. J., and M. Hamada. Experiments: Planning, Analysis, and Parameter Design Optimization, 2000.

[2] Neter, J., M. H. Kutner, C. J. Nachtsheim, and W. Wasserman. 4th ed. Applied Linear Statistical Models. Irwin Press, 1996.

参考

| | |

関連するトピック