2014-05-07

実験計画法 (Design of Experiment) とは何か? (7)

RSM, Response Surface Methodology(応答曲面法)を利用した実験計画と解析例を、まず、今までの紹介した実験例の延長で扱ってみたいと思います。というのは RSM における実験計画には、回帰分析をすることを前提とした計画があるためですが、それについては次回以降に説明をする予定です。


3 因子 3 水準の実験(繰り返しなし)

今回取り上げる例は、「高」「低」や「大」「小」といった離散的な水準あるいは「A 社品」「B 社品」といった質的な量ではなく、連続量を設定できる因子の水準を扱います。

条件温度流量回転数収率
1803025081.64
2803030080.14
3803035081.08
4804025080.57
5804030078.77
6804035078.95
7805025080.53
8805030077.88
9805035076.18
101003025081.68
111003030081.14
121003035082.61
131004025082.60
141004030080.19
151004035080.04
161005025081.85
171005030079.65
181005035077.89
191203025083.53
201203030083.53
211203035081.95
221204025083.04
231204030082.36
241204035081.92
251205025083.60
261205030081.79
271205035079.80

例)

ある製品の製造工程において、「温度」、「流量」、「回転数」の 3 つの因子が収量に影響を与えるかどうかを調べるため、3 水準の実験を計画し、各条件の収量を測定した結果を右に示した。この 3 因子が収量に及ぼす影響を分析せよ。ただし、過去の知見から「流量」と「回転数」には交互作用のあることが判っているものとする。

右のテーブル全体を選択して(クリップボードへ)コピーしてから、R 上で次のコマンドを実行してください。クリップボードの値が R のデータフレーム(テーブル)へ読み込まれます。

> tbl <- read.table("clipboard", header = T)
>
> tbl
   条件 温度 流量 回転数  収率
1     1   80   30    250 81.64
2     2   80   30    300 80.14
3     3   80   30    350 81.08
4     4   80   40    250 80.57
5     5   80   40    300 78.77
6     6   80   40    350 78.95
7     7   80   50    250 80.53
8     8   80   50    300 77.88
9     9   80   50    350 76.18
10   10  100   30    250 81.68
11   11  100   30    300 81.14
12   12  100   30    350 82.61
13   13  100   40    250 82.60
14   14  100   40    300 80.19
15   15  100   40    350 80.04
16   16  100   50    250 81.85
17   17  100   50    300 79.65
18   18  100   50    350 77.89
19   19  120   30    250 83.53
20   20  120   30    300 83.53
21   21  120   30    350 81.95
22   22  120   40    250 83.04
23   23  120   40    300 82.36
24   24  120   40    350 81.92
25   25  120   50    250 83.60
26   26  120   50    300 81.79
27   27  120   50    350 79.80
> 

パッケージ rsm を読み込んで、回帰分析をするために、tbl の因子水準を -1, 0, 1 にコード化します。

> library("rsm")
> (tbl.coded <- coded.data(tbl, x1 ~ (温度 - 100)/20, x2 ~ (流量 - 40) / 10, x3 ~ (回転数 - 300) / 50))
   温度 流量 回転数  収率
1    80   30    250 81.64
2    80   30    300 80.14
3    80   30    350 81.08
4    80   40    250 80.57
5    80   40    300 78.77
6    80   40    350 78.95
7    80   50    250 80.53
8    80   50    300 77.88
9    80   50    350 76.18
10  100   30    250 81.68
11  100   30    300 81.14
12  100   30    350 82.61
13  100   40    250 82.60
14  100   40    300 80.19
15  100   40    350 80.04
16  100   50    250 81.85
17  100   50    300 79.65
18  100   50    350 77.89
19  120   30    250 83.53
20  120   30    300 83.53
21  120   30    350 81.95
22  120   40    250 83.04
23  120   40    300 82.36
24  120   40    350 81.92
25  120   50    250 83.60
26  120   50    300 81.79
27  120   50    350 79.80

Data are stored in coded form using these coding formulas ...
x1 ~ (温度 - 100)/20
x2 ~ (流量 - 40)/10
x3 ~ (回転数 - 300)/50
> print(tbl.coded, decode = FALSE)
   条件 x1 x2 x3  収率
1     1 -1 -1 -1 81.64
2     2 -1 -1  0 80.14
3     3 -1 -1  1 81.08
4     4 -1  0 -1 80.57
5     5 -1  0  0 78.77
6     6 -1  0  1 78.95
7     7 -1  1 -1 80.53
8     8 -1  1  0 77.88
9     9 -1  1  1 76.18
10   10  0 -1 -1 81.68
11   11  0 -1  0 81.14
12   12  0 -1  1 82.61
13   13  0  0 -1 82.60
14   14  0  0  0 80.19
15   15  0  0  1 80.04
16   16  0  1 -1 81.85
17   17  0  1  0 79.65
18   18  0  1  1 77.89
19   19  1 -1 -1 83.53
20   20  1 -1  0 83.53
21   21  1 -1  1 81.95
22   22  1  0 -1 83.04
23   23  1  0  0 82.36
24   24  1  0  1 81.92
25   25  1  1 -1 83.60
26   26  1  1  0 81.79
27   27  1  1  1 79.80

Variable codings ...
x1 ~ (温度 - 100)/20
x2 ~ (流量 - 40)/10
x3 ~ (回転数 - 300)/50
> 

コード化したデータを使って高々二次の線形モデル (SO) にフィッティング(回帰分析)をします。

> (tbl.rsm <- rsm(収率 ~ SO(x1, x2, x3), data = tbl.coded))
Call:
rsm(formula = 収率 ~ SO(x1, x2, x3), data = tbl.coded)

Coefficients:
         (Intercept)      FO(x1, x2, x3)x1      FO(x1, x2, x3)x2  
            80.54815               1.43222              -1.00722  
    FO(x1, x2, x3)x3  TWI(x1, x2, x3)x1:x2  TWI(x1, x2, x3)x1:x3  
            -1.03444               0.37083               0.00250  
TWI(x1, x2, x3)x2:x3    PQ(x1, x2, x3)x1^2    PQ(x1, x2, x3)x2^2  
            -0.90833               0.10889              -0.02278  
  PQ(x1, x2, x3)x3^2  
             0.47556  

>

重回帰分析の統計値の算出は、通常の場合と同じように summary を使います。

> summary(tbl.rsm)

Call:
rsm(formula = 収率 ~ SO(x1, x2, x3), data = tbl.coded)

             Estimate Std. Error  t value  Pr(>|t|)    
(Intercept) 80.548148   0.274184 293.7743 < 2.2e-16 ***
x1           1.432222   0.126922  11.2842 2.563e-09 ***
x2          -1.007222   0.126922  -7.9357 4.073e-07 ***
x3          -1.034444   0.126922  -8.1502 2.831e-07 ***
x1:x2        0.370833   0.155448   2.3856   0.02896 *  
x1:x3        0.002500   0.155448   0.0161   0.98736    
x2:x3       -0.908333   0.155448  -5.8433 1.956e-05 ***
x1^2         0.108889   0.219836   0.4953   0.62672    
x2^2        -0.022778   0.219836  -0.1036   0.91869    
x3^2         0.475556   0.219836   2.1632   0.04506 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Multiple R-squared:  0.9466,    Adjusted R-squared:  0.9184 
F-statistic:  33.5 on 9 and 17 DF,  p-value: 4.426e-09

Analysis of Variance Table

Response: 収率
                Df Sum Sq Mean Sq F value    Pr(>F)
FO(x1, x2, x3)   3 74.445 24.8150 85.5786 1.839e-10
TWI(x1, x2, x3)  3 11.551  3.8504 13.2786 0.0001029
PQ(x1, x2, x3)   3  1.431  0.4771  1.6452 0.2163396
Residuals       17  4.929  0.2900                  
Lack of fit     17  4.929  0.2900                  
Pure error       0  0.000                          

Stationary point of response surface:
       x1        x2        x3 
-1.672520 -2.868849 -1.647805 

Stationary point in original units:
     温度      流量    回転数 
 66.54960  11.31151 217.60974 

Eigenanalysis:
$values
[1]  0.7583657  0.1520116 -0.3487107

$vectors
         [,1]      [,2]       [,3]
x1 -0.1477192 0.9303944  0.3354777
x2 -0.5230889 0.2143790 -0.8248755
x3  0.8393789 0.2973346 -0.4550111

上の赤字の部分は Windows 版 (R 3.1.0) の場合に表示されるのですが、Linux 版 (Fedora 20, R 3.0.2) では表示されません。表示されない理由は不明ですが、重相関係数 (R2) などは算出されています。

> names(summary(tbl.rsm))
 [1] "call"          "terms"         "residuals"     "coefficients"  "aliased"       "sigma"         "df"            "r.squared"    
 [9] "adj.r.squared" "fstatistic"    "cov.unscaled"  "canonical"     "lof"           "coding"       
> summary(tbl.rsm)$r.squared
[1] 0.946626

通常の解析では、ここで変数選択(ステップワイズ)をしてフィッティングを良くするのですが、その場合、他のパッケージを利用する必要がありますので、今回はこのまま続けます。なお、回帰式の変数 x1, x2, x3 は、それぞれ因子 温度, 流量, 回転数の水準が -1, 0, 1 にコード化されていますので、それぞれの係数の推定値の大きさが、応答に及ぼす大きさであると評価することができます。主効果であれば、x1, x2, x3、交互効果であれば x1:x2, x1:x3, x2:x3 の係数の推定値の大きさになります。

残渣などからを回帰分析の善し悪しを診断します。なお、この例は意図的に作ってあるため、極端な外れ値は存在しません。

> par (mfrow = c (2,2))
> plot(tbl.rsm)
>

応答の等高線図 (Contour Map) をプロットしてみましょう。

> par (mfrow = c (2,3))
> contour(tbl.rsm, ~x1+x2+x3, at = xs(tbl.rsm))
> persp (tbl.rsm, ~x1+x2+x3, at = xs(tbl.rsm)) 
>

応答のターゲットあるいは極小値/極大値を見つけ出すコマンドは、rsm パッケージに用意されていませんが、応答曲面の傾斜に沿って、最も降下あるいは上昇するラインの応答の予測値 (yhat) を算出できますので、求める応答の値を実現する因子の組合せを探索する出発点として利用できます。

> steepest(tbl.rsm)
Path of steepest ascent from ridge analysis:
   dist    x1     x2     x3 |   温度  流量 回転数 |    yhat
1   0.0 0.000  0.000  0.000 | 100.00 40.00 300.00 |  80.548
2   0.5 0.370 -0.150 -0.301 | 107.40 38.50 284.95 |  81.536
3   1.0 0.677 -0.038 -0.735 | 113.54 39.62 263.25 |  82.587
4   1.5 0.864  0.205 -1.209 | 117.28 42.05 239.55 |  83.893
5   2.0 0.997  0.469 -1.669 | 119.94 44.69 216.55 |  85.538
6   2.5 1.106  0.737 -2.118 | 122.12 47.37 194.10 |  87.549
7   3.0 1.204  1.004 -2.558 | 124.08 50.04 172.10 |  89.927
8   3.5 1.296  1.270 -2.993 | 125.92 52.70 150.35 |  92.681
9   4.0 1.383  1.535 -3.426 | 127.66 55.35 128.70 |  95.815
10  4.5 1.467  1.800 -3.855 | 129.34 58.00 107.25 |  99.320
11  5.0 1.549  2.064 -4.282 | 130.98 60.64  85.90 | 103.198
> 

RSM の目的

RSM の目的は、真の理論式を探し出すことではありません。実験範囲において多項式などの回帰モデルを用いて、できるだけ精度よく現象を近似すること、さらには欲しい最適な水準の組合せ(最適条件)を探し出すことです。

0 件のコメント: