Ich versuche, mein Degradationsskript zu automatisieren, damit ich dasselbe Skript verwenden kann, um ein Degradationsmodell an verschiedene Daten anzupassen.
Ich habe es derzeit geschafft, das gewünschte Modell mit Fit Model an meine Daten anzupassen und habe die Parameter als Spaltenmatrix.
Ich habe dann versucht, die Matrix in die Anfangswerte für das Degradationsmodell einzugeben, aber es gibt nur das Modell mit allen Parametern unverändert aus. Gibt es eine Möglichkeit, eine Matrix als Parameterwerte, Anfangswerte im Skript unten, in das Degradationsskript einzugeben.
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 )
),
),<BR />//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);
Im Moment kann die Degradationsplattform keine benannte Variable einer Matrix wie gewünscht aufnehmen.
Eine Problemumgehung besteht darin, einen Ausdruck zu erstellen und dann auszuwerten.
Angenommen, Sie haben bereits eine Matrix
A_para = [....];
die Anfangswerte enthält.
Die Problemumgehung besteht darin, einen Ausdruck wie den folgenden zu erstellen
code = expr(Degradation(
Initial Values(
A_para
),
Fixed(
....
)
));
Tauschen Sie nun den Namen A_para durch die eigentliche Matrix aus, wie folgt:
substitute into(code, expr(A_para), A_para);
Führen Sie schließlich den Code aus, indem Sie:
eval(code);
Wenn Sie die eingegebenen Anfangswerte unverändert verwenden möchten, müssen Sie meiner Meinung nach der Fixed-Klausel eine Matrix von Einsen zuweisen.
Bitte lassen Sie mich wissen, wie es geht.