Main Content

D 最適計画

D 最適計画の紹介

従来の実験計画 (完全実施要因計画一部実施要因計画、および 応答曲面計画) は、対象領域における因子への制約が比較的少ない、実験的設定の線形モデルの較正に適しています。しかし、モデルが必ず非線形である場合もあります。他のケースでは、ある処理 (因子水準の組み合わせ) は、測定に費用がかかったり、実行できないことがあります。"D 最適計画" は、従来の計画のこれらの制約に対処するモデルに固有の計画です。

D 最適計画は、反復探索アルゴリズムによって生成され、指定したモデルに対するパラメーター推定の共分散を最小化しようとします。これは、行列式 D = |XTX| を最大にすることと等価です。ここで、X は、計画空間 (行) における特定の処理において値を求めた、モデル項の計画行列 (列) です。従来の計画とは異なり、D 最適計画は、直交計画行列を必要としません。その結果、パラメーター推定は相関がある可能性があります。また、パラメーター推定は大域的でなく局所的に D 最適である可能性があります。

D 最適計画を作成するための Statistics and Machine Learning Toolbox™ 関数はいくつかあります。

関数説明
candexch

指定したモデルと候補セットに対して、指定した回数の実行で、行交換アルゴリズムを使用して、D 最適計画を作成します。これは、rowexch によって使用されるアルゴリズムの 2 番目の成分です。

candgen

指定したモデルに対する候補セットを作成します。これは、rowexch によって使用されるアルゴリズムの最初の成分です。

cordexch

座標交換アルゴリズムを使用して、指定したモデルに対して指定した回数の実行で D 最適計画を作成します。

daugment

座標交換アルゴリズムを使用して、追加のモデル項を推定するための追加の実行で既存の D 最適計画を拡張します。

dcovary

座標交換アルゴリズムを使用して、固定共変量因子がある D 最適計画を作成します。

rowexch

座標交換アルゴリズムを使用して、指定したモデルに対して指定した回数の実行により D 最適計画を作成します。このアルゴリズムは、candgen の次に、candexch を呼び出します (候補セットを指定するために、別々に candexch を呼び出ます)。

次の節では、これらの関数を使用して D 最適計画を作成する方法を説明します。

メモ

関数 rsmdemo は、ユーザーまたは cordexch によって生成された D 最適計画によって指定された実験の設定に対して、シミュレートされたデータを作成します。これは、rstool インターフェイスを使用して、データへの応答曲面モデル近似を表示します。さらに、これは、nlintool インターフェイスを使用して、データへの非線形モデル近似を表示します。

D 最適計画の作成

D 最適計画を作成するための Statistics and Machine Learning Toolbox アルゴリズムには、次の 2 種類があります。

  • 座標交換アルゴリズムを使用する関数 cordexch

  • 行交換アルゴリズムを使用する関数 rowexch

cordexchrowexch は、反復探索アルゴリズムを使用します。これらは、各ステップで D = |XTX| を増加させるように、初期計画行列 X を増加するように変更して操作します。これら両方のアルゴリズムには、初期の計画の選択と、漸進的変化の選択に組み込まれるランダム性があります。結果として、両方のアルゴリズムは、大域的にではなく局所的に D 最適計画を返すことがあります。各アルゴリズムを複数回実行し、最終的な計画に対する最適な結果を選択します。両方の関数は、この反復と比較を自動化する 'tries' パラメーターをもちます。

各ステップにおいて、行交換アルゴリズムは、X の行全体を、実行可能な処理の "候補セット" において評価された計画行列 C の行と交換します。関数 rowexch は、関数 candgen と関数 candexch を順に呼び出すことによって 2 ステップで動作し、指定したモデルに適切な C を自動的に作成します。candexch を直接呼び出すことによって、ユーザー独自の C を提供します。いずれの場合も、計画行列 C が大きければ、そのメモリにおいて静的に存在することが、計算に影響を及ぼすことがあります。

一方、座標交換アルゴリズムは、候補セットを使用しません (というよりは、計画空間全体が候補セットです)。各ステップにおいて、座標交換アルゴリズムは、計画空間の隣接した点で評価した X の 1 つの要素を新しい要素と交換します。候補セットがないので、メモリへの要求は少なくなりますが、探索のスケールがより小さくなることによって、座標交換アルゴリズムが、行交換アルゴリズムよりも、局所的最小値に陥る傾向があります。

たとえば、以下の 3 因子、7 項の交互作用モデルにおいて、パラメーターを推定する計画を得たいとします。

y=β0+β1x+1β2x+2β3x+3β12xx1+2β13xx1+3β23xx2+3ε

cordexch を使用して、実行回数が 7 回の D 最適計画を作成します。

nfactors = 3;
nruns = 7;
[dCE,X] = cordexch(nfactors,nruns,'interaction','tries',10)
dCE =
    -1     1     1
    -1    -1    -1
     1     1     1
    -1     1    -1
     1    -1     1
     1    -1    -1
    -1    -1     1
X =
     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

計画行列 X の列は、計画 dCE の各行で評価されたモデル項です。これらの項は、左から右への順で現れます。

  1. 定数項

  2. 線形項 (1、2、3)

  3. 交互作用項 (12、13、23)

dCE の計画点において測定された応答データに対する線形回帰モデル近似で X を使用します。

rowexch を同様に使って、等価な計画を作成します。

[dRE,X] = rowexch(nfactors,nruns,'interaction','tries',10)
dRE =
    -1    -1     1
     1    -1     1
     1    -1    -1
     1     1     1
    -1    -1    -1
    -1     1    -1
    -1     1     1
X =
     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

D 最適計画の拡張

実際は、プロセスについての知識を深めるために、完了した実験に実行を追加し、追加のモデル係数を評価することがあります。関数 daugment は、座標交換アルゴリズムを使用して、既存の D 最適計画を拡張します。

たとえば、以下の 8 回の実行の計画は、4 因子モデルの主効果の推定に適切です。

dCEmain = cordexch(4,8)
dCEmain =
     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

モデルの 6 つの交互作用項を推定するには、8 つの追加の実行で計画を拡張します。

dCEinteraction = daugment(dCEmain,8,'interaction')
dCEinteraction =
     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

拡張された計画は、最初の 8 行にもとの 8 回の実行をもつ完全要因です。

関数 candexch'start' パラメーターは、daugment と同じ機能を備えていますが、座標交換アルゴリズムではなく行交換アルゴリズムを使用します。

固定共変量因子の指定

多くの実験設定では、因子やその共変量によっては、決まった水準の集合や水準の組み合わせに制約されていることがあります。これらは、最適計画を探す場合、変更できません。関数 dcovary によって、座標交換アルゴリズムにおいて、固定共変量因子を指定できます。

たとえば、3 因子線形加法モデルのパラメーターを推定する計画を得たいとします。それには、さまざまな時間に、必然的に起こる 8 つの実行を使うとします。このプロセスに時間の線形傾向がある場合、モデルの変数として実行時間を含めたいことがあります。以下のように、計画を作成します。

time = linspace(-1,1,8)';
[dCV,X] = dcovary(3,time,'linear')
dCV =
   -1.0000    1.0000    1.0000   -1.0000
    1.0000   -1.0000   -1.0000   -0.7143
   -1.0000   -1.0000   -1.0000   -0.4286
    1.0000   -1.0000    1.0000   -0.1429
    1.0000    1.0000   -1.0000    0.1429
   -1.0000    1.0000   -1.0000    0.4286
    1.0000    1.0000    1.0000    0.7143
   -1.0000   -1.0000    1.0000    1.0000
X =
    1.0000   -1.0000    1.0000    1.0000   -1.0000
    1.0000    1.0000   -1.0000   -1.0000   -0.7143
    1.0000   -1.0000   -1.0000   -1.0000   -0.4286
    1.0000    1.0000   -1.0000    1.0000   -0.1429
    1.0000    1.0000    1.0000   -1.0000    0.1429
    1.0000   -1.0000    1.0000   -1.0000    0.4286
    1.0000    1.0000    1.0000    1.0000    0.7143
    1.0000   -1.0000   -1.0000    1.0000    1.0000

列ベクトル time は一定の要因で、±1 の間の値に正規化されます。一定の因子の行数は、計画の実行の数を指定します。結果の計画 dCV は、各時間において 3 つの制御されたモデルの因子に対する要因設定を与えます。

カテゴリカル因子の指定

カテゴリカル因子は、水準の離散集合に値を取ります。cordexchrowexch は、カテゴリカル因子のインデックスを指定できる 'categorical' パラメーターと、各因子の水準の数を指定できる 'levels' パラメーターをもちます。

たとえば、次の 8 回の実行計画は、最終の因子が 3 つの水準でカテゴリカルであるような、5 つの因子をもつ加法線形モデルに対するものです。

dCEcat = cordexch(5,8,'linear','categorical',5,'levels',3)
dCEcat =
    -1    -1     1     1     2
    -1    -1    -1    -1     3
     1     1     1     1     3
     1     1    -1    -1     2
     1    -1    -1     1     3
    -1     1    -1     1     1
    -1     1     1    -1     3
     1    -1     1    -1     1

候補セットの指定

行交換アルゴリズムは、初期計画行列 X の行を、実行可能な処理の候補セットにおいて評価された計画行列 C の行で交換します。関数 rowexch は、関数 candgen と関数 candexch を順に呼び出すことによって 2 ステップで動作し、指定したモデルに適切な C を自動的に作成します。candexch を直接呼び出すことによって、ユーザー独自の C を提供します。

たとえば、以下は、rowexch を使用して、内部で作成される候補セットを使って、2 因子 pure 2 次モデルに対する 5 回の実行の計画を作成します。

dRE1 = rowexch(2,5,'purequadratic','tries',10)
dRE1 =
    -1     1
     0     0
     1    -1
     1     0
     1     1

同じことは、candgencandexch を順に使用して行うことができます。

[dC,C] = candgen(2,'purequadratic') % Candidate set, C
dC =
    -1    -1
     0    -1
     1    -1
    -1     0
     0     0
     1     0
    -1     1
     0     1
     1     1
C =
     1    -1    -1     1     1
     1     0    -1     0     1
     1     1    -1     1     1
     1    -1     0     1     0
     1     0     0     0     0
     1     1     0     1     0
     1    -1     1     1     1
     1     0     1     0     1
     1     1     1     1     1
treatments = candexch(C,5,'tries',10) % D-opt subset
treatments =
     2
     1
     7
     3
     4
dRE2 = dC(treatments,:) % Display design
dRE2 =
     0    -1
    -1    -1
    -1     1
     1    -1
    -1     0

この例の C を、ユーザーの候補セットで求められた計画行列で置き換えることができます。たとえば、実験は 2 因子は同時に extreme settings をもつことができないように、制約があると仮定します。以下は、制約のある候補セットを作成します。

constraint = sum(abs(dC),2) < 2; % Feasible treatments
my_dC = dC(constraint,:)
my_dC =
     0    -1
    -1     0
     0     0
     1     0
     0     1

x2fx を使用して、候補セットを計画行列に変換します。

my_C = x2fx(my_dC,'purequadratic')
my_C =
     1     0    -1     0     1
     1    -1     0     1     0
     1     0     0     0     0
     1     1     0     1     0
     1     0     1     0     1

同様にして、必要となる計画を探します。

my_treatments = candexch(my_C,5,'tries',10) % D-opt subset
my_treatments =
     2
     4
     5
     1
     3
my_dRE = my_dC(my_treatments,:) % Display design
my_dRE =
    -1     0
     1     0
     0     1
     0    -1
     0     0