@Ahmed Mohamed
Ich stimme Jim zu.Ich bin mir nicht sicher, ob die nichtlineare JMP-Plattform eine Kammanalyse durchführen kann. Es ist einfach, den Parameterschätzungen Grenzen zu setzen, aber ich bin mit der Verlustformel nicht vertraut. Ich weiß, dass JSL für die meisten SAS-Datenschritte einfacher ist.
Die folgende JSL zeigt einige der ersten Schritte für die Eingabe und Ausführung einer einfachen linearen und einer einfachen nichtlinearen Anpassung.
//conversion
Names Default to Here(1);
dt_cs = Open("$Downloads/elisa_cs.csv");
dt_cs << select where(! (:plate=="A" & :series==1));
dt_cs << delete Rows(); //only keep A 1
dt_calib = Data Table( "elisa_cs" ) << Stack(
columns( :rep1, :rep2, :rep3 ),
Source Label Column( "Label" ),
Stacked Data Column( "signal" ),
Output Table Name("calib")
);
dt_calib << New Column("w", numeric, continuous, << Set each value(1/:signal^1.3));
report1 = dt_calib << Fit Model(
Weight( :w ),
Y( :signal ),
Effects( :concentration ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run
);
report1 << Save Columns( {"Prediction Formula"}); //predictions are saved to the data table
lin_est = report1 << get estimates; //vector
show(lin_est);
gb = dt_calib << Graph Builder(
Size( 522, 456 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables(
X( :concentration ),
Y( :signal ),
Y( :Pred Formula signal, Position( 1 ), Side( "Right" ) )
),
Elements( Points( X, Y( 1 ), Legend( 6 ) ), Line( X, Y( 2 ), Legend( 11 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
OutlineBox,
{Set Title( "Fit of the Linear Model" ), Image Export Display( Normal )}
),
Dispatch(
{},
"concentration",
ScaleBox,
{Scale( "Log" ), Format( "Best", 6 ), Min( 1 ), Max( 1000 ), Inc( 1 ),
Minor Ticks( 0 )}
),
Dispatch(
{},
"signal",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 0 ), Max( 4 ), Inc( 1 ),
Minor Ticks( 1 ), Label Row(
{Show Major Grid( 1 ), Show Minor Grid( 1 )}
)}
),
Dispatch(
{},
"Pred Formula signal",
ScaleBox,
{Format( "Fixed Dec", 12, 0 ), Min( 0 ), Max( 4 ), Inc( 1 ),
Minor Ticks( 1 )}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
11,
Properties(
0,
{Line Color( 19 ), Line Width( 3 )},
Item ID( "Mean(Pred Formula signal)", 1 )
)
)}
)
)
);
//Note since this is a simple weighted regression the analysis and plot can be created with Bivariate
//here the predicteds are saved, not the formula
report1_biv = dt_calib << Bivariate(
Y( :signal ),
X( :concentration ),
Weight( :w ),
Fit Line( {Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} ), Save Predicteds} ),
SendToReport(
Dispatch(
{},
"1",
ScaleBox,
{Scale( "Log" ), Min( 1 ), Max( 1000 ), Inc( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{},
"2",
ScaleBox,
{Min( 0 ), Max( 4 ), Inc( 1 ), Minor Ticks( 1 ),
Label Row( {Show Major Grid( 1 ), Show Minor Grid( 1 )} )}
),
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Grid Line Order( 2 ), Reference Line Order( 3 )}
)
)
);
//=========================================================================================
//NonLinear fit
nlmod = dt_calib << New Column( "NonLin Model",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Parameter(
{top = 3, bottom = 0.2, c50 = 250, slope = 1},
top + (bottom - top) / (1 + (:concentration / c50) ^ slope)
)
)
);
report2_nlin = dt_calib << Nonlinear(
Y( :signal ),
X( :NonLin Model ),
Weight( :w ),
Newton,
Finish,
SendToReport(
Dispatch(
{"Plot"},
"1",
ScaleBox,
{Scale( "Log" ), Format( "Best", 6 ), Min( 1 ), Max( 1000 ), Inc( 1 ),
Minor Ticks( 0 )}
),
Dispatch(
{"Plot"},
"2",
ScaleBox,
{Min( 0 ), Max( 4 ), Inc( 1 ), Minor Ticks( 1 ),
Label Row( {Show Major Grid( 1 ), Show Minor Grid( 1 )} )}
)
)
);
report2 _nlin << Confidence Limits;
report2 _nlin << Save Estimates; //updates the column nlmod
nlin_est = report2_nlin << get estimates; //vector
show(nlin_est);
//==== up to proc nlmixedIhre Anfrage ist eine nicht triviale Anfrage.Es würde viele Arbeitsstunden für eine Person mit Erfahrung in SAS, JMP und Statistik erfordern, um die Aufgabe zu erfüllen.Ich schlage vor, dass Sie sich mit einem Vertragshaus in Verbindung setzen, um es für die Konvertierung zu bezahlen.
Ich nehme an, Sie müssen den Code konvertieren, weil Sie keinen Zugriff auf SAS haben und/oder Sie nicht mit SAS vertraut sind.
Wenn das Problem darin besteht, keinen Zugriff auf SAS zu haben, kann man auf die SAS University Edition zugreifen und mit geringfügigen Änderungen das Programm erfolgreich ausführen.