How to implement PSA (Steepest ascent search) analysis in JMP DOE mode?
I'm not completely sure, but I think you are talking about a sequential approach to experimentation in which (by exploiting the results from a first design) you augment that design by picking new points along the line of steepest ascent. I think that there are many who would suggest that there are better ways to augment a design, though 'better' will depend on your particular situation.
In spite of this, if you want to use the approach this script might get you started. Do 'File > New > New Script', copy the JSL, then 'Edit > Run Script':
// ian.cox@jmp.com: 18Sep2010 // Quick demo of design augmentation by steepest ascent // Make some random data from a main effects model with no interaction dt1 = New Table("Original Design", Add Rows( 10 ), New Column( "x1", Numeric, Continuous, Formula( Random Uniform(-1, 1) ) ), New Column( "x2", Numeric, Continuous, Formula( Random Uniform(-1, 1) ) ), New Column( "y", Numeric, Continuous, Formula( (2 * :x1 + 3 * :x2) + 0.1 * Random Normal() ) ) ); // Fit the model fmd = dt1 << Fit Model( Y( :y ), Effects( :x1, :x2 ), Personality( Standard Least Squares ), Emphasis( Effect Leverage ), Invisible ); fmo = fmd << Run; // Get what we need fmr = fmo << Report; pn = fmo << GetParameterNames; pe = fmo << GetEstimates; ps = fmo << GetStdErrors; Print(pn, pe, ps); // Close the (invisible) report fmr << CloseWindow; // Take x1 to be the base factor X2OverX1 = pe[3]/pe[2]; // Specify number of steps to take and x1 step size for each n = 6; delX1 = 0.3; // Get points on the path of steepest ascent into a new 'design' table x1pts = J(n, 1, .); x2pts = J(n, 1, .); for (p=1, p<=n, p++, x1pts[p] = delX1 * p; x2pts[p] = x1pts[p] * X2OverX1; ); dt2 = AsTable(x1pts||x2pts); dt2 << SetName("Path of Steepest Ascent from Fit of "||(dt1 << GetName)); x1Col = Column(dt2, "Col1") << SetName("x1"); x2Col = Column(dt2, "Col2") << SetName("x2"); // Concatenate the two design tables dt1 << NewColumn("Design", Numeric, Ordinal, Values(J(Nrow(dt1), 1, 1))); dt2 << NewColumn("Design", Numeric, Ordinal, Values(J(Nrow(dt2), 1, 2))); dt3 = dt1 << Concatenate(dt2, Output Table( "Augmented Design" )); // Use graph builder to show the final result dt3 = Graph Builder( Show Control Panel( 0 ), Variables( X( :x1 ), Y( :x2 ), Color( :Design ) ), Elements( Points( X, Y, Color, Legend( 1 ) ) ), SendToReport( Dispatch( {}, "400", ScaleBox, {Legend Model( 1, Properties( 1, {Line Color( 67 )} ) )} ), Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 4 )} ) ) );
Hi my frend,
thanks very very much for your help.