@ahmedmohamed
I agree with Jim. I am not sure if the JMP nonlinear platform can perform ridge analysis. It is easy to put bounds on the parameter estimates, but I am not familiar with the Loss formula. I do know that JSL is easier for most of the SAS data steps.
The JSL below shows some of the first steps for input and executing a simple linear and simple non-linear fit.
//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 nlmixed