rで実験計画法 後編

41
R で実験計画法(後編) @ito_yan E-mail:[email protected] 2012.04.28 Tokyo.R #22

Upload: itoyan110

Post on 28-May-2015

18.673 views

Category:

Technology


4 download

DESCRIPTION

This slide was presented in Tokyo.R #22.It describes about design of experiment with R. DoE.base package is useful for software testing because it makes easier for us to make orthogonal array.

TRANSCRIPT

Page 1: Rで実験計画法 後編

Rで実験計画法(後編)

@ito_yan

E-mail:[email protected]

2012.04.28

Tokyo.R #22

Page 2: Rで実験計画法 後編

はじめに

•所属する組織の意見・見解ではありません

•つまらなかったら睡眠学習や復習に当てましょう

•コメント歓迎します(メール、twitterも含めて)

•実験計画法を味わってみましょう

2

Page 3: Rで実験計画法 後編

自己紹介

• Twitter ID : @ito_yan

•最近読んでる統計本

•一般化線形モデル入門

•統計解析入門(赤平)

• Rに初めて触れて6年

• Rパッケージガイドブックの記事を書く

3

Page 4: Rで実験計画法 後編

前編のキーワード

•一元配置 / 二元配置

•因子による影響の有無を調べる

•ラテン方格、グレコ・ラテン方格

•多元配置よりもさらに効率よく実験するための表

•交互作用

•二元配置で見られる、組合せによる効果

•プーリング

•不要な因子はなかったものとして誤差に取り込む

•前回のスライドは下記URLを参照

• http://www.slideshare.net/itoyan110/r-9139125

4

Page 5: Rで実験計画法 後編

今日の話題

•二元配置から直交表へ

•直交表の性質

•直交表による実験方法

•データの分解

•交互作用の考慮

•直交表のソフトウェアテストへの応用

• GUI画面のテスト

• Rによる直交表生成

5

Page 6: Rで実験計画法 後編

二元配置から直交表へ

6

Page 7: Rで実験計画法 後編

復習:直交表とは

• k水準の2因子からなる二元配置に、新たに組み込めるk水準の因子はk-1個まで

• k^2回の実験でk水準の因子がk+1個まで調べられる

• k=p^s(pは素数、sは正の整数)の場合しか配置が知られていない

• k水準の因子がk+1個まで調べられる配置を整理したものは直交表と呼ばれる

•注:因子ごとに水準数が異なる直交表もある

7

Page 8: Rで実験計画法 後編

復習:因子の組込の例(k=3とした場合)

•二元配置の表に因子を組み込む

• 3水準の因子なら(3-1)個まで組み込める

• 3=3^1なので、組み込み可能である

8

B1 B2 B3

A1 C1 C2 C3

A2 C2 C3 C1

A3 C3 C1 C2

B1 B2 B3

A1 C1D1 C2D3 C3D2

A2 C2D2 C3D1 C1D3

A3 C3D3 C1D2 C2D1

Page 9: Rで実験計画法 後編

直交表として整理する A B C D

1 1 1 1 1

2 1 2 2 3

3 1 3 3 2

4 2 1 2 2

5 2 2 3 1

6 2 3 1 3

7 3 1 3 3

8 3 2 1 2

9 3 3 2 1

9

B1 B2 B3

A1 C1D1 C2D3 C3D2

A2 C2D2 C3D1 C1D3

A3 C3D3 C1D2 C2D1

1つのセルが直交表の1行に対応する

3^4=81回の実験が9回に減る

Page 10: Rで実験計画法 後編

直交表の重要な性質

• 2列の水準の組合せがすべて同数出現する

10

1 2 3 4 5 6 7

1 1 1 1 1 1 1 1

2 1 1 1 2 2 2 2

3 1 2 2 1 1 2 2

4 1 2 2 2 2 1 1

5 2 1 2 1 2 1 2

6 2 1 2 2 1 2 1

7 2 2 1 1 2 2 1

8 2 2 1 2 1 1 2

1 2 3 4

1 1 1 1 1

2 1 2 2 3

3 1 3 3 2

4 2 1 2 2

5 2 2 3 1

6 2 3 1 3

7 3 1 3 3

8 3 2 1 2

9 3 3 2 1

Page 11: Rで実験計画法 後編

なぜ直交表というのか?

•因子による水準の影響は平均0になると考える

• 2水準の因子は+aと-aの影響を与える

11

1 2

+a(1) +b(1)

+a(1) +b(1)

+a(1) -b(2)

+a(1) -b(2)

-a(2) +b(1)

-a(2) +b(1)

-a(2) -b(2)

-a(2) -b(2)

直交表は直交性を維持したまま、

できるだけ列を詰め込んだ表である

•表の任意の2列を取ってきて内積をとると0

•水準の組合せが同数あるため

•この状態を「直交性がある」という

Page 12: Rで実験計画法 後編

直交表による実験方法

12

Page 13: Rで実験計画法 後編

直交表を用いた実験計画の問題

• 2水準をもつ4つの因子(A~D)を設定し、製品の強度実験を行いたい。必要な直交表は?

•因子は原材料の割合(3%と5%)、作業員熟練度(3

年目と10年目)など

•直交表のサイズ(実験回数)を見積もる

•水準が最も多い2因子の水準数の積

• Σ(各因子の水準数 - 1) + 1 (自由度に注目)

•上記の見積もりの結果はそれぞれ4、5となる

• 5回以上実験する直交表で、2水準の4因子を組み込めるのは

13

Page 14: Rで実験計画法 後編

直交表を用いた実験例

•因子を割り付けて実験を行った結果は次の通り

• Aに原材料の割合、Bに熟練度…と割り当てる

•問題:有意な因子はA、B、C、Dのどれか?

14

A 2 B 4 C 6 D データ

1 1 1 1 1 1 1 1 40

2 1 1 1 2 2 2 2 46

3 1 2 2 1 1 2 2 28

4 1 2 2 2 2 1 1 18

5 2 1 2 1 2 1 2 32

6 2 1 2 2 1 2 1 26

7 2 2 1 1 2 2 1 32

8 2 2 1 2 1 1 2 58

Page 15: Rで実験計画法 後編

データの分解(1)

•基本は二元配置などと同じ

•データを平均、因子の効果、誤差に分解する

•平均

• m = (40+46+28+18+32+26+32+58)/8 = 35

•因子Aの効果

• a1 = (40+46+28+18)/4 - m = -2

• a2 = (32+26+32+58)/4 - m = 2

•他の因子も同様にして計算する

• b1 = 9, b2=-9, c1=3, c2=-3, d1=-6, d2=6

15

Page 16: Rで実験計画法 後編

データの分解(2)

•ベクトル形式で分解式を表現する

16

40

46

28

18

32

26

32

58

35

35

35

35

35

35

35

35

-2

-2

-2

-2

2

2

2

2

9

9

-9

-9

-9

-9

9

9

3

-3

3

-3

-3

3

-3

3

-6

6

6

-6

6

-6

-6

6

1

1

-5

3

1

1

-5

3

+ + + + + =

データ 平均m 因子A 因子B 因子C 因子D 誤差項

Page 17: Rで実験計画法 後編

データの分解(3)

•全変動(全データの2乗和)

•平均変動

•主効果(因子の効果)

•残差変動

17

合計10912

SSに一致

Page 18: Rで実験計画法 後編

データの分解(4)

•全変動は平均変動+因子の効果+残差変動

•利用していない列の主効果の合計は残差変動

18

2 4 6 データ

1 1 1 40

1 2 2 46

2 1 2 28

2 2 1 18

1 1 1 32

1 2 2 26

2 1 2 32

2 2 1 58

2 4 6

水準1の平均 36 33 37

水準2の平均 34 37 33

全体平均35

つまり72

Page 19: Rで実験計画法 後編

全変動の分解公式の導出

• x,yを直交するデータとすると、次式が成立

•直交表に割り付けられた列は互いに直交

•平均ベクトルと直交表に割り付けられた列も直交

19

上の性質を拡張して、互いに直交するベクトル(x1~xn)について次式が成り立つ

左辺のデータの二乗和

(全変動)

データの各要素の二乗和

(平均変動+主効果+残差変動)

全要素が同じ値

Page 20: Rで実験計画法 後編

Rによる分析

A <- paste("A",c(1,1,1,1,2,2,2,2),sep="")

B <- paste("B",c(1,1,2,2,2,2,1,1),sep="")

C <- paste("C",c(1,2,1,2,2,1,2,1),sep="")

D <- paste("D",c(1,2,2,1,2,1,1,2),sep="")

V <- c(40,46,28,18,32,26,32,58)

data <- data.frame(A=A,B=B,C=C,D=D,V=V)

result <- summary(aov(V~A+B+C+D,data=data))

20

BとDが有意な因子と判断できる

二元配置分散分析と同様にできる!

Page 21: Rで実験計画法 後編

カテゴリごとの平均の違い

21

B、Dは平均を結ぶ

直線の傾きが大きい!

Page 22: Rで実験計画法 後編

列の割当について

•先程は適当に1、3、5、7列を割り当てたが、仮にA、B、C、Dを1、2、3、4列目に割り当てると?

• A=1、B=1の行はC=1のみになる

→AとBの排他的論理和がC列に

(AとBが同じ値のときCは1、2とならない)

22

A B C D

1 1 1 1

1 1 1 2

1 2 2 1

1 2 2 2

2 1 2 1

2 1 2 2

2 2 1 1

2 2 1 2

これは1列目と2列目の交互作用は3列目に

出ていることを示しており、交互作用を考慮する際は列の割当に注意が必要である

では、どうやって交互作用列を見つけるか?

Page 23: Rで実験計画法 後編

交互作用列の見つけ方

•交互作用一覧表

• 4列目と2列目の交互作用は6列目に出る

•線点図

• 点は主効果

• 点と点の間が交互作用

• 2列目と4列目の交互作用が6列目

23

列 1 2 3 4 5 6 7

(1) 3 2 5 4 7 6

(2) 1 6 7 4 5

(3) 7 6 5 4

(4) 1 2 3

(5) 3 2

(6) 1

•直交表とセットで与えられる以下の図表を利用する

1

3

6

4

2

7

5

Page 24: Rで実験計画法 後編

交互作用がある場合の列の割当

•因子A、B、C、Dと交互作用A×B、B×Cの列を割当

24

1

3 6

4

2

7

5 A

B

C D

A×B B×C

A B A

×B

D C 6 B

×C

データ

1 1 1 1 1 1 1 1 40

2 1 1 1 2 2 2 2 46

3 1 2 2 1 1 2 2 28

4 1 2 2 2 2 1 1 18

5 2 1 2 1 2 1 2 32

6 2 1 2 2 1 2 1 26

7 2 2 1 1 2 2 1 32

8 2 2 1 2 1 1 2 58

点の位置に主効果、

線の位置に交互作用

を配置する

Page 25: Rで実験計画法 後編

交互作用を考慮した結果

•仮にAとB、BとCに交互作用があるとして、同様の実験を行うと、有意な因子はない(分析失敗)

• F値が小さい(2以下)ものはプーリングして対処

• A、A:B、B:Cをプーリングの対象とする

25

Page 26: Rで実験計画法 後編

直交表のソフトウェアテストへの適用

26

Page 27: Rで実験計画法 後編

直交表とソフトウェアテスト

•直交表の目的

•少ない実験で組み合わせを網羅する

•ソフトウェアテストの目的

•最小限のコストで実装された機能を網羅して

バグを可能な限り見つける

どちらも少ない試行回数で網羅しようとしている

→ソフトウェアテストと直交表はよく似ている!

27

Page 28: Rで実験計画法 後編

直交表がテストに利用できる根拠

•事例研究による

•比較的小規模な開発であれば、2因子網羅で90%

以上のバグを検出できる

• 詳しくは参考資料の論文を参照

• 1因子ずつの場合のバグの発見率がpなら(直交表を利用して2因子の組合せの評価をすれば)それに比較してほぼp^2に期待される(田口玄一)

• p^3のバグはほとんど0とみなしても差し支えない

28

Page 29: Rで実験計画法 後編

直交表の応用例

•例題

次のようなGUIをテストする手法を考えよう

29

男性 女性

ユーザ登録画面

性別

ユーザ名

登録する

生年月日 2012 04 28

DM配信 希望する

http://foo.bar.com/register.cgi

テキストボックス

ラジオボタン

コンボボックス

チェックボックス

Page 30: Rで実験計画法 後編

テストにおける出力の分類

•異常系

•入力に対しエラーを出すべきもの

• 例:年齢が-1歳、2月30日生まれ

登録ユーザ名に@`:|¥’)など

•正常系

•入力に対しエラーを吐かずに終了するもの

30

直交表で扱うのは正常系のみ

Page 31: Rで実験計画法 後編

直交表で利用する入力について

•正常系のみとする理由

•エラーを出す入力を直交表で扱うと、異常系のテストケースばかりになる

• 例えば、2水準のうち1つの水準でエラーメッセージが出る因子を3つ用意し、直交表を利用してテストケースを作成すると、87.5%は異常系になるため、正常系のテストがほとんどできなくなる

•バグがある場合、あるエラーが別のエラーを隠すといったことが起きてしまう

• 複数のエラーのうち、先にチェックした方だけが現れるため、後半のチェックに関するテストができない

31

Page 32: Rで実験計画法 後編

異常系のテスト

•ドメイン分析テスト(右下の表に従いテストする)

• 1つだけ境界値(on)、異常値(off)とし、

残りは正常値(in)とする

•境界値分析の多変数版

• バグの切り分けに使える

•例題におけるテスト例

• 2012/2/29、2012/2/30

•ユーザ名が空

32

変数 タイプ 1 2 3 4 5 6

a

on ○

off ○

in ○ ○ ○ ○

b

on ○

off ○

in ○ ○ ○ ○

c

on ○

off ○

in ○ ○ ○ ○

結果

Page 33: Rで実験計画法 後編

正常系テストにおける考え方(一例)

•チェックボックス

•チェックを入れる / 入れない (2通り)

•ラジオボタン

• 1つだけ選択する (2通り)

•テキストボックス

•受け付ける入力(3通り)

•コンボボックス

•代表値(2通り)

33

Page 34: Rで実験計画法 後編

2因子網羅のテストケースを生成する

•複雑な直交表の列を手で作る?

• 7水準など出てくると厄介

•ぎりぎりまで効率よく詰め込んだ表の作成は難しい

• 数学的な理論(有限数学という分野)があるらしいが…

•でもRユーザなら大丈夫!

• DoE.baseパッケージで直交表を自動生成できる

• 因子と水準名を与えるだけでよい

34

Design of Experimentの略

Page 35: Rで実験計画法 後編

Rによる生成例

library("DoE.base")

name <- c("sato","SUZUKI","takahasi")

gender <- c("male","female")

year <- c("1980","1965")

month <- c("3","12")

day <- c("5","28")

mail <- c("YES","NO")

oaTable <- oa.design(

factor.names=list(name=name,

gender=gender,year=year,

month=month,day=day,mail=mail),

seed=1

)

35

全部試すと96通り、直交表では24通り に減っている!

Page 36: Rで実験計画法 後編

参考資料

• よくわかる実験計画法(著:中村 義作)

• Rと分散分析(金明哲先生のWebページ)

• http://mjin.doshisha.ac.jp/R/12.html

• 直交表によるソフトウェアテスト 『HAYST法』の解説と学習

• http://www.geocities.jp/ka_hayst/hayst.pdf

• D.Richard Kuhn et al. : “Software Fault Interactions and

Implications for Software Testing”, IEEE TRANSACTIONS

ON SOFTWARE ENGINEERING, VOL. 30, NO. 6,pp.418-

421 (JUN. 2004).

36

Page 37: Rで実験計画法 後編

ご清聴ありがとうございました

37

Page 38: Rで実験計画法 後編

補足:21枚目のグラフを描画するコード A <- paste("A",c(1,1,1,1,2,2,2,2),sep="")

B <- paste("B",c(1,1,2,2,2,2,1,1),sep="")

C <- paste("C",c(1,2,1,2,2,1,2,1),sep="")

D <- paste("D",c(1,2,2,1,2,1,1,2),sep="")

V <- c(40,46,28,18,32,26,32,58)

data <- data.frame(A=A,B=B,C=C,D=D,V=V) # スライド中の強度実験データ

result <- summary(aov(V~A+B+C+D,data=data))

rng <- range(V) # 描画範囲を全部のグラフで設定しておく

f <- function(fac, val, rng){

res <- aggregate(val, by = list(fac) , FUN = mean )

p <- par(cex=1,mai=c(0.8,0.6,0.6,0.3))

plot(fac,val,ylim=rng,type="n")

par(p)

lines(res[,1],res[,2],col="red",lwd=5)

}

oldpar <- par(mfrow=c(2,2))

lapply(data[,1:4], f, data$V, rng)

par(oldpar)

38

Page 39: Rで実験計画法 後編

補足:因子の割り付け技法

•多水準化

•ある複数列とその交互作用の列をまとめる

•下の例では1~3列をまとめて4水準化している

39

1 2 3 4 5 6 7

1 1 1 1 1 1 1 1

2 1 1 1 2 2 2 2

3 1 2 2 1 1 2 2

4 1 2 2 2 2 1 1

5 2 1 2 1 2 1 2

6 2 1 2 2 1 2 1

7 2 2 1 1 2 2 1

8 2 2 1 2 1 1 2

1’ 4 5 6 7

1 1 1 1 1 1

2 1 2 2 2 2

3 2 1 1 2 2

4 2 2 2 1 1

5 3 1 2 1 2

6 3 2 1 2 1

7 4 1 2 2 1

8 4 2 1 1 2

Page 40: Rで実験計画法 後編

補足:2水準系直交表の作り方(1)

40

1 2

1 1

1 2

2 1

2 2

①大きさを2倍にする

1

1

1

2

2

1

1

2

②水準を均等に割り振った列をつける

1

1

1

2

2

Page 41: Rで実験計画法 後編

補足:2水準系直交表の作り方(2)

③排他的論理和の結果を追加する

41

1 2

1 1

1 2

2 1

2 2

1 2 3

1 1 1

1 2 2

2 1 2

2 2 1

①~③を繰り返しにより、全因子が2水準である

サイズが2^nとなる直交表が作成可能

の直交表