Sto cercando di automatizzare il mio script di degradazione in modo da poter utilizzare lo stesso script per adattare un modello di degradazione a dati diversi.
Attualmente sono riuscito ad adattare il modello che desidero ai miei dati utilizzando Fit Model e ho ottenuto i parametri come matrice di colonne.
Ho quindi provato a inserire la matrice nei valori iniziali per il modello di degradazione ma emette semplicemente il modello con tutti i parametri invariati. C'è un modo per inserire una matrice come valori di parametro, valori iniziali nello script seguente, nello script di degradazione.
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);
Grazie, ha funzionato perfettamente
Al momento, la piattaforma di degradazione non può accettare una variabile denominata di una matrice come desideri.
Una soluzione alternativa consiste nel costruire un'espressione, quindi valutarla.
Supponiamo di avere già una matrice
A_para = [....];
che contiene i valori iniziali.
La soluzione alternativa consiste nel costruire un'espressione come la seguente
code = expr(Degradation(
Initial Values(
A_para
),
Fixed(
....
)
));
Ora sostituisci il nome A_para con la matrice effettiva, in questo modo:
substitute into(code, expr(A_para), A_para);
Infine, esegui il codice da:
eval(code);
Se si desidera utilizzare i valori iniziali di immissione così com'è, credo che sia necessario assegnare una matrice di uno nella clausola Fixed.
Per favore fammi sapere come va.