変量効果のある分散分析 (ANOVA)
この例では、とり得る水準の大規模な (無限) 集合から因子の水準が無作為に選択される状況でモデルの当てはめにanovan
を使用する方法を説明します。
通常の ANOVA モデルにおいて、各グループ化変数は固定した因子を表します。その因子の水準は値の固定セットです。目標は、因子水準が異なるとき応答値が異なるかどうかを判定することです。
モデルの設定
標本データを読み込みます。
load mileage
関数 anova2
は、均衡なデータについてのみ作用し、入力行列の行の数と列の数からグループ化変数の値を推論します。他方、関数 anovan
は、グループ化変数の値のベクトルを明示的に作成することが必要になります。これらのベクトルは次の方法で作成します。
燃費の各値に対して工場を示す配列を生成します。この配列は、1 列目が 1、2 列目が 2、3 列目が 3 です。
factory = repmat(1:3,6,1);
燃料の各値に対して自動車の種類を示す配列を作成します。この配列は、mileage の最初の 3行に対し 1 を、残りの 3 行に対し 2 を指定します。
carmod = [ones(3,3); 2*ones(3,3)];
これらの行列をベクトルに変え、それらを表示します。
mileage = mileage(:); factory = factory(:); carmod = carmod(:); [mileage factory carmod]
ans = 18×3
33.3000 1.0000 1.0000
33.4000 1.0000 1.0000
32.9000 1.0000 1.0000
32.6000 1.0000 2.0000
32.5000 1.0000 2.0000
33.0000 1.0000 2.0000
34.5000 2.0000 1.0000
34.8000 2.0000 1.0000
33.8000 2.0000 1.0000
33.4000 2.0000 2.0000
33.7000 2.0000 2.0000
33.9000 2.0000 2.0000
37.4000 3.0000 1.0000
36.8000 3.0000 1.0000
37.6000 3.0000 1.0000
⋮
変量効果のあるモデルの当てはめ
いくつかの工場を調査し、同じ自動車モデルを別の工場で製造する場合 (既存の工場または工場の建設を想定する) についての情報を取得するとします。この情報を得るには、交互作用の項を含み、因子 factory がランダムであるモデルを指定して、分散分析モデルを当てはめます。
[pvals,tbl,stats] = anovan(mileage, {factory carmod}, ... 'model',2, 'random',1,'varnames',{'Factory' 'Car Model'});
前述のコードの入力 'random',1
を省いて得られたこの近似の固定効果バージョンでは、自動車モデルの影響は有意であり、p 値は 0.0039 です。しかし、この例では、工場間の変数 'Car Model'
による影響の無作為な変動を考慮します。この場合、自動車モデルの影響は有意ですが、p 値はより高く 0.0136 となります。
変量効果のあるモデルに対するF 統計量
変量効果をもつモデルにおける F 統計量は、すべての固定効果をもつモデルにおけるものとは異なる定義がなされます。固定効果モデルにおいては、項に対する F 統計量を計算するのに、その項の平均二乗と誤差の平均二乗との比を取ります。しかし、変量効果のモデルでは、F 統計量は分母に別の平均二乗を使用します。
「モデルの設定」で説明されている例において、変数 'Factory'
の効果は自動車のモデルによって変化する可能性があります。この場合、F 統計量において、誤差の平均二乗の代わりに交互作用の平均二乗が使用されます。
F 統計量を検出します。
F = 26.6756 / 0.02
F = 1.3338e+03
統計量の自由度は、分子 (2)、分母 (2) に使用した平均二乗の自由度です。
p 値を検出します。
pval = 1 - fcdf(F,2,2)
pval = 7.4919e-04
変量効果をもつ場合、各平均二乗の期待値は、誤差項の分散に依存するだけでなく、変量効果による分散にも依存します。期待値をさまざまなモデル項による線形結合として記述することによりこれらの依存性を見ることができます。
これらの線形結合の係数を特定します。
stats.ems
ans = 4×4
6.0000 0.0000 3.0000 1.0000
0.0000 9.0000 3.0000 1.0000
0.0000 0.0000 3.0000 1.0000
0 0 0 1.0000
これにより、構造体 stats
の ems
フィールドが返されます。
線形結合のテキスト表現を表示します。
stats.txtems
ans = 4×1 cell
{'6*V(Factory)+3*V(Factory:Car Model)+V(Error)' }
{'9*Q(Car Model)+3*V(Factory:Car Model)+V(Error)'}
{'3*V(Factory:Car Model)+V(Error)' }
{'V(Error)' }
自動車モデルによる平均二乗の期待値 (第 2 項) は、自動車モデルの効果の二次関数からの寄与を含み、さらに、交互作用項の効果の分散の 3 倍を加え、誤差項の分散を加えます。自動車モデルの効果がすべてゼロの場合、式は第 3 項 (交互作用項) の平均二乗の期待値に縮小されます。このため、自動車モデル効果に対する F 統計量は、分母に交互作用の平均二乗を使用します。
F 統計量の分母に必要な期待値をもつ項がない場合もあります。その場合、分母は平均二乗の線形結合になります。stats 構造体には、各 F 統計量に対する分母を定義するためのフィールドがあります。txtdenom
フィールド (stats.txtdenom
) にはテキスト表現が格納され、denom
フィールドにはモデルの項の分散の線形結合を定義する行列が格納されます。このような均衡化されたモデルの場合、denom
行列 (stats.denom
) は、分母は一項の平均二乗であるため、0 と 1 を含みます。
txtdenom
フィールドを表示します。
stats.txtdenom
ans = 3×1 cell
{'MS(Factory:Car Model)'}
{'MS(Factory:Car Model)'}
{'MS(Error)' }
denom
フィールドを表示します。
stats.denom
ans = 3×3
0.0000 1.0000 0.0000
0.0000 1.0000 0.0000
-0.0000 0.0000 1.0000
分散成分
「モデルの設定」で説明されているモデルに対して、無作為に選んだ工場で製造された特定のモデルの特定の自動車について燃費を考えます。その自動車の分散は、ランダムな項のそれぞれからの成分または寄与の和です。
ランダム項の名前を表示します。
stats.rtnames
ans = 3×1 cell
{'Factory' }
{'Factory:Car Model'}
{'Error' }
この分散は未知ですが、データから推定することができます。stats
構造体の ems
フィールドが、各項の平均二乗の期待値を、ランダム項に対する未知の分散、および固定した項に対する 2 次式の線形結合として表します。ランダム項に対して期待される平均二乗の式を取り、計算した平均二乗に等しいと置く場合、未知の分散に対して解くことができる連立方程式を得ます。これらの解は、分散成分の推定です。
各項の分散成分の推定を表示します。
stats.varest
ans = 3×1
4.4426
-0.0313
0.1139
ある条件下で、ある項に依る変化が異常に低く、項の分散成分の推定は負になることがあります。その場合、推定を 0 と置くことは一般的であり、これにより、たとえば、成分の棒グラフを作成することができます。
各成分の棒グラフを作成します。
bar(max(0,stats.varest))
gca.xtick = 1:3; gca.xticklabel = stats.rtnames;
分散推定に対する信頼限界を計算することもできます。関数 anovan
は、分散推定平均二乗に対する信頼限界を計算し、これらの区間すべてを含む各分散成分の下限と上限を見つけます。この手続きは、データが均衡であれば、保守的 (conservative) な区間の集合になります (すなわち、95% 信頼限界は グループ化変数の各組み合わせに対して観測数が同じ場合、真の分散を含む確率が少なくとも 95% あります)。データが不均衡な場合、これらの近似は保守的であることが保証されません。
分散の推定と、分散の推定の信頼限界を成分ごとに表示します。
[{'Term' 'Estimate' 'Lower' 'Upper'}; stats.rtnames, num2cell([stats.varest stats.varci])]
ans=4×4 cell array
{'Term' } {'Estimate'} {'Lower' } {'Upper' }
{'Factory' } {[ 4.4426]} {[1.0736]} {[175.6038]}
{'Factory:Car Model'} {[ -0.0313]} {[ NaN]} {[ NaN]}
{'Error' } {[ 0.1139]} {[0.0586]} {[ 0.3103]}