Maximum Likelihood Weibull Model (nlpse07)
/***************************************************************/
/* */
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: nlpse07 */
/* TITLE: Maximum Likelihood Weibull Model (nlpse07) */
/* PRODUCT: OR */
/* SYSTEM: ALL */
/* KEYS: OR */
/* PROCS: OPTMODEL */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: */
/* MISC: Example 7 from the Nonlinear Programming Solver */
/* chapter of Mathematical Programming. */
/* */
/***************************************************************/
data pike;
input days cens @@;
datalines;
143 0 164 0 188 0 188 0
190 0 192 0 206 0 209 0
213 0 216 0 220 0 227 0
230 0 234 0 246 0 265 0
304 0 216 1 244 1
;
proc optmodel;
set OBS;
num days {OBS};
num cens {OBS};
read data pike into OBS=[_N_] days cens;
var sig >= 1.0e-6 init 10;
var c >= 1.0e-6 init 10;
var theta >= 0 <= min {i in OBS: cens[i] = 0} days[i] init 10;
impvar fi {i in OBS} =
(if cens[i] = 0 then
log(c) - c * log(sig) + (c - 1) * log(days[i] - theta)
)
- ((days[i] - theta) / sig)^c;
max logf = sum {i in OBS} fi[i];
set VARS = 1.._NVAR_;
num mycov {i in VARS, j in 1..i};
solve with NLP / covest=(cov=2 covout=mycov);
print sig c theta;
print mycov;
create data covdata from [i j]={i in VARS, j in 1..i}
var_i=_VAR_[i].name var_j=_VAR_[j].name mycov;
num std_error {i in VARS} = sqrt(mycov[i,i]);
num t_stat {i in VARS} = _VAR_[i].sol / std_error[i];
num p_value {i in VARS} = 2 * (1 - cdf('T', t_stat[i], card(OBS)));
print _VAR_.name _VAR_ std_error t_stat p_value;
quit;