cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Choose Language Hide Translation Bar
trevorphysics
Level II

Need to display and pull x-intercept from a linear fit

I am taking a certain range of data points around the straight part of my curve, and attempting to extract an x-intercept out of it using a linear fit. I can display an equation for the line but can't seem to do much with it.

 

At the very least, I want to grab that equation, solve for x when y = 0 and then display that number below the graph.

 

What would be the best way to go about pulling this information out?

 

In an ideal scenario, I could display the entire data range, but only fit the range of data points that I have currently shown as well.

 

 

Thanks you for your help.

 

 

What it ideally should look like:

Turn-onVoltage.png

My Plot with the data filter:

x-intercept.png

The code:

Graph Builder(
	Size( 618, 525 ),
	Show Control Panel( 0 ),
	Show Legend( 0 ),
	Variables( X( :V1 ), Y( :I1 ), Page( :Sweep Name ), Overlay( :Test Count ) ),
	Elements(
		Line Of Fit( X, Y, Legend( 18 ), Confidence of Fit( 0 ) ),
		Points( X, Y, Legend( 19 ) )
	),
	Local Data Filter(
		Add Filter(
			columns( :I1, :Test Count ),
			Where( :I1 >= 0.003 & :I1 <= 0.008 ),
			Where( :Test Count == "1" ),
			Display( :Test Count, N Items( 15 ), Find( Set Text( "" ) ) )
		)
	),
	SendToReport(
		Dispatch(
			{},
			"I1",
			ScaleBox( 2 ),
			{Min( 0 ), Max( 0.008 ), Inc( 0.001 ), Minor Ticks( 1 )}
		),
		Dispatch( {}, "graph title", TextEditBox, {Set Text( "On Voltage" )} )
	)
);  

 

2 ACCEPTED SOLUTIONS

Accepted Solutions

Re: Need to display and pull x-intercept from a linear fit

Since you are using a filter and then fitting a line to that small subset, use Fit Model to fit the line. That way you have the Inverse Prediction option from the red popup menu under Estimates > Inverse Prediction. Put your Y as 0 and JMP will find your X and even provide a 95% confidence interval for the X.

Dan Obermiller

View solution in original post

Georg
Level VII

Re: Need to display and pull x-intercept from a linear fit

Performing the great idea of @Dan_Obermiller this may look as follows:

Names Default To Here( 1 );

// generate data
dt = New Table( "Characteristic curve",
	add rows( 21 ),
	New Column( "V", set values( Matrix( -10 :: 10 ) / 10 ) ),
	New Column( "I", set each value( If( Exp( :V ) < 1.5, 0, Exp( :V ) - 1.5 ) ) )
);
dt << show window( 0 );

// create a dashboard to display all windows
nw = New Window( "Dashboard Inverse Prediction",
	H List Box( vlb_left = V List Box(), vlb_right = V List Box() ),
	<<on close(
		Close( dt, NoSave );
		Close( result_dt, NoSave );
	)
);

// fit model with inverse prediction and place into dashboard 
vlb_right << append(
	fm_obj = dt << Fit Model(
		Y( :I ),
		Effects( :V ),
		Personality( "Standard Least Squares" ),
		Emphasis( "Effect Leverage" ),
		Run(
			:I << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ), Lack of Fit( 0 ), Scaled Estimates( 0 ),
			Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ), Plot Effect Leverage( 1 ),
			Plot Residual by Normal Quantiles( 0 ), Box Cox Y Transformation( 0 ), Inverse Prediction( Response( 0 ), Term Value( V( . ) ) )}
		),
		Local Data Filter( Conditional, Close Outline( 1 ), Add Filter( columns( :I ), Where( :I >= 0.2 ) ) )
	)
);

// get report and make into data table
tb_lst = Report( fm_obj ) << xpath( "//TableBox" );
result_dt = tb_lst[N Items( tb_lst )] << make data table;
result_dt << show window( 0 );

// and fill into dashboard
vlb_left << append( outline box("Inverse Prediction", dg1 = result_dt << new data box()) );
dg1 << close side panels( 1 );
dg1 << set height( 30 );

// place GraphBuilder into dashboard
vlb_left << append(// visualize
	dt << Graph Builder(
		show control panel( 0 ),
		Variables( X( :V ), Y( :I ) ),
		Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
	)
);
vlb_left << append( dg2 = dt << new data box() );
dg2 << close side panels( 1 );





Georg

View solution in original post

2 REPLIES 2

Re: Need to display and pull x-intercept from a linear fit

Since you are using a filter and then fitting a line to that small subset, use Fit Model to fit the line. That way you have the Inverse Prediction option from the red popup menu under Estimates > Inverse Prediction. Put your Y as 0 and JMP will find your X and even provide a 95% confidence interval for the X.

Dan Obermiller
Georg
Level VII

Re: Need to display and pull x-intercept from a linear fit

Performing the great idea of @Dan_Obermiller this may look as follows:

Names Default To Here( 1 );

// generate data
dt = New Table( "Characteristic curve",
	add rows( 21 ),
	New Column( "V", set values( Matrix( -10 :: 10 ) / 10 ) ),
	New Column( "I", set each value( If( Exp( :V ) < 1.5, 0, Exp( :V ) - 1.5 ) ) )
);
dt << show window( 0 );

// create a dashboard to display all windows
nw = New Window( "Dashboard Inverse Prediction",
	H List Box( vlb_left = V List Box(), vlb_right = V List Box() ),
	<<on close(
		Close( dt, NoSave );
		Close( result_dt, NoSave );
	)
);

// fit model with inverse prediction and place into dashboard 
vlb_right << append(
	fm_obj = dt << Fit Model(
		Y( :I ),
		Effects( :V ),
		Personality( "Standard Least Squares" ),
		Emphasis( "Effect Leverage" ),
		Run(
			:I << {Summary of Fit( 1 ), Analysis of Variance( 1 ), Parameter Estimates( 1 ), Lack of Fit( 0 ), Scaled Estimates( 0 ),
			Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ), Plot Studentized Residuals( 0 ), Plot Effect Leverage( 1 ),
			Plot Residual by Normal Quantiles( 0 ), Box Cox Y Transformation( 0 ), Inverse Prediction( Response( 0 ), Term Value( V( . ) ) )}
		),
		Local Data Filter( Conditional, Close Outline( 1 ), Add Filter( columns( :I ), Where( :I >= 0.2 ) ) )
	)
);

// get report and make into data table
tb_lst = Report( fm_obj ) << xpath( "//TableBox" );
result_dt = tb_lst[N Items( tb_lst )] << make data table;
result_dt << show window( 0 );

// and fill into dashboard
vlb_left << append( outline box("Inverse Prediction", dg1 = result_dt << new data box()) );
dg1 << close side panels( 1 );
dg1 << set height( 30 );

// place GraphBuilder into dashboard
vlb_left << append(// visualize
	dt << Graph Builder(
		show control panel( 0 ),
		Variables( X( :V ), Y( :I ) ),
		Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
	)
);
vlb_left << append( dg2 = dt << new data box() );
dg2 << close side panels( 1 );





Georg