I am trying to run a proc nlmixed program, to fit a sigmoidal type curve (abscissa = time, ordinate = concentration) to data for many patients (subjects). I am initially applying the program to simulated data. The data at t=0 has a magnitude of 0 (minconc below), and rises to a magnitude of 100 (maxconc), with the midpt at t=18 data (but has noise added to it).It looks like (it is sorted by simnum and then by patient): simnum patient time igfbp ir ifgbp_shift ir_shift 1 1 0.000000 3.157332 4.392493 0.000000 2.000000 1 1 1.000000 3.323757 -10.545450 0.000000 2.000000 1 1 2.000000 -2.368074 -1.448547 0.000000 2.000000 1 1 3.000000 3.133494 -3.696192 0.000000 2.000000 ... The program (attached and below) is essentially fitting a simoid over time to the igfbp value for each patient: proc nlmixed data=simsig cov corr ecov ecorr method=firo tech=congra maxit=1000;
parms midpt = 18;
random maxconc minconc steep tshift ~ normal([100,0,6,2],[25,0,25,0,0,1,0,0,0,2]) subject=patient out=igfbp_random_effects;
if (time-tshift) <= 0 then do;
predconc = minconc;
end;
else do;
predconc = minconc + (maxconc-minconc)*((time-tshift)**steep)/((time-tshift)**steep + midpt**steep);
end;
model igfbp ~ normal(predconc,100);
by simnum;
predict predconc out=predicted_igfbp_concs;
run; The program seems to run. Then, for each patient I get out the instances of the random variables (ie, maxconc, minconc, steep, and tshift). So for the first patient (and first simulation) and random variables maxconc, minconc, steep, and tshift I get: "simnum" "patient" "Random Effect" "Empirical Bayes Estimate" "Standard Error of Prediction" "Degrees of Freedom" "t Value" "Pr > |t|" "Alpha" "Lower Confidence Limit" "Upper Confidence Limit" 1 1 maxconc 0.2452964704 2.0463602486 26 0.119869642 0.9055078792 0.05 -3.961057263 4.4516502035 1 1 minconc -0.049219837 2.4988920525 26 -0.019696664 0.9844357323 0.05 -5.185766015 5.0873263414 1 1 steep 0.6631004289 0.6859789874 26 0.9666483101 0.3426260427 0.05 -0.746949574 2.0731504317 1 1 tshift 0.0960816859 0.4931441808 26 0.1948348772 0.8470366982 0.05 -0.917590695 1.1097540671 It also estimates a fixed effect "midpt" of ~15, which is in the ball park of what I used in my simulation (18). What bothers me the most are the values it is picking for the random effects (and the poor fit). Assuming I am interpreting the output correctly, the proc is 1. producing "fits" for each patient which are really terrible 2. don't seem like they are really coming from the distribution I think I am specifying. for example: it seems to be saying that maxconc was 0.24 for patient 1 in simnum 1. and that this value was fairly likely to be pulled from its normal distribution (t value = 0.11, Pr > |t| = .9). But I THINK that I am specifying in the sas program that it should be pulled from a normal distribution with mean 100 and variance 25. So I must not really be specifying what I think I am specifying? I am not as troubled by the bad fit to the data per se. Since bad fits can happen for various reasons. But the fact that it seems to be "happy" generating random instances which I think don't make sense points to a bigger problem with my understanding of what is going on. thanks for any enlightenment which anyone can provide ...
... View more