2017年1月7日土曜日

実験計画法 多因子-2水準-L16直交表 に関するメモ (Design of experiments & Taguchi method)

まだまだ、実験計画法について復習したいと思います。
ようやく3因子以上の多因子について学びたいと思います。
多因子で水準数が多い場合は、単純には実験数が多くなってしまう問題があり現実的でない場合が多々あります。

実験数を減らしながら、因子の影響をしっかり把握するために、ようやく直交表の出番となります。

それではさっそく例題を使って直交表を使った分散分析と区間推定を実践していきたいと思います。

今回は各因子2水準という制約のある場合について例題を取り上げたいと思います。

■5因子、5因子交互作用の例を実践

以下のような5因子と5因子交互作用を考えたい場合の分散分析を考えたいと思います。


因子成分
A1a
B2b
C4c
D8d
F14bcd
G15abcd
A✕B3ab
A✕C5ac
A✕D9ad
B✕C6bc
B✕D10bd
C✕D12cd
誤差
7abc
11abd
13acd

因子には、Eの記号は使っていません(Eは誤差と混乱するため)。

上記を2水準のL16の直交表にあてはめて、出力を得た結果が以下になります。

成分
ABA✕BCA✕CB✕CDA✕DB✕DC✕DFG
123456789101112131415出力y
111111111111111123
211111112222222216
311122221111222226
411122222222111123
512211221122112221
612211222211221118
712222111122221129
812222112211112228
921212121212121228
1021212122121212122
1121221211212212122
1221221212121121123
1322112211221122238
1422112212112211241
1522121121221211238
1622121122112122125
成分
aaaaaaaa
bbbbbbbb
cccccccc
dddddddd

16回の試験を行うことで、5つの因子と、5つの交互作用に関する分散分析表を作成します。

■分散分析表の計算について

分散分析表の計算をまずはしていきましょう。
2水準であることから、各要素の平方和は以下のように計算できます。


■Scilabでの分散分析表の計算

実際にscilabで計算してみました。上記の式からも想像できるように、計算が単純です。
MATLABだfracfactという一部実施要因計画法の関数があるようです。
scilabにはそういった便利な関数はないので、自分で定義しています。
(また、あえて別の統計用のソフトでなくscilabを使っているのは、計算過程を確認しやすく、自習する目的のひとつです。)

//実験データ入力[データ]
Y = [
23
16
26
23
21
18
29
28
28
22
22
23
38
41
38
25
]

N=16//直交表の数

dfF = [
1    1    1    1    1    1    1    1    1    1    1    1    1    1    1
1    1    1    1    1    1    1    -1    -1    -1    -1    -1    -1    -1    -1
1    1    1    -1    -1    -1    -1    1    1    1    1    -1    -1    -1    -1
1    1    1    -1    -1    -1    -1    -1    -1    -1    -1    1    1    1    1
1    -1    -1    1    1    -1    -1    1    1    -1    -1    1    1    -1    -1
1    -1    -1    1    1    -1    -1    -1    -1    1    1    -1    -1    1    1
1    -1    -1    -1    -1    1    1    1    1    -1    -1    -1    -1    1    1
1    -1    -1    -1    -1    1    1    -1    -1    1    1    1    1    -1    -1
-1    1    -1    1    -1    1    -1    1    -1    1    -1    1    -1    1    -1
-1    1    -1    1    -1    1    -1    -1    1    -1    1    -1    1    -1    1
-1    1    -1    -1    1    -1    1    1    -1    1    -1    -1    1    -1    1
-1    1    -1    -1    1    -1    1    -1    1    -1    1    1    -1    1    -1
-1    -1    1    1    -1    -1    1    1    -1    -1    1    1    -1    -1    1
-1    -1    1    1    -1    -1    1    -1    1    1    -1    -1    1    1    -1
-1    -1    1    -1    1    1    -1    1    -1    -1    1    -1    1    1    -1
-1    -1    1    -1    1    1    -1    -1    1    1    -1    1    -1    -1    1
]
//直交表

//平方和の計算
S = dfF'*Y/(N/2)
S = S.*S*(N/4)

上記の平方和から、分散分析表を作成すると以下のようになります。

因子S自由度VFp
A175.56251175.5611.920.041
B189.06251189.0612.840.037
C3.062513.060.210.679
D52.5625152.563.570.155
F39.0625139.062.650.202
G27.5625127.561.870.265
A✕B95.0625195.066.450.085
A✕C150.06251150.0610.190.050
A✕D0.062510.060.000.952
B✕C0.562510.560.040.858
B✕D0.062510.060.000.952
C✕D0.562510.560.040.858
誤差
22.5625
3
14.73
7.5625
14.0625

オレンジ色のセルにあるように、A✕D,B✕C,B✕D,C✕Dに関しては交互作用がまったくないので、誤差の項に入れるのが望ましいと考えるのが一般的です。
いわゆるプーリングの作業です。
Cも省きたいところですが、A✕Cに効果がみられるので、残しておきます。

プーリング作業をした結果が以下になります。

因子S自由度VFp
A175.56251175.5627.050.014
B189.06251189.0629.130.012
C3.062513.060.470.541
D52.5625152.568.100.065
F39.0625139.066.020.091
G27.5625127.564.250.131
A✕B95.0625195.0614.650.031
A✕C150.06251150.0623.120.017
誤差
0.0625
7
6.49
0.5625
0.0625
0.5625
22.5625
7.5625
14.0625

上記の結果からA✕B,A✕Cの2つの交互作用があることが分かりました。

■交互作用が一部でもない場合の区間推定

続いて、各組み合わせにおけるt分布による区間推定を実施しましょう。

今回は、前回の2因子の場合とは違い、交互作用が存在しないものがあるので、t分布の区間推定の方法の算出が少し変わります。

交互作用がある場合は、その組み合わせだけから平均値を求めていましたが、交互作用がないのであれば、それは実験数が少ないため効率的でないといった問題が生じるので、以下のように計算していきます。

まず、各因子の効果をα〜ηで表すとし、2つの交互因子を考えると以下のようにモデルを表現することができます。


各因子の要因効果は、以下のように個別に計算していきます。
    ・
    ・
    ・
 


上記の結果から、μは以下のように表すことができます。


t分布を使った区間推定は以下の式より求めることができます。


ここで、n_eは有効反復数(有効繰り返し数)と呼ばれます。
田口の式よりn_eは以下のように計算できます。


今回は、n_e = 16/9となります。

以上の式を参考に区間推定ができます。
うまくscilabで計算する方法が思いつかなかったので、単純にスプレッドシートで各水準の平均を計算した結果が以下です。


出力y
All26.3125
A1B122
A1B224
A2B123.75
A2B235.5
A1C119.5
A1C226.5
A2C132.25
A2C227
A123
A229.625
D128.125
D224.5
F127.875
F224.75
G125
G227.625

これを上記の式にそれぞれ64通りあてはめて計算します。
ちなみに、64通りは以下のような感じに並べられます。


No.ABCDFGABAC
11111111111
21111121111
31111211111
41111221111
51112111111
61112121111
71112211111
81112221111
91121111112
101121121112
111121211112
121121221112
622222122222
632222212222
642222222222

上記を計算し、例えば出力yを最大にするものを選択するとすると、A=2,B=2,C=1,D=1,F=1,G=2の時が選択できます。
区間推定も実施すると以下のような結果になります。


平均42.8125
上側信頼区間38.2941
下側信頼区間47.3309

■Rで解く

追加でRで分散分析を実施します。
データを読み込み分散分析を実施するのはすぐできるので、Rを使うのを激しくオススメします。
ただし、そこから区間推定などを各因子で実施するのは、スプレッドシートなどを用いた方がやはり良さそうな印象を持ちます。

#作業ディレクトリの設定
setwd("作業ディレクトリを記入")

#データの読み出し
d<-read.table("data.csv",header = TRUE,sep = ",")
str(d)#読み出しデータ構造の確認

#モデルあてはめ
d.lm <- lm(y~A+B+C+D+F+G+A:B+A:C+A:D+B:C+B:D+C:D,data = d)
summary(d.lm)
anova(d.lm)

#モデルあてはめ(Pooling)
d.pool.lm <- lm(y~A+B+C+D+F+G+A:B+A:C,data = d)
summary(d.pool.lm)
anova(d.pool.lm)

#グラフの描画(推定モデルの確認)
par(mfrow=c(2,2))
plot(d.pool.lm)


本ページは下の書籍を参考に自習用にまとめています。



他の参考書籍です



関連ページ
2因子ー質的因子の場合
1因子ー量的因子ー二次モデルの場合
1因子ー量的因子ー一次モデルの場合
1因子ー質的因子の場合

0 件のコメント:

コメントを投稿