您好 JMP 社區,
我目前正在嘗試編寫一個腳本來打開一個現有數據表,該表包含一個“X1”列和一個包含 10 行的“Y1”列。 然後腳本在新列中預測 Y1,生成殘差列 (Predicted Y1 - Y1),然後生成預測殘差列。 從那裡開始,我希望腳本將一定數量的“虛構”X1/Y1 值添加到現有數據表中,以期使流程自動化。 以下代碼是我認為負責將數據點添加到數據表的代碼。 問題是下面的腳本沒有添加 X1 值的準確列表(X1 值只是 1-10 之間的每個整數,當我運行下面的代碼時,我通常只得到整數 1 和 10)。
d = DOE( Augment Design, X( :X1 ), Y( :Y1 )/*, {Make Design, Make Table}*/ );
d << Make Design;
dt3 = d << Make Table;
dt2 << concatenate( dt3, Append to first table( 1 ) );
如果有幫助的話,這是我的整個腳本:
// 1. Creates X1 column, and corresponding Y1
Close All( Data Tables, No Save );
sourceDT = Open( "SH2.jmp" );
dt2 = sourceDT << Subset( Columns(), Rows(), Output Table Name( "Fixed.jmp" ) );
// 2. Creates predicted Ystat column, saves formulas into same data table (first iteration)
PredictedY1 = dt2 << Neural(
Y( :Y1 ),
X( :X1 ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit( NTanH( 3 ) )
);
PredictedY1 << Save Profile Formulas;
// 3. Adds residual column
dt2 << New Column( "Residual 1", Formula( Abs( :PredictedY1 - :Y1 ) ) );
// 4. Creates and predicts residual column
PredictedResidual1 = dt2 << Neural(
Y( :Residual 1 ),
X( :X1 ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit( NTanH( 3 ) )
);
PredictedResidual1 << Save Profile Formulas;
// Iteration 2
d = DOE( Augment Design, X( :X1 ), Y( :Y1 )/*, {Make Design, Make Table}*/ );
d << Make Design;
dt3 = d << Make Table;
dt2 << concatenate( dt3, Append to first table( 1 ) );
PredictedY2 = dt2 << Neural(
Y( :Y1 ),
X( :X1 ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit( NTanH( 3 ) )
);
PredictedY2 << Save Profile Formulas;
// 3. Adds residual column
dt2 << New Column( "Residual 2", Formula( Abs( :PredictedY1 2 - :Y1 ) ) );
// 4. Creates and predicts residual column
PredictedResidual2 = dt2 << Neural(
Y( :Residual 2 ),
X( :X1 ),
Informative Missing( 0 ),
Validation Method( "Holdback", 0.3333 ),
Fit( NTanH( 3 ) )
);
PredictedResidual2 << Save Profile Formulas;
Column( dt2, "X1" ) << Suppress Formula Eval();
Column( dt2, "Y1" ) << Suppress Formula Eval();
dt2 << Select where( :Residual 1 <= 3 );
dt2 << delete rows;
謝謝,
凱爾
您仍然可以使用我建議的任一方法:創建第二個數據表並將其連接或直接向原始數據表添加行。
想法草圖:
dt2 = New Table( "Augmentation Runs",<BR />Add Rows( 10 ),<BR />New Column( "X1", Numeric, Continuous, Values( J( 10, 1, Random Uniform() ) )<BR />);<BR /><BR />dt << Concatenate( dt2 );
或者:
For( I = 1, I < 11, I++,
dt << Add Rows( { X1 = Random Uniform() } );
);
對於任何混淆,我深表歉意。 你是對的,我想使用我確定的級別創建第二個數據表並將它們連接到現有行。 問題在於第二個數據表創建的表的值明確為 1 或 10。 我希望第二個數據表的值隨機分佈在 1 到 10 之間(這是原始數據表的值範圍)。 增強設計可能不是最好的方法,但我對 JSL 很陌生,所以我不確定如何進行
謝謝
我不太確定你想要什麼。 我的解釋是您想將新行附加到前幾行。 Augment Design 會創建新的治療方法,Make Table 消息將輸出新的組合表。 它創建最適合指定模型和給定行的新行。
我認為您想使用您確定的級別創建第二個數據表並將它們連接到現有行。 或者,您可以迭代地將 << Add Rows() 消息發送到第一個數據表以附加新級別。