Subscribe Bookmark RSS Feed

JSL Script - Grab Prediction Formula Result

ngodfrey

Community Trekker

Joined:

Nov 20, 2015

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

Joined:

Jun 23, 2011

Solution

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;
8 REPLIES
ian_jmp

Staff

Joined:

Jun 23, 2011

Solution

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

Community Trekker

Joined:

Nov 20, 2015

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

ian_jmp

Staff

Joined:

Jun 23, 2011

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

Community Trekker

Joined:

Apr 19, 2016

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

Joined:

Jun 23, 2011

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

Community Trekker

Joined:

Apr 19, 2016

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

Joined:

Jun 23, 2011

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

Community Trekker

Joined:

Apr 19, 2016

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