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
Chris_Ng
Level III

Process Variable Drift or Creep Detection

Hi,

Is there any methods available in JMP to detect the drift/creep/gradient for a large set of process variables over a set period of time. The user would then set the threshold on what they would consider the gradient to be too high or too low and needs to be flagged.

Currently I am aware that the process screening tool has a Drift Summaries Option that can be enabled which shows the mean Upshift, Downshift and Absolute Shift. In this case, I am looking for the Overall Drift (whether positive or negative), however Absolute shift (from what I see) is calculated as [Abs(Upshift) + Abs(Downshift)]. This does not tell me whether overall it has drifted up or down. Technically, I'm looking for Abs(Upshift + Downshift [negative value]).

My current workaround is to write a screen that converts the process screening result into a data table and redoing the calculation. However, this means that the calculated values are disjointed from the Processing Screening platform which has a bunch of useful features such as Quick Graph/Quick Control Charts etc. Also, it doesn't work well with Local Data Filter.

Would really appreciate if anyone else has any ideas how I can approach this. Thanks!
1 ACCEPTED SOLUTION

Accepted Solutions
ih
Super User (Alumni) ih
Super User (Alumni)

Re: Process Variable Drift or Creep Detection

I am still working with JMP Support to figure out why the table sorting is applied to values read from the table but not those written to the table.  For now here is a crude work around:

 

names default to here(1);
dt = Open("$Sample_Data/iris.jmp");
 
//Open Process Screening with drift summaries
ps = dt << Process Screening(
       Y( :Sepal length, :Sepal width, :Petal length, :Petal width ),
       Control Chart Type( "Indiv and MR" ),
       Drift Summaries( 1 )
);
 
//Add a dummy column and use set values to reset the table order
ncb = (ps << XPath( "//TableBox" )) << Append( newCol = NumberColBox("Delete Me", {}));
newCol << Set Values({});
newCol << Delete Box;

//calculate the combined drift
UpDrift = (ps << XPath( "//NumberColBox[NumberColBoxHeader[text()='Mean Up Drift']]" ))[1] << Get;
DownDrift = (ps << XPath( "//NumberColBox[NumberColBoxHeader[text()='Mean Down Drift']]" ))[1] << Get;
CombinedDrift = Abs( Matrix(UpDrift) + Matrix(DownDrift) );
ncb = (ps << XPath( "//TableBox" )) << Append( newCol = NumberColBox("Combined Drift", CombinedDrift));

View solution in original post

9 REPLIES 9
ih
Super User (Alumni) ih
Super User (Alumni)

Re: Process Variable Drift or Creep Detection

You could add a column to the Process Screening table:

 

names default to here(1);
dt = Open("$Sample_Data/iris.jmp");

//Open Process Screening with drift summaries
ps = dt << Process Screening(
	Y( :Sepal length, :Sepal width, :Petal length, :Petal width ),
	Control Chart Type( "Indiv and MR" ),
	Drift Summaries( 1 )
);

//calculate the combined drift
UpDrift = (ps << XPath( "//NumberColBox[NumberColBoxHeader[text()='Mean Up Drift']]" ))[1] << Get;
DownDrift = (ps << XPath( "//NumberColBox[NumberColBoxHeader[text()='Mean Down Drift']]" ))[1] << Get;
CombinedDrift = Abs( Matrix(UpDrift) + Matrix(DownDrift) );

//Add column to table with Combined Drift
ncb = (ps << XPath( "//TableBox" )) << Append( NumberColBox("Combined Drift", CombinedDrift) );

You should see a new 'Combined Drift' column on the right:

ih_0-1598639298553.png

 

Chris_Ng
Level III

Re: Process Variable Drift or Creep Detection

Hi!

Thank you so much for getting back to me on this. I think this is almost a complete solution but it seems that the calculated values that we’re appending to the original process screening table box do not really match to the appropriate parameters/column. Wondering if there’s a way we can append the column name to the matrix that is generated in this script so that it can be matched when we append the values.

Also, wondering if it’s possible for us to make the column permanent. When we apply a local data filter and it does a recalc, the column disappears. Though a quick workaround probably just be running the data filter on the data table and rerunning this script.
ih
Super User (Alumni) ih
Super User (Alumni)

Re: Process Variable Drift or Creep Detection

I'm not sure what you mean about the calculated values not matching.  Can you give an example of the discrepency?

 

I agree with your work-around in your second paragraph, recalculating after an update from a data filter might be the easiest path forward.

 

 

Chris_Ng
Level III

Re: Process Variable Drift or Creep Detection

Hi there,

In terms of the discrepancy, we’ll take your screenshot for an example, looking at the values in the combined drift column, you’ll notice that when we added up the mean updrift and mean downdrift, the values don’t match. I think the math is done correctly between the two matrixes but when the values are appended back, there may be a misalignment with the order of the column parameters in the original process screening table.

Hoping this clarifies it.
ih
Super User (Alumni) ih
Super User (Alumni)

Re: Process Variable Drift or Creep Detection

You're right and I apologize for not catching the incorrect order earlier.  I've used this method several times and haven't run into that issue yet (I just went back and re-checked a few scripts of my own).  For some reason pulling data out of the table seems to use the sorted order of the table, but when writing data the rows go back in a different order.  I will work to resolve that.

 

ih
Super User (Alumni) ih
Super User (Alumni)

Re: Process Variable Drift or Creep Detection

I am still working with JMP Support to figure out why the table sorting is applied to values read from the table but not those written to the table.  For now here is a crude work around:

 

names default to here(1);
dt = Open("$Sample_Data/iris.jmp");
 
//Open Process Screening with drift summaries
ps = dt << Process Screening(
       Y( :Sepal length, :Sepal width, :Petal length, :Petal width ),
       Control Chart Type( "Indiv and MR" ),
       Drift Summaries( 1 )
);
 
//Add a dummy column and use set values to reset the table order
ncb = (ps << XPath( "//TableBox" )) << Append( newCol = NumberColBox("Delete Me", {}));
newCol << Set Values({});
newCol << Delete Box;

//calculate the combined drift
UpDrift = (ps << XPath( "//NumberColBox[NumberColBoxHeader[text()='Mean Up Drift']]" ))[1] << Get;
DownDrift = (ps << XPath( "//NumberColBox[NumberColBoxHeader[text()='Mean Down Drift']]" ))[1] << Get;
CombinedDrift = Abs( Matrix(UpDrift) + Matrix(DownDrift) );
ncb = (ps << XPath( "//TableBox" )) << Append( newCol = NumberColBox("Combined Drift", CombinedDrift));
Hafizul_H
Level I

Re: Process Variable Drift or Creep Detection

Hi,

 

When going through this post, I was wondering if a solution has been found to address the order of the appended column (Combined Drift)?

Thank you. 

ih
Super User (Alumni) ih
Super User (Alumni)

Re: Process Variable Drift or Creep Detection

I just confirmed with JMP Support that they have not solved the root issue yet, but as far as I know the work around in the accepted solution does solve the problem.

Re: Process Variable Drift or Creep Detection

For the issue regarding the sort order of the appended column, i can confirm that this issue will be addressed in the next major release of JMP, which will be available in Fall of 2022. The accepted solution is a good workaround for now.