J'essaie d'automatiser mon script de dégradation afin de pouvoir utiliser le même script pour adapter un modèle de dégradation à différentes données.
J'ai actuellement réussi à ajuster le modèle que je veux à mes données en utilisant Fit Model et j'ai les paramètres sous forme de matrice de colonnes.
J'ai ensuite essayé d'entrer la matrice dans les valeurs initiales du modèle de dégradation, mais cela ne fait que sortir le modèle avec tous les paramètres inchangés. Existe-t-il un moyen de saisir une matrice en tant que valeurs de paramètres, valeurs initiales dans le script ci-dessous, dans le script de dégradation.
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);
Merci, cela a parfaitement fonctionné
Pour le moment, la plate-forme de dégradation ne peut pas prendre une variable nommée d'une matrice comme vous le souhaitez.
Une solution de contournement consiste à construire une expression, puis à l'évaluer.
Supposons que vous ayez déjà une matrice
A_para = [....];
qui contient les valeurs initiales.
La solution consiste à construire une expression comme celle-ci
code = expr(Degradation(
Initial Values(
A_para
),
Fixed(
....
)
));
Remplacez maintenant le nom A_para par la matrice réelle, comme ceci :
substitute into(code, expr(A_para), A_para);
Enfin, exécutez le code en :
eval(code);
Si vous souhaitez utiliser les valeurs initiales saisies telles quelles, je pense que vous devez affecter une matrice dans la clause Fixed.
S'il vous plaît laissez-moi savoir comment ça se passe.