Real World Health Care Data Analysis. Uwe Siebert

Читать онлайн книгу.

Real World Health Care Data Analysis - Uwe Siebert


Скачать книгу
for selection;

      %IF &new_n_inter > 0 %THEN

      %DO;

      %PUT %STR(ERR)OR: Maximum number of iteration reached and no

       convergence yet!;

      %GOTO endmac;

      %END;

      %* Run PSMATCH for final model to create PS *;

      DATA _NULL_;

      SET allinter END = last;

      CALL SYMPUT(‘_ibint’||COMPRESS(PUT(_n_, BEST.)),

       COMPRESS(variable1||’*’||variable2));

      IF last THEN

      CALL SYMPUT(‘_nibint’, COMPRESS(PUT(_n_, BEST.)));

      RUN;

      %LET interactionsin =;

      %DO iloop = 1 %TO &_nibint;

      %LET interactionsin = &interactionsin &&_ibint&iloop;

      %END;

      OPTIONS &_notes &_mprint &_mlogic &_symbolgen;

      PROC PSMATCH DATA = _indata_ps REGION = ALLOBS;

      CLASS _cohort &classvars_bin_model;

      PSMODEL _cohort(Treated = “1”) = &contvars &classvars_bin_model

       &always_int &interactionsin;

      OUTPUT OUT = ps PS = _ps_;

      RUN;

      PROC SUMMARY DATA = ps NWAY;

      CLASS _mergekey;

      VAR _ps_;

      OUTPUT OUT = ps (DROP = _type_ _freq_) MEAN =;

      RUN;

      %*If convergence has been reached then create output dataset with propensity

       score and information about the method used.;

      PROC SORT DATA = imbalance (WHERE = (in AND NOT out)) OUT = imb NODUPKEY;

      BY _var1 _var2;

      RUN;

      PROC CONTENTS DATA = _indata_keep NOPRINT OUT = _cont;

      RUN;

      PROC SQL;

      CREATE TABLE _inter1 AS SELECT a.name AS _var1, b._var2

      FROM _cont AS a, imb AS b

      WHERE UPCASE(a.name) = b._var1;

      CREATE TABLE _inter AS SELECT b._var1, a.name AS _var2

      FROM _cont AS a, _inter1 AS b

      WHERE UPCASE(a.name) = b._var2;

      QUIT;

      DATA _NULL_;

      SET _inter END = last;

      CALL SYMPUT(‘_int’||COMPRESS(PUT(_N_, BEST.)),

       COMPRESS(_var1||’*’||_var2));

      IF last THEN

      CALL SYMPUT(‘_n_int’, COMPRESS(PUT(_N_, BEST.)));

      RUN;

      %LET interactions =;

      %DO iloop = 1 %TO &_n_int;

      %LET interactions = &interactions &&_int&iloop;

      %END;

      PROC SUMMARY DATA = imbalance_keep NWAY;

      VAR max;

      OUTPUT OUT = stat min = min mean = mean median = median max =;

      RUN;

      DATA _NULL_;

      SET stat;

      CALL SYMPUT(‘_stats’, COMPBL(‘Standardized Bias: MEAN: ‘||PUT(mean,

       8.2)||’; MIN: ‘||PUT(min, 8.2)||’; MEDIAN: ‘||PUT(median,

       8.2)||’; MAX: ‘||PUT(max, 8.2)||’.’));

      RUN;

      PROC SUMMARY DATA = imbalance_keep (WHERE = (_var2 = ‘’)) NWAY;

      VAR max;

      OUTPUT OUT = stat_main min = min mean = mean median = median max =;

      RUN;

      DATA _NULL_;

      SET stat_main;

      CALL SYMPUT(‘_stats_main’, COMPBL(‘Standardized Bias: MEAN:

       ‘||PUT(mean, 8.2)||’; MIN: ‘||PUT(min, 8.2)||’; MEDIAN:

       ‘||PUT(median, 8.2)||’; MAX: ‘||PUT(max, 8.2)||’.’));

      RUN;

      DATA &outdata;

      MERGE _indata_keep %IF &_ps_exist = 1 %THEN (DROP = &ps &ps._:);

      ps (RENAME = (_ps_ = &ps));

      BY _mergekey;

      DROP _mergekey;

      &ps._details = “Propensity Scores Calculation Details: Method:

       Automatic Parametric Model Building.”;

      &ps._cohort = “&cohort”;

      &ps._treated = &treated;

      &ps._details_settings = COMPBL(“Imbalance criterion:

       &imbal_nstrata_crit strata (Entry &entry_nstrata_crit) >

       &imbal_strata_crit; “||

       “#Strata: &nstrata; Key: TOTAL; Region: ALLOBS”);

      &ps._details_stats = COMPBL(“Number imbalanced at start:

       &_n_imbal_start; Number imbalance at end: &_n_imbal; Number of

       steps: &count; Standardardized bias summary for all terms:

       &_stats; Standardized bias summary for main terms only

       &_stats_main.”);

      %IF %BQUOTE(&classvars) ^= %THEN

      &ps._classvars = “Categorical covariates used for propensity

       scores: %TRIM(&classvars).”;;

      %IF %BQUOTE(&contvars) ^= %THEN

      &ps._contvars = “Continuous covariates used for propensity

       scores: %TRIM(&contvars).”;;

      %IF %BQUOTE(&interactions) ^= %THEN

      &ps._interactions = “Interactions used for propensity scores:

       %TRIM(&interactions).”;;

      RUN;

      %endmac:

      %* Clean-up;

      ODS LISTING;

      /*~~ PROC DATASETS LIBRARY = work NODETAILS NOLIST;

      DELETE imbalance imb imbalance_new imbalance_old imbalance_prev imbalance_out stddiff1_ stddiff2_ stddiff0_ _cohort_psm _cont _contents_psm _indata _indata_int _indata_mi _indata_ps _inter _inter1 _mean _mean0 _mean1 _mean2 _meanclass _meanclass_t _meancont _meancont_t _mean_t _nmiss _stddiff ps allinter imbalance_keep stat stat_main _indata_keep _vars;

      QUIT;*/

      %MEND ps_calc_apmb;

      There are also other proposed model selection methods for the propensity score estimation. For instance, Hirano and Imbens (2001) proposed one model selection algorithm that combines propensity score weighting and linear regression modeling that adjusts for covariates. This algorithm selects the propensity score model by testing the strength of association between a single covariate (or a single higher-order term or a single interaction) and intervention options, and pre-specified


Скачать книгу