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

Automating Degradation analysis

I am trying to automate my degradation script so that I can use the same script to fit a degradation model to different data.

I currently have managed to fit the model I want to my data using Fit Model and have got the parameters as a column matrix.

I then tried to Input the matrix into the Initial Values for the Degredation Model but it just outputs the model with all the parameters unchanged. Is there any way I can input a matrix as parameter values, Initial values in the script below, into the degredation script.

 

 

Degradation(
	Y( :"Output/mV"n ),
	Time( :Time in hours ),
	Label( :Unit ID ),
	Application( Repeated Measures Degradation ),
	Connect Data Markers( 1 ),
	Show Fitted Lines( 1 ),
	Show Spec Limits( 1 ),
	Show Median Curves( 0 ),
	Show Legend( 0 ),
	No Tab List( 0 ),
	Set Upper Spec Limit( . ),
	Set Lower Spec Limit( . ),
	Set Censoring Time( . ),
	Show Residual Plot( 1 ),
	Show Inverse Prediction Plot( 1 ),
	Inverse Prediction Interval( No Interval ),
	Inverse Prediction Alpha( 0.05 ),
	Path Specifications(
		Nonlinear Path(
			Add Formula(
				Formula Name( "Model" ),
				Formula(
					Parameter(
						{a = 200, b = -0.00007},
						a[Unit ID] * Exp( b[Unit ID] * Time in hours )
					),
				),
//Trying to enter my matrix of parameters into the model Initial Values(A_para), Fitting Method( QuasiNewton BFGS ), ), Select Formula( "Model" ) ), Run Model( "Model" ) ), Nonlinear Path( 1 ), Mean Path( 1 ), SendToReport( Dispatch( {"Overlay", "Output/mV Residuals by Time in hours"}, "7", ScaleBox, {Min( -80 ), Max( 210 ), Inc( 50 ), Minor Ticks( 4 )} ), Dispatch( {"Overlay", "Output/mV Residuals by Time in hours"}, "13", ScaleBox, {Min( -80 ), Max( 210 ), Inc( 50 ), Minor Ticks( 4 )} ), Dispatch( {"Overlay", "Model Specification"}, "Empty", TextEditBox, {Fixed Size( 1, 100, 19 ), Set Text( "Model" )} ), ) );
obj = Fit Curve(
			Y( :"Output/mV"n ),
			X( :Time in hours ),
			Group( :Unit ID ),
			);
			
//Currently this is using a slighlty different fitting method to the one used by the degredation platform

obj << Fit Exponential 2P;

//Next I want to create the table of parameter estimates

dt_p = obj << (Fit[1] << Make Parameter Table);

//Now create a single column matrix of the parameter estimates

col_scale = Column( dt_p, "Scale" );
col_growth = Column( dt_p, "Growth Rate" );
A_scale = col_scale << Get As Matrix;
A_growth = col_growth << Get As Matrix;
A_para = A_scale |/ A_growth;
//Put values into a column to check I've done it right
dt_temp = Data Table( "Stacked and Transposed New Dates Raw Data" );
col_p = dt_temp << New Column( "Parameters" );
col_p << Set Values(A_para);

 

1 ACCEPTED SOLUTION

Accepted Solutions
peng_liu
Staff

Re: Automating Degradation analysis

At the moment, the degradation platform cannot take a named variable of a matrix like the way that you want.

A workaround is to construct an expression, then evaluate.

Suppose you already have an matrix

A_para = [....];

which holds initial values.

The workaround is to construct an expression like the following

code = expr(Degradation(
				Initial Values(
					A_para
				),
				Fixed(
					....
				)
));

Now swap out the name A_para by the actual matrix, like this:

substitute into(code, expr(A_para), A_para);

Finally, run the code by:

eval(code);

If you want to use the inputting initial values as is, I believe you need to assign an matrix of one's into the Fixed clause.

Please let me know how it goes.

View solution in original post

2 REPLIES 2
peng_liu
Staff

Re: Automating Degradation analysis

At the moment, the degradation platform cannot take a named variable of a matrix like the way that you want.

A workaround is to construct an expression, then evaluate.

Suppose you already have an matrix

A_para = [....];

which holds initial values.

The workaround is to construct an expression like the following

code = expr(Degradation(
				Initial Values(
					A_para
				),
				Fixed(
					....
				)
));

Now swap out the name A_para by the actual matrix, like this:

substitute into(code, expr(A_para), A_para);

Finally, run the code by:

eval(code);

If you want to use the inputting initial values as is, I believe you need to assign an matrix of one's into the Fixed clause.

Please let me know how it goes.

Jemster
Level III

Re: Automating Degradation analysis

Thank you, this worked perfectly