Ich versuche, mein Degradationsskript zu automatisieren, damit ich dasselbe Skript verwenden kann, um ein Degradationsmodell an verschiedene Daten anzupassen.
Mit „Modell anpassen“ ist es mir derzeit gelungen, das gewünschte Modell an meine Daten anzupassen, und ich habe die Parameter als Spaltenmatrix erhalten.
Ich habe dann versucht, die Matrix in die Anfangswerte für das Degredationsmodell einzugeben, aber das Modell wird einfach mit allen Parametern unverändert ausgegeben. Gibt es eine Möglichkeit, eine Matrix als Parameterwerte (Anfangswerte im Skript unten) in das Degradierungsskript 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);
Vielen Dank, das hat perfekt funktioniert
Derzeit kann die Degradationsplattform eine benannte Variable einer Matrix nicht in der gewünschten Weise annehmen.
Eine Problemumgehung besteht darin, einen Ausdruck zu erstellen und ihn dann auszuwerten.
Angenommen, Sie haben bereits eine Matrix
A_para = [....];
welches Anfangswerte enthält.
Die Problemumgehung besteht darin, einen Ausdruck wie den folgenden zu erstellen
code = expr(Degradation(
Initial Values(
A_para
),
Fixed(
....
)
));
Ersetzen Sie nun den Namen A_para durch die tatsächliche Matrix, etwa so:
substitute into(code, expr(A_para), A_para);
Führen Sie abschließend den Code aus, indem Sie:
eval(code);
Wenn Sie die eingegebenen Anfangswerte so verwenden möchten, wie sie sind, müssen Sie meiner Meinung nach eine Einsenmatrix in die Fixed-Klausel zuweisen.
Bitte lassen Sie mich wissen, wie es weitergeht.