DOE、バランスの取れたカスタム設計こんにちはコミュニティ ,
私は2つの要因でバランスの取れたDOE計画を作成しようとしています.3レベルのAと31レベルのBです。 ファクト B を ~ 1.41 回複製する必要があります (ファクト B の 31 レベルがファコット A の各レベルでテストされ、そのうちの 13 レベルが因子 A の各レベルで 2 回テストされます)。
DOE プラットフォームに実験を設計してもらいたいのですが、因子 A の各水準で実行回数が同じである (因子 B も多かれ少なかれバランスがとれている)。 そこで、カスタムの実行数 132 (因子 A のレベルごとに 44 実行) を求めます。 しかし、残念なことに、私はバランスのとれたものを持つことができません: 因子 A の各レベルに対して 43 /44 /45 の実行があります. 明確ではないかもしれませんが、コードが役立つことを願っています。
lstA = {"L1","L2" , "L3"};
lstB= {"V1_0", "V1_1", "V1_2", "V1_3", "V1_4", "V1_5", "V1_6", "V1_7", "V1_8", "V1_9",
"V1_10", "V1_11", "V1_12", "V1_13", "V1_14", "V1_15", "V1_16", "V1_17", "V1_18",
"V1_19", "V1_20", "V1_21", "V1_22", "V1_23", "V1_24", "V1_25", "V1_26", "V1_27",
"V1_28", "V1_29", "V1_30"};
eval(parse("DOE1 =
DOE(
Custom Design,
{ Add Factor( Categorical, "||char(lstA )||", \!"A\!", 0 ),
Add Factor( Categorical,"|| char(lstB)||", \!"B\!", 0 ),
//Set Random Seed( seed1 ),
Set Sample Size( "||char( 132)||" )}
);"));
DOE1<< Make Design;
DT_DOE= DOE1<< Make Table();
DOE1<<CLOSE window=""></CLOSE>ファクター A のレベルが高い場合、これは完全にスムーズに実行されます。3 レベルは少し低いと思いますが、それでも何とかできるようです。 私が忘れたオプションがあるかもしれません。
どんな助けでも大歓迎です!
事前にどうもありがとう
(JMP 14.1.0 64ビットで動作)
DOEスクリプティングRe: DOE、バランスの取れたカスタム設計こんにちは@johanna_younous 、
私には、不均衡な設計は、最適化基準に従って設計を作成するときに JMP が行う最適化によって引き起こされているように見えます。
開始回数を 1 に制限すると、A のレベルごとに正確に 44 回の実行が得られます。
見る:スタート数 (jmp.com)
最適化を行った設計と、最適化を行わない設計を比較できます。 あなたの場合、一見しただけでは実際の違いはないようです(電力分析など)。
他のメンバーや JMP スタッフからも、より良い回答があるかもしれません。
Names Default To Here( 1 );
doe_obj = DOE(
Custom Design,
{Add Response( Maximize, "Y", ., ., . ), Add Factor( Categorical, {"L1", "L2", "L3"}, "X1", 0 ), Add Factor(
Categorical,
{"V1_0", "V1_1", "V1_2", "V1_3", "V1_4", "V1_5", "V1_6", "V1_7", "V1_8", "V1_9", "V1_10", "V1_11", "V1_12", "V1_13", "V1_14", "V1_15",
"V1_16", "V1_17", "V1_18", "V1_19", "V1_20", "V1_21", "V1_22", "V1_23", "V1_24", "V1_25", "V1_26", "V1_27", "V1_28", "V1_29", "V1_30"},
"X2",
0
), Set Random Seed( 1348397327 )
, Number of Starts( 1 /* 1000 */ )
, Add Term( {1, 0} ), Add Term( {1, 1} ), Add Term( {2, 1} ), Add Alias Term( {1, 1}, {2, 1} ), Set Sample Size( 132 ), Simulate Responses( 0 ),
Save X Matrix( 0 ), Make Design}
);
doe_dt = doe_obj << make table();
doe_obj << close window();
doe_dt << Summary( Group( :X1 ), Freq( "None" ), Weight( "None" ) );Re: DOE、バランスの取れたカスタム設計ゲオルグさん、こんにちは。
この答えはたくさんあります。
残念ながら、私はこのソリューションをテストしましたが、開始数を「1」に固定するだけでは、レベル A で常に 44 という結果を得るには十分ではありません。 実際、シード数が変化すると変化する可能性があります。
これまでのところ、このバランスが得られるまで、レベル B の 1 つに対してレベル A をループするループによって「手動で」問題を修正しましたが、これは後で行われ、最良の解決策でも、最もエレガントでもなく、統計的にも最良の解決策ではない可能性があります。DOEモジュールで直接それができたらいいのにと思います。
Re: DOE、バランスの取れたカスタム設計クラシカルなデザインの特徴は「バランス」。バランスが優れた統計的特性をもたらすと主張することはできますが、主な動機はおそらく、コンピューターにアクセスする数日前に分析を実行できることでした (例: Yates アルゴリズム)。カスタム計画はバランスを強制するものではなく、実際、わずかな不均衡が統計的パフォーマンスを向上させる可能性があります (これについては、Jones & Goos による「Optimal Design of Experiments: A Case Study Approach」で説明されていると思います。あなたが本当に興味を持っているなら、手動で設計のバランスを取り、結果として統計的パフォーマンスが低下することを示したいくつかの例を掘り下げることができるでしょう.
Re: DOE、バランスの取れたカスタム設計こんにちは@johanna_younous 、「常にではない」とは、お客様の要件を満たす JMP のソリューションがあることを意味します。 では、設計のバランスがとれるまで、JMP に試してみませんか。
以下のスクリプトのループを参照してください。 要因を手動で変更するよりも優れています。 これを数百回試したところ、半分以上の試行でデザインのバランスがとれていることがわかりました。 したがって、以下のループには常に解決策があるはずです。
Names Default To Here( 1 );
dt_sum = New Table( "DOE designs",
New Column( "Balanced", "Character", formula( If( :L1 == L2 == L3, "y", "n" ) ) ),
New Column( "L1", "Continuous" ),
New Column( "L2", "Continuous" ),
New Column( "L3", "Continuous" )
);
done = 0;
For( i = 1, (i <= 100) & !done, i++,
doe_obj = DOE(
Custom Design,
{Add Response( Maximize, "Y", ., ., . ), Add Factor( Categorical, {"L1", "L2", "L3"}, "X1", 0 ), Add Factor(
Categorical,
{"V1_0", "V1_1", "V1_2", "V1_3", "V1_4", "V1_5", "V1_6", "V1_7", "V1_8", "V1_9", "V1_10", "V1_11", "V1_12", "V1_13", "V1_14", "V1_15",
"V1_16", "V1_17", "V1_18", "V1_19", "V1_20", "V1_21", "V1_22", "V1_23", "V1_24", "V1_25", "V1_26", "V1_27", "V1_28", "V1_29", "V1_30"},
"X2",
0
), Number of Starts( 1 ), Add Term( {1, 0} ), Add Term( {1, 1} ), Add Term( {2, 1} ), Add Alias Term( {1, 1}, {2, 1} ),
Set Sample Size( 132 ), Simulate Responses( 0 ), Save X Matrix( 0 ), Make Design}
);
doe_dt = doe_obj << make table();
doe_obj << close window();
Summarize( doe_dt, by_grp = by( :X1 ), by_cnt = Count() );
dt_sum << add row( 1 );
dt_sum:L1[N Rows( dt_sum )] = by_cnt[1];
dt_sum:L2[N Rows( dt_sum )] = by_cnt[2];
dt_sum:L3[N Rows( dt_sum )] = by_cnt[3];
// finish, when design is balanced, otherwise continue with new try
If( by_cnt[1] == by_cnt[2] == by_cnt[3],
done = 1,
Close( doe_dt, NoSave )
);
);
dt_sum << Distribution( Nominal Distribution( Column( :Balanced ) ) );Re: DOE、バランスの取れたカスタム設計それは良い点です !
古典的な「if」ではなく「while」ループを使用する場合がありますが、あなたのソリューションthxが気に入っています!
Re: DOE、バランスの取れたカスタム設計解決策が見つからない DOE 定義が存在する可能性があるため、無限ループにならないように for ループを選択しました。 そして、エンドポイントがあります。
Re: DOE、バランスの取れたカスタム設計私はこのスレッドに少し遅れていますが、興味深い解決策がいくつかあります。 ただし、Optimality Criterion を Alias Optimal に変更するだけでしょうか。 その最適化基準は、通常、可能な限り物事のバランスを取ります。 これが私がそのアプローチをとったときのスクリプトで、うまくいったようです。
DOE(
Custom Design,
{Add Response( Maximize, "Y", ., ., . ),
Add Factor( Categorical, {"L1", "L2", "L3"}, "A", 0 ),
Add Factor(
Categorical,
{"V1_0", "V1_1", "V1_2", "V1_3", "V1_4", "V1_5", "V1_6", "V1_7", "V1_8",
"V1_9", "V1_10", "V1_11", "V1_12", "V1_13", "V1_14", "V1_15", "V1_16",
"V1_17", "V1_18", "V1_19", "V1_20", "V1_21", "V1_22", "V1_23", "V1_24",
"V1_25", "V1_26", "V1_27", "V1_28", "V1_29", "V1_30"},
"B",
0
), Set Random Seed( 1127601240 ), Number of Starts( 3796 ), Add Term( {1, 0} ),
Add Term( {1, 1} ), Add Term( {2, 1} ), Add Term( {1, 1}, {2, 1} ),
Set Sample Size( 132 ), Optimality Criterion( Make Alias Optimal Design ),
Simulate Responses( 0 ), Save X Matrix( 0 ), Make Design}
)Re: DOE、バランスの取れたカスタム設計こんにちはデイビッド
バランスを求める私の要求が統計的に最良ではないかもしれないことは理解していますが、それは回避できない技術的な制約です
さらに、パフォーマンスをチェックしました(最適性/パワー...)そしてそれは本当に近いようです。 また、お読みいただきありがとうございます。