Main Content

anova

分散分析 (ANOVA) の結果

    説明

    anova オブジェクトには、1 因子2 因子、または 多因子 ANOVA の結果が格納されます。一連の応答データの平均が特定の因子や複数の因子の値 (レベル) に関して異なるかどうかを判別するには、anova オブジェクトのプロパティを使用します。オブジェクト プロパティには、係数推定値、応答データに当てはめる ANOVA モデル、解析の実行に使用される因子に関する情報が含まれています。

    作成

    説明

    aov = anova(y) は、1 因子 ANOVA を実行し、行列 y の応答データに対する anova オブジェクトを返します。y の各列が異なる因子の値として扱われます。

    aov = anova(factors,y) は、1 因子、2 因子、または多因子 ANOVA を実行し、ベクトル y の応答データに対する anova オブジェクトを返します。引数 factors で、因子の数とその値を指定します。

    aov = anova(tbl,y) は、table tbl の変数をベクトル y の応答データの因子として使用します。各 table 変数が因子に対応します。

    aov = anova(tbl,responseVarName) は、tbl の変数を因子および応答データとして使用します。引数 responseVarName で、応答データが格納された変数を指定します。

    aov = anova(tbl,formula) は、ウィルキンソンの表記法で ANOVA モデルを指定します。formula の項では、tbl の変数名のみを使用します。

    aov = anova(___,Name=Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、カテゴリカルまたはランダムにする因子を指定したり、二乗和のタイプを指定したりできます。

    入力引数

    すべて展開する

    応答データ。行列または数値ベクトルとして指定します。

    • y が行列の場合、anovay の各列を 1 因子 ANOVA の個別の因子の値として扱います。この形式では、各列の母集団平均が等しいかどうかが評価されます。この設計は、各グループに均等に分割されたデータに対して 1 因子 ANOVA を実行する場合 (平衡型 ANOVA) に使用します。

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

    • y が数値ベクトルの場合、入力引数 factors または tbl も指定しなければなりません。1 因子 ANOVA の場合、factors は、各要素が y の対応する要素の因子の値を表す文字ベクトルの cell 配列またはベクトルです。

      Example of the sample data input argument y and the factors input argument g. Each element in g represents the factor value of the corresponding element in y.

    • 多因子 ANOVA の場合、factors は、各 cell が個別の因子として扱われるベクトルの cell 配列です。あるいは、多因子 ANOVA の場合は、各変数が個別の因子として扱われる table tbl を指定できます。この設計は、2 因子 ANOVA または多因子 ANOVA を実行する場合、あるいは因子の値が y の異なる数の観測値に対応する場合 (不平衡な ANOVA) に使用します。

    メモ

    関数 anova は、yNaN 値、<undefined> 値、空の文字、空の string を無視します。factors または tblNaN 値、<undefined> 値、空の文字、空の string が格納されている場合、関数は y の対応する観測値を無視します。関数で空または NaN の値を無視した後の観測値の数がそれぞれの因子の値で同じであれば、ANOVA は平衡型になります。それ以外の場合、関数は不平衡な ANOVA を実行します。

    データ型: single | double

    ANOVA の因子と因子の値。数値ベクトル、logical ベクトル、categorical ベクトル、string ベクトル、文字ベクトル、またはベクトルの cell 配列として指定します。因子と因子の値は、それぞれグループ化変数およびグループ名と呼ばれることもあります。

    1 因子 ANOVA の場合、factors は、各要素が y の同じ位置にある観測値の因子の値を表す文字ベクトルのベクトルまたは cell 配列です。関数 anova は、ANOVA の実行時に y の観測値を因子の値ごとにグループ化します。factors の長さは y の長さと同じでなければなりません。

    Example of the sample data input argument y and the factors input argument g. Each element in g represents a factor value of the corresponding element in y.

    2 因子 ANOVA または多因子 ANOVA の場合、factors は、各 cell が異なる因子に対応するベクトルの cell 配列です。各ベクトルに対応する因子の値が格納され、その長さは y と同じでなければなりません。因子の値は y の観測値にインデックスで関連付けられます。

    y=[y1,y2,y3,y4,y5,,yN]g1={'A','A','C','B','B',,'D'}g2=[12131,2]g3={'hi','mid','low','mid','hi',,'low'}

    factorsNaN 値が含まれている場合、anovay の対応する観測値を無視します。

    因子の詳細については、グループ化変数を参照してください。

    メモ

    factors または tblNaN 値、<undefined> 値、空の文字、空の string が格納されている場合、関数 anovay の対応する観測値を無視します。関数で空または NaN の値を無視した後の観測値の数がそれぞれの因子の値で同じであれば、ANOVA は平衡型になります。それ以外の場合、関数は不平衡な ANOVA を実行します。

    例: [1,2,1,3,1,...,3,1]

    例: ["white","red","white",...,"black","red"]

    例: school=["Springfield","Springfield","Springfield","Arlington","Springfield","Arlington","Arlington"]; monthnumber=[6,12,1,9,4,6,2]; factors={school,monthnumber};

    データ型: single | double | logical | categorical | char | string | cell

    因子、因子の値、および応答データ。table として指定します。tbl の変数には、数値ベクトル、logical ベクトル、categorical ベクトル、文字ベクトル、string 要素、または文字の cell 配列を格納できます。tbl を指定する場合、応答データ yresponseVarName、または formula も指定しなければなりません。

    • y で応答データを指定する場合、table 変数は ANOVA の因子のみを表します。tbl の変数の因子の値は、y の同じ位置にある観測値に対応します。tbl の行数は y の長さと同じでなければなりません。tblNaN 値が含まれている場合、anovay の対応する観測値を無視します。

    • y を指定しない場合は、入力引数 responseVarName または formula を使用して、tbl のどの変数に応答データが格納されているかを示さなければなりません。名前と値の引数 FactorNames を使用して、ANOVA で使用する tbl の因子のサブセットを選択することもできます。関数 anova は、tbl の因子変数の値を同じ行の応答データに関連付けます。

    メモ

    factors または tblNaN 値、<undefined> 値、空の文字、空の string が格納されている場合、関数 anovay の対応する観測値を無視します。関数で空または NaN の値を無視した後の観測値の数がそれぞれの因子の値で同じであれば、ANOVA は平衡型になります。それ以外の場合、関数は不平衡な ANOVA を実行します。

    例: mountain=table(altitude,temperature,soilpH); anova(mountain,"soilpH")

    データ型: table

    応答データの名前。string スカラーまたは文字ベクトルとして指定します。responseVarName は、tbl のどの変数に応答データが格納されているかを示します。responseVarName を指定する場合、入力引数 tbl も指定しなければなりません。

    例: "r"

    データ型: char | string

    ANOVA モデル。ウィルキンソンの表記法による string スカラーまたは文字ベクトルとして指定します。anova では、かっことコンマを使用した入れ子になった因子の指定が formula でサポートされます。たとえば、formula に項 f1(f2) を含めることで、因子 f1 が因子 f2 の内部で入れ子になっていることを指定できます。f1 が 2 つの因子 f2f3 の内部で入れ子になっていることを指定するには、項 f1(f2,f3) を含めます。formula を指定する場合、tbl も指定しなければなりません。

    例: "r ~ f1 + f2 + f3 + f1:f2:f3"

    例: "MPG ~ Origin + Model(Origin)"

    データ型: char | string

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    例: anova(factors,y,CategoricalFactors=[1 2],FactorNames=["school" "major" "age"],ResponseName="GPA") は、factors の最初の 2 つの因子をカテゴリカルとして指定し、因子の名前を "school""major"、および "age" と指定し、応答変数の名前を "GPA" と指定します。

    カテゴリカルとして扱う因子。数値ベクトル、logical ベクトル、string ベクトル、または文字ベクトルの cell 配列として指定します。CategoricalFactors が既定値の "all" に設定されている場合、関数 anova はすべての因子をカテゴリカルとして扱います。

    CategoricalFactors は次のいずれかとして指定します。

    • 1 から N までのインデックスを使用する数値ベクトル。ここで、N は因子変数の数です。関数 anova は、CategoricalFactors のインデックスをもつ因子をカテゴリカルとして扱います。因子のインデックスは、行列 y の列、factors の cell、または tbl の列における順序です。

    • 長さ N の logical ベクトル。true というエントリは、対応する因子がカテゴリカルであることを意味します。

    • 因子の名前の string ベクトルまたは cell 配列。因子の名前は tbl または FactorNames の名前に一致しなければなりません。

    例: CategoricalFactors=["Location" "Smoker"]

    例: CategoricalFactors=[1 3 4]

    データ型: single | double | logical | char | string | cell

    因子の名前。string ベクトルまたは文字ベクトルの cell 配列として指定します。

    • anova の呼び出しで tbl を指定する場合、FactorNamestbl の table 変数のサブセットでなければなりません。anova は、FactorNames で指定された因子のみを使用します。この場合、FactorNames の既定値は tbl の因子変数の名前のコレクションです。

    • anova の呼び出しで行列 y または factors を指定する場合、FactorNames に任意の名前を指定できます。この場合、FactorNames の既定値は ["Factor1","Factor2",…,"FactorN"] です。ここで、N は因子の数です。

    formula を指定した場合、anovaFactorNames を無視します。

    例: FactorNames=["time","latitude"]

    データ型: char | string | cell

    当てはめる ANOVA モデルのタイプ。次の表のいずれかのオプションか、整数、string スカラー、文字ベクトル、または項の行列として指定します。ModelSpecification の既定値は "linear" です。

    オプションANOVA モデルに含まれる項
    "linear" (既定の設定)主効果 (線形) 項
    "interactions"主効果とペア単位の交互作用項
    "purequadratic"主効果と 2 次主効果。このオプションを使用するには、すべての因子が連続でなければなりません。すべての因子を連続として指定するには CategoricalFactors = [] を設定します。
    "quadratic"主効果、2 次主効果、およびペア単位の交互作用項。このオプションを使用するには、すべての因子が連続でなければなりません。
    "polyIJK"1 番目の因子は次数 I まで、2 番目の因子は次数 J までの多項式の項。それ以降も同様です。交互作用項の次数が主要項の最大指数を超えることはありません。各因子の次数を指定する必要があります。
    "full"主効果とすべての交互作用項

    k レベルまでのすべての主効果と交互作用レベルを含めるには、ModelSpecificationk と等しく設定します。ModelSpecification が整数の場合、ANOVA モデルにおける交互作用項の最大レベルは ModelSpecification と因子数のうちの小さい方になります。

    formula を指定した場合、anovaModelSpecification を無視します。

    また、次のいずれかを使用して ANOVA 回帰モデルの項を指定できます。

    • 因子ごとに 1 つの列をもつ二項行列または単項行列 T。ANOVA モデルの各項は T の行に対応する積です。行要素は対応する因子の指数です。たとえば、T(i,:) = [1 2 1] は、項 i(Factor1)(Factor2)2(Factor3) であることを意味します。関数 anova では、ANOVA モデルの定数項は自動的に含まれるため、項の行列にゼロの行を含める必要はありません。

    • 1 つ以上の項を表すウィルキンソンの表記法による文字ベクトルまたは string スカラー式。anova では、かっことコンマを使用した入れ子になった因子の指定が formula で記述したとおりにサポートされます。式で使用する名前は、FactorNames または ResponseName に格納されている名前か、tbl を指定した場合は table 変数名でなければなりません。

    例: ModelSpecification="poly3212"

    例: ModelSpecification=3

    例: ModelSpecification="r ~ c1*c2"

    例: ModelSpecification=[0 0 0;1 0 0;0 1 0;0 0 1]

    データ型: single | double | char | string

    固定ではなくランダムとして扱う因子。数値ベクトル、logical ベクトル、string ベクトル、または文字ベクトルの cell 配列として指定します。関数 anova は、ランダム因子が 1 つでも格納されていれば、その交互作用項をランダムとして扱います。既定値は [] で、これはすべての因子が固定であることを意味します。すべての因子をランダムとして指定するには、RandomFactors"all" に設定します。

    RandomFactors は次のいずれかとして指定します。

    • 1 から N までのインデックスを使用する数値ベクトル。ここで、N は因子変数の数です。関数 anova は、RandomFactors のインデックスをもつ因子をランダムとして扱います。因子のインデックスは、行列 y の列、factors の cell、または tbl の列における順序です。

    • 長さ N の logical ベクトル。true というエントリは、対応する因子がランダムであることを意味します。

    • 因子の名前の string ベクトルまたは cell 配列。因子の名前は tbl または FactorNames の名前に一致しなければなりません。

    例: RandomFactors=[1]

    例: RandomFactors=[1 0 0]

    データ型: single | double | logical | char | string | cell

    応答変数の名前。string スカラーまたは文字ベクトルとして指定します。responseVarName または formula を指定した場合、anovaResponseName を無視します。

    例: ResponseName="soilpH"

    データ型: char | string

    ANOVA の実行に使用する二乗和のタイプ。"three""two""one"、または "hierarchical" として指定します。主効果が含まれていて交互作用は含まれていないモデルの場合、SumOfSquaresType の値は不平衡なデータの計算にのみ影響します。

    項の二乗和 (SSTerm) は、その項を除くモデルに項を追加した場合の誤差二乗和 (SSE) の減少と定義されます。項 Term の二乗和の式は次のような形式になります。

    SSTerm=i=1n(yifexcl(g1,...,gN))2SSEfexcli=1n(yifincl(g1,...,gN))2SSEfincl

    ここで、n は観測値の数、yi は応答データ、g1,...,gN は ANOVA の実行に使用される因子、fexcl は Term を除くモデル、fincl は Term を含むモデルです。fexclfincl の両方が SumOfSquaresType で指定されます。変数 SSEfexclSSEfincl は、それぞれ fexclfincl の誤差二乗和です。fexclfincl は、次の表に示す SumOfSquaresType のオプションのいずれかを使用して指定できます。

    オプション二乗和のタイプ
    "three" (既定の設定)

    fincl は、プロパティ Formula で指定される完全な ANOVA モデルです。fexcl は、fincl の Term を除くすべての項で構成されるモデルです。モデル fexcl の符号化は fincl と同じシグマ制約に従います。このタイプの二乗和はタイプ III と呼ばれます。

    "two"

    fexcl は、プロパティ Formula で指定される ANOVA モデルの Term を除くすべての項で構成されるモデルです。Term が連続する項の場合、Term のべき乗は Term を含まない別個の項として扱われます。fincl は、Term と fexcl のすべての項で構成されるモデルです。このタイプの二乗和はタイプ II と呼ばれます。

    "one"

    fexcl は、プロパティ Formula で指定される ANOVA モデルの Term より前のすべての項で構成されるモデルです。fincl は、Term と fexcl のすべての項で構成されるモデルです。このタイプの二乗和はタイプ I と呼ばれます。

    "hierarchical"

    fexclfincl の定義はタイプ II と同様ですが、Term のべき乗が Term を含む項として扱われます。

    例: SumOfSquaresType="hierarchical"

    データ型: char | string

    プロパティ

    すべて展開する

    このプロパティは読み取り専用です。

    カテゴリカル因子のインデックス。数値ベクトルとして指定します。このプロパティは、名前と値の引数 CategoricalFactors で設定されます。

    データ型: double

    このプロパティは読み取り専用です。

    当てはめられる ANOVA モデルの係数。double ベクトルとして指定します。関数 anova は、各カテゴリカル因子を F 個のダミー変数に展開します。ここで、F は因子の値の数です。各ダミー変数が ANOVA の実行時に異なる係数を使用して当てはめられます。連続する因子の係数は、すべての因子の値で一定になります。

    たとえば、y が一連の応答データで、factor1 が連続する因子であるとします。factor2value1value2、および value3 の値をもつカテゴリカル因子とします。式 "y ~ 1 + factor1 + factor2""y ~ 1 + factor1 + (factor2==value1) + (factor2==value2) + (factor2==value3)" に展開され、その展開された式が anova で係数を使用して当てはめられます。

    データ型: single | double

    このプロパティは読み取り専用です。

    係数の名前。名前の string ベクトルとして指定します。関数 anova は、各カテゴリカル因子を F 個のダミー変数に展開します。ここで、F は因子の値の数です。ベクトル ExpandedFactorNames に各ダミー変数の名前が格納されます。詳細については、Coefficients を参照してください。

    データ型: string

    このプロパティは読み取り専用です。

    ANOVA モデルの当てはめに使用される因子の名前。名前の string ベクトルとして指定します。このプロパティは、入力引数 tbl または名前と値の引数 FactorNames で設定されます。

    データ型: string

    このプロパティは読み取り専用です。

    ANOVA モデルの当てはめに使用される因子の名前と値。table として指定します。table 変数の名前が因子の名前で、それぞれの変数に対応する因子の値が格納されます。モデルの当てはめに使用される因子が table として与えられていない場合、anova はそれらを因子ごとに 1 つの列をもつ table に変換します。

    このプロパティは次のいずれかで設定されます。

    • 入力引数 tbl

    • 行列の入力引数 y および名前と値の引数 FactorNames の組み合わせ

    • ベクトルの入力引数 y、入力引数 factors、および名前と値の引数 FactorNames の組み合わせ

    データ型: table

    このプロパティは読み取り専用です。

    ANOVA モデル。LinearFormulaWithNesting オブジェクトとして指定します。このプロパティは、入力引数 formula または名前と値の引数 ModelSpecification で設定されます。

    モデル メトリクス。table として指定します。table Metrics の変数は次のとおりです。

    • MSE — 平均二乗誤差。

    • RMSE — 平方根平均二乗誤差 (MSE の平方根)。

    • SSE — 誤差二乗和。

    • SSR — 回帰二乗和。

    • SST — 二乗総和。

    • RSquared — 決定係数 (R2)。

    • AdjustedRSquared — 係数の数に応じて調整された R2 の値。この値は式 Radj2=1(n1)SSE(np)SST で与えられます。ここで、n は観測値の数、p は係数の数です。R2 の値が高いほど、ANOVA モデルの適合が高いことを意味します。

    データ型: table

    このプロパティは読み取り専用です。

    ANOVA モデルの当てはめに使用される観測値の数。正の整数として指定します。

    データ型: double

    このプロパティは読み取り専用です。

    ランダム因子のインデックス。数値ベクトルとして指定します。このプロパティは、名前と値の引数 RandomFactors で設定されます。

    データ型: double

    このプロパティは読み取り専用です。

    残差の値。n 行 2 列の table として指定します。ここで、n は観測値の数です。Residuals には 2 つの変数があります。

    • Raw には、観測した値から当てはめた値を減算した値が格納されます。

    • Pearson には、生の残差を平方根平均二乗誤差 (RMSE) で除算した値が格納されます。

    データ型: table

    このプロパティは読み取り専用です。

    ANOVA モデルを当てはめるときに使用される二乗和のタイプ。"three"、"two"、"one"、または "hierarchical" として指定します。このプロパティは、名前と値の引数 SumOfSquaresType で設定されます。

    データ型: string

    このプロパティは読み取り専用です。

    応答変数の名前。string スカラーまたは文字ベクトルとして指定します。このプロパティは、入力引数 responseVarName または名前と値の引数 ResponseName で設定されます。

    データ型: char | string

    このプロパティは読み取り専用です。

    ANOVA モデルの当てはめに使用される応答データ。数値ベクトルとして指定します。このプロパティは、入力引数 y、または入力引数 tbl と入力引数 responseVarName の組み合わせで設定されます。

    データ型: single | double

    オブジェクト関数

    boxchartBox chart (box plot) for analysis of variance (ANOVA)
    groupmeansMean response estimates for analysis of variance (ANOVA)
    multcompareMultiple comparison of means for analysis of variance (ANOVA)
    plotComparisonsInteractive plot of multiple comparisons of means for analysis of variance (ANOVA)
    statsAnalysis of variance (ANOVA) table
    varianceComponentVariance component estimates for analysis of variance (ANOVA)

    すべて折りたたむ

    ポップコーン生産量のデータを読み込みます。

    load popcorn.mat

    6 行 3 列の行列 popcorn の列に、3 つの異なるブランドについてのポップコーン生産量 (カップ数) の観測値が格納されています。1 因子 ANOVA を実行して、ポップコーンのブランドはポップコーン生産量に影響しないという帰無仮説を検定します。

    aov = anova(popcorn)
    aov = 
    1-way anova, constrained (Type III) sums of squares.
    
    Y ~ 1 + Factor1
    
                   SumOfSquares    DF    MeanSquares     F        pValue  
                   ____________    __    ___________    ____    __________
    
        Factor1       15.75         2        7.875      18.9    7.9603e-05
        Error          6.25        15      0.41667                        
        Total            22        17                                     
    
    
      Properties, Methods
    
    
    

    aov は 1 因子 ANOVA の結果を格納する anova オブジェクトです。

    ANOVA 表の Factor1 の行はモデル項 Factor1 についての統計、Error の行はモデル全体についての統計を示しています。SumOfSquaresDF の列で二乗和と自由度がそれぞれ与えられます。Total の自由度は、観測値の総数から 1 を減算した 18 – 1 = 17 です。Factor1 の自由度は、因子の値の数から 1 を減算した 3 – 1 = 2 です。Error の自由度は、全体の自由度から Factor1 の自由度を減算した 17 – 2 = 15 です。

    MeanSquares の列で与えられる平均二乗は式 SumOfSquares/DF で計算されます。"F" 統計量は平均二乗の比率で、7.875/0.41667 = 18.9 です。"F" 統計量は自由度が 2 と 15 の "F" 分布に従います。"p" 値は累積分布関数 (cdf) を使用して計算されます。"F" 統計量の "p" 値が十分に小さく、帰無仮説を有意水準 0.01 で棄却できます。したがって、ポップコーンのブランドはポップコーン生産量に対して有意な影響を与えます。

    ポップコーン生産量のデータを読み込みます。

    load popcorn.mat

    6 行 3 列の行列 popcorn の列に、Gourmet、National、および Generic の各ブランドについてのポップコーン生産量 (カップ数) の観測値が格納されています。行列の最初の 3 行はオイル タイプの製造器具で製造したポップコーン、最後の 3 行はエアー タイプの製造器具で製造したポップコーンに対応しています。

    ブランドと製造器具タイプの因子の値を格納する string ベクトルを作成します。関数 repmat を使用して string のコピーを繰り返します。

    brand = [repmat("Gourmet",6,1);repmat("National",6,1);repmat("Generic",6,1)];
    poppertype = [repmat("Air",3,1);repmat("Oil",3,1);repmat("Air",3,1);repmat("Oil",3,1);repmat("Air",3,1);repmat("Oil",3,1)];
    factors = {brand,poppertype};

    2 因子 ANOVA を実行して、ポップコーンのブランドや製造器具のタイプはポップコーン生産量に影響しないという帰無仮説を検定します。

    aov = anova(factors,popcorn(:),FactorNames=["Brand" "PopperType"])
    aov = 
    2-way anova, constrained (Type III) sums of squares.
    
    Y ~ 1 + Brand + PopperType
    
                      SumOfSquares    DF    MeanSquares     F       pValue  
                      ____________    __    ___________    ___    __________
    
        Brand            15.75         2       7.875        63         1e-07
        PopperType         4.5         1         4.5        36    3.2548e-05
        Error             1.75        14       0.125                        
        Total               22        17                                    
    
    
      Properties, Methods
    
    
    

    aov は 2 因子 ANOVA の結果を格納する anova オブジェクトです。"p" 値が小さいことから、ブランドと製造器具タイプの両方がポップコーン生産量に対して統計的に有意な影響を与えることがわかります。

    平均応答推定を計算して、ポップコーン生産量が最も多いブランドと製造器具タイプの組み合わせを確認します。

    groupmeans(aov,["Brand" "PopperType"])
    ans=6×6 table
          Brand       PopperType    Mean      SE       MeanLower    MeanUpper
        __________    __________    ____    _______    _________    _________
    
        "Gourmet"       "Air"       5.75    0.16667     5.0329       6.4671  
        "National"      "Air"       4.25    0.16667     3.5329       4.9671  
        "Generic"       "Air"        3.5    0.16667     2.7829       4.2171  
        "Gourmet"       "Oil"       6.75    0.16667     6.0329       7.4671  
        "National"      "Oil"       5.25    0.16667     4.5329       5.9671  
        "Generic"       "Oil"        4.5    0.16667     3.7829       5.2171  
    
    

    平均応答推定とその標準誤差および 95% の信頼限界が表に表示されます。平均応答推定から、Gourmet のブランドとオイル タイプの製造器具の組み合わせでポップコーン生産量が最も多いことがわかります。

    患者の標本データを読み込みます。

    load patients.mat

    変数 AgeSmoker から因子の table を作成します。

    tbl = table(Age,Smoker,VariableNames=["Age" "SmokingStatus"]);

    因子 SmokingStatus はランダムにサンプリングされるカテゴリカル因子で、Age は連続する因子です。2 因子 ANOVA を実行して、年齢や喫煙状況は収縮期血圧に影響しないという帰無仮説を検定します。

    aov = anova(tbl,Systolic,CategoricalFactors=2,RandomFactors=2)
    aov = 
    2-way anova, constrained (Type III) sums of squares.
    
    Y ~ 1 + Age + SmokingStatus
    
                         SumOfSquares    DF    MeanSquares      F         pValue  
                         ____________    __    ___________    ______    __________
    
        Age                 37.562        1      37.562       1.6577       0.20098
        SmokingStatus       2182.9        1      2182.9       96.337    3.3613e-16
        Error                 2198       97      22.659                           
        Total               4461.2       99                                       
    
    
      Properties, Methods
    
    
    

    aov は 2 因子 ANOVA の結果を格納する anova オブジェクトです。Age"p" 値は 0.05 より大きくなっています。95% の信頼度では、年齢は収縮期血圧に対して統計的に有意な影響を与えないという帰無仮説を棄却するだけの十分な証拠がありません。SmokingStatus"p" 値は 0.05 より小さく、喫煙状況は収縮期血圧に対して統計的に有意な影響を与えることを示しています。

    ランダム因子 SmokingStatus の変動性が SmokingStatus の平均二乗に影響するかどうかを調べるために、オブジェクト関数 varianceComponentstats を使用します。

    v = varianceComponent(aov)
    v=2×3 table
                         VarianceComponent    VarianceComponentLower    VarianceComponentUpper
                         _________________    ______________________    ______________________
    
        SmokingStatus          48.31                  9.0308                    49707         
        Error                 22.659                  17.425                    30.68         
    
    
    [~,ems] = stats(aov)
    ems=3×5 table
                           Type              ExpectedMeanSquares            MeanSquaresDenominator    DFDenominator    FDenominator
                         ________    ___________________________________    ______________________    _____________    ____________
    
        Age              "fixed"     "5135.47*Q(Age)+V(Error)"                      22.659                  97          MS(Error)  
        SmokingStatus    "random"    "44.7172*V(SmokingStatus)+V(Error)"            22.659                  97          MS(Error)  
        Error            "random"    "V(Error)"                                                                                    
    
    

    VarianceComponent の値を ExpectedMeanSquaresSmokingStatus の式に挿入すると、44.7172*48.3098+22.6594 = 2.1829e+03 になります。SmokingStatus の分散成分が平均二乗の期待値にどの程度影響するかを確認するために、ExpectedMeanSquaresSmokingStatus の項を ExpectedMeanSquares で除算します。結果は 44.7172*48.3098/2.1829e+03 = 0.9896 になります。この計算から、SmokingStatus の平均二乗の期待値に対する SmokingStatus の分散成分の寄与がほぼ 99% であることがわかります。

    120 人の学生が受けた 5 つの試験の結果を含むデータを読み込みます。

    load examgrades.mat

    数学、生物、歴史、文学の各試験と複合科目の総合試験についての変数を含む table を作成します。

    subject = ["math" "biology" "history" "literature" "comprehensive"];
    grades = table(grades(:,1),grades(:,2),grades(:,3),grades(:,4),grades(:,5),VariableNames=subject)
    grades=120×5 table
        math    biology    history    literature    comprehensive
        ____    _______    _______    __________    _____________
    
         65       77         69           75             69      
         61       74         70           66             68      
         81       80         71           74             79      
         88       76         80           88             79      
         69       77         74           69             76      
         89       93         78           77             80      
         55       64         60           50             63      
         84       83         80           77             78      
         86       75         81           87             79      
         84       82         86           92             85      
         71       70         73           81             79      
         81       88         80           79             83      
         84       78         80           74             80      
         81       77         81           83             79      
         78       66         90           84             75      
         67       74         73           76             72      
          ⋮
    
    

    連続する因子 mathbiologyhistory、および literature と応答データ comprehensive について、4 因子 ANOVA を実行します。

    aov = anova(grades,"comprehensive",CategoricalFactors = [])
    aov = 
    N-way anova, constrained (Type III) sums of squares.
    
    comprehensive ~ 1 + math + biology + history + literature
    
                      SumOfSquares    DF     MeanSquares      F         pValue  
                      ____________    ___    ___________    ______    __________
    
        math             58.973         1      58.973       6.1964      0.014231
        biology          100.35         1      100.35       10.544     0.0015275
        history          243.89         1      243.89       25.626    1.5901e-06
        literature       152.22         1      152.22       15.994    0.00011269
        Error            1094.5       115      9.5173                           
        Total              3291       119                                       
    
    
      Properties, Methods
    
    
    

    aov は 4 因子 ANOVA の結果を格納する anova オブジェクトです。すべての因子の "p" 値がいずれも 0.05 より小さく、各科目の試験を使用して学生の総合試験の成績を予測できることを示しています。ANOVA モデルの推定される係数を表示します。

    coef = aov.Coefficients
    coef = 5×1
    
       21.9901
        0.0997
        0.1805
        0.2563
        0.1701
    
    

    歴史の試験に対応する係数が最も大きくなっています。したがって、historycomprehensive の予測値に最も寄与します。

    ポップコーン生産量のデータを読み込みます。

    load popcorn.mat

    6 行 3 列の行列 popcorn の列に、Gourmet、National、および Generic の各ブランドについてのポップコーン生産量の観測値が格納されています。行列の最初の 3 行はオイル タイプの製造器具で製造したポップコーン、最後の 3 行はエアー タイプの製造器具で製造したポップコーンに対応しています。

    関数repmattableを使用して、ブランド、製造器具タイプ、ポップコーン生産量を表す変数を含む table を作成します。

    brand = [repmat("Gourmet",6,1);repmat("National",6,1);repmat("Generic",6,1)];
    poppertype = [repmat("air",3,1);repmat("oil",3,1);repmat("air",3,1);repmat("oil",3,1);repmat("air",3,1);repmat("oil",3,1)];
    tbl = table(brand,poppertype,popcorn(:),VariableNames=["Brand" "PopperType" "PopcornYield"]);

    2 因子 ANOVA を実行して、3 つのブランドと 2 つの製造器具タイプのいずれでもポップコーン生産量が同じであるという帰無仮説を検定します。ウィルキンソンの表記法を使用して ANOVA モデルの式を指定します。

    aovLinear = anova(tbl,"PopcornYield ~ Brand + PopperType")
    aovLinear = 
    2-way anova, constrained (Type III) sums of squares.
    
    PopcornYield ~ 1 + Brand + PopperType
    
                      SumOfSquares    DF    MeanSquares     F       pValue  
                      ____________    __    ___________    ___    __________
    
        Brand            15.75         2       7.875        63         1e-07
        PopperType         4.5         1         4.5        36    3.2548e-05
        Error             1.75        14       0.125                        
        Total               22        17                                    
    
    
      Properties, Methods
    
    
    

    aovLinear は 2 因子 ANOVA の結果を格納する anova オブジェクトです。aovLinear の ANOVA モデルは線形であり、交互作用項は含まれていません。"p" 値が小さいことから、ブランドと製造器具タイプの両方がポップコーン生産量に対して有意な影響を与えることがわかります。

    ブランドと製造器具タイプの間の交互作用がポップコーン生産量に有意な影響を与えるかどうかを調べるために、交互作用項 Brand:PopperType を含むモデルで 2 因子 ANOVA を実行します。

    aovInteraction = anova(tbl,"PopcornYield ~ Brand + PopperType + Brand:PopperType")
    aovInteraction = 
    2-way anova, constrained (Type III) sums of squares.
    
    PopcornYield ~ 1 + Brand*PopperType
    
                            SumOfSquares    DF    MeanSquares     F        pValue  
                            ____________    __    ___________    ____    __________
    
        Brand                    15.75       2        7.875      56.7     7.679e-07
        PopperType                 4.5       1          4.5      32.4    0.00010037
        Brand:PopperType      0.083333       2     0.041667       0.3       0.74622
        Error                   1.6667      12      0.13889                        
        Total                       22      17                                     
    
    
      Properties, Methods
    
    
    

    anova オブジェクト aovInteraction の ANOVA モデルには、交互作用項 Brand:PopperType が含まれています。Brand:PopperType の項の "p" 値は 0.05 より大きくなっています。したがって、ブランドと製造器具タイプにポップコーン生産量に対する交互作用効果があると結論付けるだけの十分な証拠はありません。

    anova オブジェクトの Metrics プロパティで、ANOVA モデルの当てはめに関する統計を確認できます。どちらのモデルが応答データにより適合するかを特定するために、aovLinearaovInteractionMetrics プロパティを表示します。

    aovLinear.Metrics
    ans=1×7 table
         MSE      RMSE      SSE      SSR     SST    RSquared    AdjustedRSquared
        _____    _______    ____    _____    ___    ________    ________________
    
        0.125    0.35355    1.75    20.25    22     0.92045         0.88731     
    
    
    aovInteraction.Metrics
    ans=1×7 table
          MSE       RMSE       SSE       SSR      SST    RSquared    AdjustedRSquared
        _______    _______    ______    ______    ___    ________    ________________
    
        0.13889    0.37268    1.6667    20.333    22     0.92424         0.78535     
    
    

    メトリクスの table から、交互作用モデルよりも線形モデルの方が平均二乗誤差 (MSE) がわずかに小さいことがわかります。自由度調整済み決定係数の値は線形モデルの方が高くなっています。これらのメトリクスから、線形モデルの方が交互作用モデルよりもポップコーンのデータに適合すると考えられます。

    自動車の標本データを読み込みます。

    load carbig.mat

    変数 Model には自動車の型式のデータが格納され、変数 Origin には自動車が製造された国のデータが格納されています。ModelOrigin を末尾に空白を含む文字配列から string ベクトルに変換します。

    Model = strtrim(string(Model));
    Origin = strtrim(string(Origin));

    変数 MPG には自動車の燃費のデータが格納されています。日本と米国で製造された自動車の型式、生産国、および燃費のデータを含む table を作成します。

    idxJapanUSA = (Origin=="Japan"|Origin=="USA");
    tbl = table(Model(idxJapanUSA),Origin(idxJapanUSA),MPG(idxJapanUSA),VariableNames=["Origin" "Model" "MPG"]);

    日本と米国で、それぞれ固有の一連の型式を製造しています。そのため、因子 Model は因子 Origin で入れ子になっています。入れ子形式の 2 因子 ANOVA を実行して、いずれの型式と生産国でも自動車の燃費が同じであるという帰無仮説を検定します。

    aov = anova(tbl,"MPG ~ Origin + Model(Origin)")
    aov = 
    2-way anova, constrained (Type III) sums of squares.
    
    MPG ~ 1 + Model(Origin) + Origin
    
                         SumOfSquares    DF     MeanSquares      F         pValue  
                         ____________    ___    ___________    ______    __________
    
        Model(Origin)            0         0           0            0           NaN
        Origin               18873       244      77.347       10.138    3.0582e-25
        Error               633.26        83      7.6296                           
        Total                19506       327                                       
    
    
      Properties, Methods
    
    
    

    "p" 値が小さく、帰無仮説を 99% の信頼度で棄却できることを示しています。自動車の型式と生産国が自動車の燃費に統計的に有意な影響を与えると結論付けるだけの十分な証拠が存在します。

    アルゴリズム

    ANOVA では、応答データの変動全体を次の 2 つの成分に分割します。

    • ANOVA モデルで記述される因子データと応答データの関係における変動。この変動は回帰二乗和 (SSR) と呼ばれます。SSR は方程式 i=1n(y^iy¯)2 で表されます。ここで、n は標本の観測値の数、y^i は観測値 i の予測値、y¯ は標本平均です。

    • ANOVA モデルの誤差項によるデータの変動。これは誤差二乗和 (SSE) と呼ばれます。SSE は方程式 i=1n(yiy^i)2 で表されます。ここで、yi は観測値 i の値です。

    上記の分割に基づいて、二乗総和 (SST) は次のように表されます。

    i=1n(yiy¯)2SST=i=1n(y^iy¯)2SSR+i=1n(yiy^i)2SSE

    関数 anova は、その項を比較モデルに追加した場合の SSE の減少を測定することにより、ANOVA モデルの項の二乗和 (SSTerm) を計算します。比較モデルは aov.SumOfSquaresType で与えられます (詳細については SumOfSquaresType を参照)。

    ANOVA では、SSE と SSTerm を使用して F 検定を実行します。カテゴリカルの主効果についての帰無仮説は、項の係数がすべてのグループで同じであることです。連続する項と交互作用項の帰無仮説は、項の係数がゼロであることです。係数がゼロであるということは、その項の値が応答データに影響を与えないことを意味します。F 統計量は次のように計算されます。

    F=SSTerm/dfTermSSE/dfError=MSTermMSError

    上記の式で、dfTerm は項の自由度、dfError は誤差の自由度、MSTermMSError はそれぞれ項と誤差の平均二乗です。

    関数 anova は、モデル項と誤差の行をもつ成分 ANOVA 表を表示します。ANOVA 表の列は次のとおりです。

    定義
    SumOfSquares二乗和
    DF自由度
    MeanSquares平均二乗 (比率 SumOfSquares/DF)
    FF 統計量 (ソースの平均二乗と誤差の平均二乗の比率)
    pValuep 値 (帰無仮説のもとで計算される F 統計量が検定統計量の計算値より大きい値になる確率)。anova では、F 分布の cdf からこの確率が導き出されます。

    参照

    [1] Wackerly, D. D., W. Mendenhall, III, and R. L. Scheaffer. Mathematical Statistics with Applications, 7th ed. Belmont, CA: Brooks/Cole, 2008.

    [2] Dunn, O. J., and V. A. Clark Hoboken. Applied Statistics: Analysis of Variance and Regression. NJ: John Wiley & Sons, Inc., 1974.

    バージョン履歴

    R2022b で導入