This example illustrates sensitivity analysis in multiple imputation under the MNAR assumption by searching for a tipping point that reverses the study conclusion.
Suppose that a pharmaceutical company is conducting a clinical trial to test the efficacy of a new drug. The trial consists
of two groups of equally allocated patients: a treatment group that receives the new drug and a placebo control group. The
variable Trt
is an indicator variable, with a value of 1 for patients in the treatment group and a value of 0 for patients in the control
group. The variable Y0
is the baseline efficacy score, and the variable Y1
is the efficacy score at a follow-up visit.
If the data set does not contain any missing values, then a regression model such as
can be used to test the efficacy of the treatment effect.
Suppose that the variables Trt
and Y0
are fully observed and the variable Y1
contains missing values in both the treatment and control groups. Now suppose the data set Mono2
contains the data from a trial that have missing values in Y1
. Output 62.13.1 lists the first 10 observations.
Output 62.13.1: Clinical Trial Data
First 10 Obs in the Trial Data |
Obs | Trt | y0 | y1 |
---|---|---|---|
1 | 0 | 11.4826 | . |
2 | 0 | 10.0090 | 10.8667 |
3 | 0 | 11.3643 | 10.6660 |
4 | 0 | 11.3098 | 10.8297 |
5 | 0 | 11.3094 | . |
6 | 1 | 10.3815 | 10.5587 |
7 | 1 | 11.2001 | 13.7616 |
8 | 1 | 9.7002 | 10.3460 |
9 | 1 | 10.0801 | . |
10 | 1 | 11.2667 | 11.0634 |
Multiple imputation often assumes that missing values are missing at random (MAR), and the following statements use the MI procedure to impute missing values under this assumption:
proc mi data=Mono2 seed=14823 nimpute=10 out=outmi; class Trt; monotone reg; var Trt y0 y1; run;
The following statements generate regression coefficients for each of the 10 imputed data sets:
ods listing close; proc reg data=outmi; model y1= Trt y0; by _Imputation_; ods output parameterestimates=regparms; run;
The following statements combine the 10 sets of regression coefficients:
ods listing; proc mianalyze parms=regparms; modeleffects Trt; run;
The “Parameter Estimates” table in Output 62.13.2 displays a combined estimate and standard error for the regression coefficient for Trt
. The table displays a 95% confidence interval (0.2865, 1.2261), which does not contain 0. The table also shows a t test statistic of 3.19, with the associated p-value 0.0019 for the test that the regression coefficient is equal to 0.
Output 62.13.2: Parameter Estimates
Parameter Estimates | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Parameter | Estimate | Std Error | 95% Confidence Limits | DF | Minimum | Maximum | Theta0 | t for H0: Parameter=Theta0 |
Pr > |t| | |
Trt | 0.756280 | 0.236952 | 0.286493 | 1.226068 | 105.84 | 0.556144 | 0.964349 | 0 | 3.19 | 0.0019 |
The conclusion in Output 62.13.2 is based on the MAR assumption. But if it is plausible that, for the treatment group, the distribution of missing Y1
responses has a lower expected value than that of the corresponding distribution of the observed Y1
responses, the conclusion under the MAR assumption should be examined.
The following macro generates multiple imputed data sets, with a specified sequence of shift parameters that adjust the imputed values for observations in the treatment group (TRT=1):
/*----------------------------------------------------------------*/ /*--- Generate imputed data set for specified shift parameters ---*/ /*--- data= input data set ---*/ /*--- smin= min shift parameter ---*/ /*--- smax= max shift parameter ---*/ /*--- sinc= increment of the shift parameter ---*/ /*--- out= output imputed data set ---*/ /*----------------------------------------------------------------*/ %macro midata( data=, smin=, smax=, sinc=, out=); data &out; set _null_; run; /*------------ # of shift values ------------*/ %let ncase= %sysevalf( (&smax-&smin)/&sinc, ceil ); /*------- Imputed data for each shift -------*/ %do jc=0 %to &ncase; %let sj= %sysevalf( &smin + &jc * &sinc); proc mi data=&data seed=14823 nimpute=10 out=outmi; class Trt; monotone reg; mnar adjust( y1 / shift=&sj adjustobs=(Trt='1') ); var Trt y0 y1; run; data outmi; set outmi; Shift= &sj; run; data &out; set &out outmi; run; %end; %mend midata;
Assume that the tipping point that reverses the study conclusion is between –2 and 0. The following statements generate 10 imputed data sets for each of the shift parameters –2.0, –1.8, …, 0.
ods listing close; %midata( data=Mono2, smin=-2, smax=0, sinc=0.2, out=out1);
The following statements perform regression tests on the imputed data sets and combine results for each shift parameter:
/*------- Reg tests on imputed data sets -------*/ /*------- for each shift parameter -------------*/ proc reg data=out1; model y1= Trt y0; by Shift _Imputation_; ods output parameterestimates=regparms; run; /*------ Combine reg results -------*/ proc mianalyze parms=regparms; modeleffects Trt; by Shift; ods output parameterestimates=miparm1; run;
The following statements display the p-values that are associated with the shift parameters:
ods listing; proc print label data=miparm1; var Shift Probt; title 'P-values for Shift Parameters'; label Probt='Pr > |t|'; format Probt 8.4; run;
Output 62.13.3: Finding Tipping Point for Shift Parameter between –2 and 0
P-values for Shift Parameters |
Obs | Shift | Pr > |t| |
---|---|---|
1 | -2.0 | 0.1861 |
2 | -1.8 | 0.1328 |
3 | -1.6 | 0.0916 |
4 | -1.4 | 0.0611 |
5 | -1.2 | 0.0395 |
6 | -1.0 | 0.0248 |
7 | -0.8 | 0.0152 |
8 | -0.6 | 0.0091 |
9 | -0.4 | 0.0054 |
10 | -0.2 | 0.0032 |
11 | 0.0 | 0.0019 |
For a two-sided Type I error level of 0.05, the tipping point for the shift parameter is between –1.4 and –1.2. The following statements generate multiple imputed data sets, with shift parameters –1.40, –1.39, …, –1.20.
ods listing close; %midata( data=Mono2, smin=-1.4, smax=-1.2, sinc=0.01, out=out2);
The following statements perform regression tests on the imputed data sets and combine results for each shift parameter:
/*------- Reg tests on imputed data sets -------*/ /*------- for each shift parameter -------------*/ proc reg data=out2; model y1= Trt y0; by Shift _Imputation_; ods output parameterestimates=regparms; run; /*------ Combine reg results -------*/ proc mianalyze parms=regparms; modeleffects Trt; by Shift; ods output parameterestimates=miparm2; run;
The following statements display the p-values that are associated with the shift parameters:
ods listing; proc print label data=miparm2; var Shift Probt; title 'P-values for Shift Parameters'; label Probt='Pr > |t|'; format Probt 8.4; run;
Output 62.13.4: Finding Tipping Point for Shift between –1.40 and –1.20
P-values for Shift Parameters |
Obs | Shift | Pr > |t| |
---|---|---|
1 | -1.40 | 0.0611 |
2 | -1.39 | 0.0598 |
3 | -1.38 | 0.0586 |
4 | -1.37 | 0.0573 |
5 | -1.36 | 0.0561 |
6 | -1.35 | 0.0549 |
7 | -1.34 | 0.0538 |
8 | -1.33 | 0.0526 |
9 | -1.32 | 0.0515 |
10 | -1.31 | 0.0504 |
11 | -1.30 | 0.0493 |
12 | -1.29 | 0.0482 |
13 | -1.28 | 0.0472 |
14 | -1.27 | 0.0462 |
15 | -1.26 | 0.0452 |
16 | -1.25 | 0.0442 |
17 | -1.24 | 0.0432 |
18 | -1.23 | 0.0423 |
19 | -1.22 | 0.0413 |
20 | -1.21 | 0.0404 |
21 | -1.20 | 0.0395 |
The study conclusion under MAR is reversed when the shift parameter is –1.31. Thus, if this shift parameter –1.31 is plausible, the conclusion under MAR is questionable.