您好 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() 消息发送到第一个数据表以附加新级别。