cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • JMP Security Notice: CVE-2026-109618 and CVE-2026-109619

    JMP promptly initiated a review of its products, services, and relevant infrastructure for exposure to CVE-2026-109618 and CVE-2026-109619.

    Our assessment of JMP products has not identified exposure to these vulnerabilities. Where remediation was required within supporting environments, appropriate security updates and controls have been applied and validated.

    We have identified no evidence of successful exploitation or unauthorized access to JMP systems or customer information associated with these vulnerabilities.

    JMP continues to monitor the issue and relevant vendor guidance. No action is required by JMP customers at this time.

  • Don’t miss your chance to experience Discovery Summit Europe at our best available rate! Early bird registration through 31 Oct.
  • Graph Builder Toolbar streamlines interactive graphing. Creates shortcuts on Report and GraphBuilder Helpers toolbars. Download and install the extension.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
LGaspard_98
Level II

Fit Spline for multiple columns and saving predicted values

Hi all, 

 

I have a lot of different columns from an FTIR spectra experiment, and in order to correct the baseline, I need to perform a Fit Spline on each column (one column = one spectra). I would like to do this automatically using JSL, so I don't have to save hundreds of "Predicted values" by hand. 

I tried to create a code but somehow it doesn't want to save the values or put 0 in each columns. 

 

Could anyone help for that?

 

Below is my code:

dt = Current Data Table();

// Define the columns for the fit (assuming multiple Y columns and one X column)
x_col = Column("Wavenumber"); // Replace with the name of your X column

y_cols = {};
For(i = 1, i <= N Col(dt), i++, 
	col_name = Column(i) << Get Name;
    // Check if the column name contains "Absorbance at t="
	If(Contains(col_name, "Absorbance at t="), 
		Insert Into(y_cols, col_name);  // Add to the list
	);
);

// Create a list to store fit reports
fit_reports = {};

// Perform Fit Y by X for each Y column separately and display the fit
For(i = 1, i <= N Items(y_cols), i++, 
	y_col = y_cols[i];
	fit_report = dt << Fit Y by X(
		Y(Column(y_col)), 
		X(x_col), 
		Fit Spline(1000) // Adjust the lambda (smoothing parameter) as needed
	);
	Insert Into(fit_reports, fit_report);
);

Show(
	"All fits have been displayed. Please review them and adjust the lambda value in the script if needed."
);

// Wait for user to review fits
Wait(0);

// Use a Yes/No dialog to prompt the user to continue or stop
result = New Window("Save Predicted Values?", 
	Text Box("Are you satisfied with the fits? Click Yes to save predicted values, No to stop."), 
	Button Box("Yes", 
        // Save predicted values as columns in the dataset
		For(i = 1, i <= N Items(y_cols), i++, 
			y_col = y_cols[i];
			fit_report = fit_reports[i];
			predicted_col_name = "Spline Predictor for " || y_col;
			dt << New Column(predicted_col_name, Numeric);
			Column(predicted_col_name) << Set Values(fit_report["Prediction Formula"]);
		);
		Show("Predicted values saved successfully.");
	), 
	Button Box("No", 
		Show("Predicted values were not saved.");
	)
);

// Close all fit reports
For(i = 1, i <= N Items(fit_reports), i++, 
	Close(fit_reports[i], No Save);
);
 

Close(result); // Close the dialog window

Edit 2024-09-24 jthi: added jsl formatting

1 ACCEPTED SOLUTION

Accepted Solutions
jthi
Super User

Re: Fit Spline for multiple columns and saving predicted values

This might give some ideas

Names Default To Here(1);

dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");

xcol = "NPN1";
ycols = {"PNP1", "NPN2"};

fits = {};
For Each({ycol}, ycols,
	Insert Into(fits,
		dt << Fit Y by X(
			Y(Eval(ycol)),
			X(Eval(xcol)),
			Fit Spline(1000)	
		);
	);
);

close_expr = Expr(
	For Each({fit}, fits,
		fit << close window;
	);
	nw << Close Window;
);

nw = New Window("Save Predicted Values?", 
	Text Box("Are you satisfied with the fits? Click Yes to save predicted values, No to stop."), 
	Button Box("Yes", 
		For Each({fit}, fits,
			fit << (Curve["Smoothing Spline Fit, lambda=1000"] << Save Predicteds);
		);
		wait(0);
		close_expr;
		Show("Predicted values saved successfully.");
	), 
	Button Box("No", 
		Show("Predicted values were not saved.");
		close_expr;
	)
);

I would also collect all the Fit Y by X to single window so it is easier to check them instead of opening multiple separate windows

-Jarmo

View solution in original post

2 REPLIES 2
jthi
Super User

Re: Fit Spline for multiple columns and saving predicted values

This might give some ideas

Names Default To Here(1);

dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");

xcol = "NPN1";
ycols = {"PNP1", "NPN2"};

fits = {};
For Each({ycol}, ycols,
	Insert Into(fits,
		dt << Fit Y by X(
			Y(Eval(ycol)),
			X(Eval(xcol)),
			Fit Spline(1000)	
		);
	);
);

close_expr = Expr(
	For Each({fit}, fits,
		fit << close window;
	);
	nw << Close Window;
);

nw = New Window("Save Predicted Values?", 
	Text Box("Are you satisfied with the fits? Click Yes to save predicted values, No to stop."), 
	Button Box("Yes", 
		For Each({fit}, fits,
			fit << (Curve["Smoothing Spline Fit, lambda=1000"] << Save Predicteds);
		);
		wait(0);
		close_expr;
		Show("Predicted values saved successfully.");
	), 
	Button Box("No", 
		Show("Predicted values were not saved.");
		close_expr;
	)
);

I would also collect all the Fit Y by X to single window so it is easier to check them instead of opening multiple separate windows

-Jarmo
LGaspard_98
Level II

Re: Fit Spline for multiple columns and saving predicted values

It worked amazingly, thank you so much! I've been struggling with ChatGPT to find a solution for hours :D

 

Recommended Articles