cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
JMP is taking Discovery online, April 16 and 18. Register today and join us for interactive sessions featuring popular presentation topics, networking, and discussions with the experts.
Choose Language Hide Translation Bar
ngodfrey
Level II

JSL Script - Grab Prediction Formula Result

Hello,

 

I am trying to obtain the predicted value after setting the X's in a prediction formula.

For example, if Y = X1 + X2, I want to create a new row, set X1 = 2 and X2 = 4 and grab the predicted value of Y = 6.

 

I thought the easiest way to do this would be to save the prediction formula into a new set of columns.

I would then add a new row and set all the X's.

Then, simply access the row value of the prediction formula.


However, this does not work. The log shows that the value returns a '.'. If I run the script twice, so multiple rows are created, the value returns correctly. If I add two rows and run the script only once, I still get the 'null' or '.' in the log file. There appears to be a reason for JMP needing to run the script twice to obtain the predicted formula result of a newly added row with set X values.

 

Is there a better way to grab predicted values from prediction formulas using scripts?

 

Thank you,
Nate

1 ACCEPTED SOLUTION

Accepted Solutions
ian_jmp
Staff

Re: JSL Script - Grab Prediction Formula Result

Details depend on the platform you use, but this shows the basic idea:

NamesDefaultToHere(1);
// Get some data
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(X(:height), Y(:weight));
// Do a regression
biv << fitLine;
/// Save the prediction formula column
biv << (curve[1] << savePredicteds);
// Add a new observation (row) that we want to predict for
Wait(2);
dt << addRows(1);
// Give predictor values and get the prediction back
Column(dt, "weight")[NRow(dt)] = 160;
Column(dt, "height")[NRow(dt)] = 65;

View solution in original post

8 REPLIES 8
ian_jmp
Staff

Re: JSL Script - Grab Prediction Formula Result

Details depend on the platform you use, but this shows the basic idea:

NamesDefaultToHere(1);
// Get some data
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(X(:height), Y(:weight));
// Do a regression
biv << fitLine;
/// Save the prediction formula column
biv << (curve[1] << savePredicteds);
// Add a new observation (row) that we want to predict for
Wait(2);
dt << addRows(1);
// Give predictor values and get the prediction back
Column(dt, "weight")[NRow(dt)] = 160;
Column(dt, "height")[NRow(dt)] = 65;
ngodfrey
Level II

Re: JSL Script - Grab Prediction Formula Result

Ah perfect! I just need to put in the Wait(). Thank you!

ian_jmp
Staff

Re: JSL Script - Grab Prediction Formula Result

Sorry, No - I may have confused the issue. The 'Wait()' was just for cosmetic effect. Generally, you should never need this in JSL (but there are a few, very rare situations where you might). Probably best to send the data table a 'Run Formulas' message.

peter_michel
Level III

Re: JSL Script - Grab Prediction Formula Result

Hello Ian,

 

I'm searching the community for saving the  "Save Y Predicted Values" from the PLS in a JSL. Is there a document available saying in which Tool I adress which colum saving (e.g. prediction formulas, Confidence intervals, Predicted Values).

 

Thanks Peter  

ian_jmp
Staff

Re: JSL Script - Grab Prediction Formula Result

Hi Peter, This should help to get you started. The 'Wait()' commands are for cosmetic effect and can be removed.

NamesDefaultToHere(1);
// Get some data
dt = Open( "$SAMPLE_DATA/Baltic.jmp" );
// Launch the PLS platform
plsLaunch = dt << Fit Model(
							Y( :ls, :ha, :dt ),
							Effects(
								:v1,
								:v2,
								:v3,
								:v4,
								:v5,
								:v6,
								:v7,
								:v8,
								:v9,
								:v10,
								:v11,
								:v12,
								:v13,
								:v14,
								:v15,
								:v16,
								:v17,
								:v18,
								:v19,
								:v20,
								:v21,
								:v22,
								:v23,
								:v24,
								:v25,
								:v26,
								:v27
							),
							No Intercept( 1 ),
							Center Polynomials( 0 ),
							Personality( "Partial Least Squares" )
						);
// Do a couple of fits
Wait(2);
plsFits = plsLaunch << Run(
							Fit( Method( NIPALS ), Number of Factors( 7 ) ),
							Fit( Method( NIPALS ), Number of Factors( 6 ) )
							);
// Save the prediction formula for the first fit (7 factors)
Wait(2);
plsFits << (Fit[1] << savePredictionFormula);
// Save the prediction formula for the second fit (6 factors)
Wait(2);
plsFits << (Fit[2] << savePredictionFormula);
// Now save the Y residuals
Wait(2);
plsFits << (Fit[1] << saveYresiduals);
plsFits << (Fit[2] << saveYresiduals);
peter_michel
Level III

Re: JSL Script - Grab Prediction Formula Result

thanks Ian

 Sorry, my scripting knowledge is too restricted, your help is not accelerating me, can you please get me some more support.

First I work with JMP not with PRO. I assume that is the reason that my JMP automated PLS script looks different to yours. I attached my script.

 

Plenty of questions appear reading your script.

Why do you separte between PLSLAUNCH and PLSFITS. Is that necessary or just for your comfort in reading/documenting?

Is it necessary to assign PLSFITS the fits if I just have one "fits" eg. just 7 Factors  (plsFits << (Fit[1] << savePredictionFormula);

 

plsFits << (Fit[1] << saveYresiduals); I assume that means: Save the residual of Fit[1] to the object PLSFITS (and this name can be chosen by me, it is just PLSFITS for better identification)  

 

If I run your script I get this error in the logwindow:       plsFits << (Fit[/*###*/1] << savePredictionFormula); Is that because of PRO Terminology? 

Many thanks

Peter

 

 

ian_jmp
Staff

Re: JSL Script - Grab Prediction Formula Result

I was forgetting about the fact that there is additional PLS functionality in JMP Pro that is not in the regular version. For JMP it will be similar, but a little simpler:

NamesDefaultToHere(1);
// Get some data
dt = Open( "$SAMPLE_DATA/Baltic.jmp" );
// Do a PLS fit in JMP (also works in JMP Pro)
pls = dt << Partial Least Squares(
				Y( :ls, :ha, :dt ),
				X(
					:v1,
					:v2,
					:v3,
					:v4,
					:v5,
					:v6,
					:v7,
					:v8,
					:v9,
					:v10,
					:v11,
					:v12,
					:v13,
					:v14,
					:v15,
					:v16,
					:v17,
					:v18,
					:v19,
					:v20,
					:v21,
					:v22,
					:v23,
					:v24,
					:v25,
					:v26,
					:v27
				),
				Validation Method( Name( "Leave-One-Out" ), Initial Number of Factors( 15 ) ),
				Fit(
					Method( NIPALS ),
					Number of Factors( 7 ),
					Show Confidence Band( 1 ),
					Distance Plots( 1 ),
					Scatter Scores Plots( 1 ),
					Diagnostics Plots( 1 ),
					Overlay Loadings Plots( 1 ),
					T Square Plot( 1 ),
					Overlay Coefficients Plots( 1 )
				)
			);
// See what messages the PLS platform understands (look in the Log Window)
ClearLog();
ShowProperties(pls);
// Save some results from the (7 factor) fit
pls << (Fit[1] << savePredictionFormula);
pls << (Fit[1] << saveYresiduals);

To understand why the code works, I would start with 'Help > Books > Scripting Guide' to learn the rudiments of JSL.

peter_michel
Level III

Re: JSL Script - Grab Prediction Formula Result

Great. It runs now and doing as expected. Many thanks.