As a continuation of my previous post, here is:
Part 2: Comparison of approach (A) using a two-parameter likelihood function to approach (B1)/(B2) using two one-parameter likelihood functions.
The comparison is limited to the Weibull model defined in the previous post. The sample size is increased from 3 to 1000 subjects per treatment group. Again, censored observations are avoided. Data for 10,000 of these experiments are simulated and analyzed using both approaches. (The simulation uses the 64-bit Mersenne twister, which, unlike the default "MTHybrid" random-number generator, avoids tied event times.)
/* Simulate example data: 10,000 samples of 3*1000 subjects each */
%let d='Weibull';
%let a=2;
%let b=50;
data have;
call streaminit('MT64', 27182818); /* using the 64-bit Mersenne twister to reduce the frequency of ties */
array c[3] _temporary_ (3 4 6);
cnsr=0;
do k=1 to 10000;
do trtpn=1 to 3;
do i=1 to 1000;
aval=quantile(&d,1-sdf(&d,rand(&d,&a,&b),&a,&b)**(1/c[trtpn]),&a,&b);
output;
end;
end;
end;
run;
/* Perform Cox regression (approaches A, B1, B2) */
options nonotes;
ods noresults;
ods select none;
ods output ParameterEstimates=est;
proc phreg data = have;
by k;
class trtpn(ref='3');
model aval*cnsr(1) = trtpn;
run;
ods output ParameterEstimates=est1;
proc phreg data = have;
where trtpn in (1 3);
by k;
class trtpn(ref='3');
model aval*cnsr(1) = trtpn;
run;
ods output ParameterEstimates=est2;
proc phreg data = have;
where trtpn in (2 3);
by k;
class trtpn(ref='3');
model aval*cnsr(1) = trtpn;
run;
options notes;
ods results;
ods select all;
/* Compute differences between estimates and true parameter values beta1, beta2 */
%let beta1=log(1/2);
%let beta2=log(2/3);
proc transpose data=est out=trans(drop=_:) prefix=b;
by k;
var estimate;
id classval0;
run;
data diff;
merge trans
est1(keep=k estimate rename=(estimate=b01))
est2(keep=k estimate rename=(estimate=b02));
by k;
d1A=abs(b1-&beta1);
d2A=abs(b2-&beta2);
dA=sqrt(d1A**2+d2A**2);
d1B=abs(b01-&beta1);
d2B=abs(b02-&beta2);
dB=sqrt(d1B**2+d2B**2);
c=(.<dA<dB);
run;
/* Compare differences between approaches A and B (B1/B2) */
proc means data=diff;
var d:;
run;
proc ttest data=diff;
paired (d1A--dA):(d1B--dB);
run;
proc freq data=diff;
tables c / binomial (level='1');
run;
Both the paired t-tests (p<0.0001 for all three comparisons) and the binomial test (p<0.0001) indicate that the estimates obtained with approach A tend to be closer to the true parameter values in this example. However, the improvement is small, e.g., from a mean Euclidean distance dB of 0.057 to a mean dA of 0.056. In 45.0% percent (95%-CI 44.0 - 46.0) of the 10,000 simulated studies approach (B1)/(B2) performed even better than approach (A).
... View more