SAS proc genmod with clustered multipit imputed data

时间:2017-04-16 18:56:10

标签: sas cluster-analysis imputation correlated

我正在寻求使用SAS Proc Genmod使用log二项式回归从SAS中的多重估算的群集相关数据中获取风险比估计值。我已经能够计算原始(非MI)数据的风险比估计值,但似乎该程序在生成输出数据集方面遇到了麻烦,我可以阅读Proc Mianalyze。

我包括一个重复的主题陈述,以便SAS将使用稳健的方差估计。没有"重复的主题"声明,ODS输出声明似乎工作得很好;但是,一旦我包含了重复的主题"声明,我收到一条警告消息,表明我的输出数据集没有生成。

如果genmod / mianalyze组合不合适,我愿意使用这些数据生成风险比估算的其他方法和建议,但是我想知道我是否可以使用它!如果可能的话,我更喜欢SAS,因为其他程序(如Stata和SUDAAN)的许可访问问题。我的代码在下面,其中" seroP"是我的二项式结果," int"是感兴趣的二项式自变量(接收干预与未接收干预)," tf5"是二项式协变量,年龄是连续协变量,村庄指定群集:

Proc GenMod data=sc.wide_mip descending ; by _Imputation_;
Class int (ref='0') tf5 (ref='0') village /param=ref ;
weight weight;
Model seroP= int tf5 age  / 
dist=bin Link=logit ;
repeated subject=village/ type=unstr;
estimate 'Beta' int 1 -1/exp;
ods output ParameterEstimates=sc.seroP;
Run;

proc mianalyze parms =sc.seroP;
class int  tf5  ;
modeleffects int tf5 age village  ;
run;

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

简短的回答是在“重复”语句的末尾添加一个选项“PRINTMLE”。但是你在这里发布的代码可能无法产生你真正想要的东西。所以,以下是一个更长的答案:

1.以下程序基于适用于Windows的SAS 9.3(或更新版本)。如果您使用的是旧版本,则编码可能会有所不同。

2.对于PROC MIANALYZE,需要PROC GENMOD的三个ODS表而不是一个,即1)参数估计表(_est); 2)协方差表(_covb); 3)参数索引表(parminfo)。 PROC MIANALYZE语句的第一行应如下所示:

PROC MIANALYZE parms = ~_est covb = ~_covb parminfo=parminfo;

而~_est是指ODS参数表,~_covb是指ODS协方差表。

有不同类型的ODS参数估计和协方差表。符号“〜”应由一组特定的ODS表替换,这将在下面的部分中讨论。

3.从PROC GENMOD,可以生成三组不同的ODS参数和协方差表。

3a)第一组表来自非重复模型(即没有“重复”语句)。在您的情况下,它看起来像:

Proc GenMod data=sc.wide_mip descending ; by _Imputation_;
…
MODEL seroP= int tf5 age/dist=bin Link=logit COVB; /*adding the option COVB*/
/*repeated subject=village/ type=unstr;*/ 
/*Note that the above line has been changed to comments*/
…
ODS OUTPUT  
    /*the estimates from a non-repeated model*/
    ParameterEstimates=norepeat_est
    /*the covariance from a non-repeated model*/ 
    Covb = nonrepeat_covb 
    /*the indices of the parameters*/
    ParmInfo=parminfo;
Run;

值得注意的是,1)在MODEL语句中添加选项COVB,以获得ODS协方差表。 2)“重复”语句作为注释。 3)“~_est”表被命名为“nonrepeat_est”。类似地,表“~_covb”被命名为“nonrepeat_covb。

3b)第二组表包含来自重复模型的基于模型的估计。在您的情况下,它看起来像:

…
MODEL seroP= int tf5 age/dist=bin Link=logit;
REPEATED subject=village/ type=un MODELSE MCOVB;/*options added*/
…
ODS OUTPUT 
    /*the model-based estimates from a repeated model*/
    GEEModPEst=mod_est
    /*the model-based covariance from a repeated model*/ 
    GEENCov= mod_covb 
    /*the indices of the parameters*/
    parminfo=parminfo;
Run;

在“REPEATED”语句中,选项MODELSE用于生成基于模型的参数估计,而MCOVB用于生成基于模型的协方差。如果没有这些选项,将不会生成相应的ODS表(即GEEModPEst和GEENCov)。请注意,ODS表名称与前一种情况不同。在这种情况下,表格是GEEModPEst和GEENCov。在前一种情况下(非重复模型),表格是ParameterEstimates和COVB。这里,~_est表被命名为“mod_est”,代表基于模型的估计。类似地,~_covb表被命名为“mod_covb”。 ParmInfo表与之前的模型相同。

3c)第三组包含经验估计,也来自重复模型。经验估计也称为鲁棒估计。听起来像这里的结果是你想要的。它看起来像:

…
MODEL seroP= int tf5 age/dist=bin Link=logit;
REPEATED subject=village/ type=un ECOVB;/*option changed*/
…
ODS OUTPUT 
    /*the empirical(ROBUST) estimates from a repeated model*/
    GEEEmpPEst=emp_est
    /*the empirical(ROBUST) covariance from a repeated model*/ 
    GEERCov= emp_covb 
    /*the indices of the parameters*/
    parminfo=parminfo;
Run;

您可能已经注意到,在“重复”语句中,该选项更改为ECOVB。这样,将生成经验协方差表。生成经验参数估计不需要任何东西,因为它们总是由程序产生。 ParmInfo表与前面的情况相同。

4.拼凑在一起,实际上你可以同时生成三组表。唯一的事情是,应该添加一个选项“PRINTMLE”,以便在重复的术语到位时从非重复模型生成估计。合并后的程序如下所示:

Proc GenMod data=sc.wide_mip descending ; by _Imputation_;
Class int (ref='0') tf5 (ref='0') village /param=ref ;
weight weight;
Model seroP= int tf5 age  / 
dist=bin Link=logit COVB; /*COVB to have non-repeated model covariance*/
repeated subject=village/ type=UN MODELSE PRINTMLE MCOVB ECOVB;/*all options*/
estimate 'Beta' int 1 -1/exp;

ODS OUTPUT  
    /*the estimates from a non-repeated model*/
    ParameterEstimates=norepeat_est
    /*the covariance from a non-repeated model*/ 
    Covb = nonrepeat_covb 
    /*the indices of the parameters*/
    ParmInfo=parminfo

    /*the model-based estimates from a repeated model*/
    GEEModPEst=mod_est
    /*the model-based covariance from a repeated model*/ 
    GEENCov= mod_covb 

    /*the empirical(ROBUST) estimates from a repeated model*/
    GEEEmpPEst=emp_est
    /*the empirical(ROBUST) covariance from a repeated model*/ 
    GEERCov= emp_covb
    ;
 Run;

/*Analyzing non-repeated results*/
PROC MIANALYZE parms = norepeat_est covb = norepeat_covb parminfo=parminfo;
class int  tf5  ;
modeleffects int tf5 age village  ;
run;

/*Analyzing model-based results*/
PROC MIANALYZE parms = mod_est covb = mod_covb parminfo=parminfo;
class int  tf5  ;
modeleffects int tf5 age village  ;
run;

/*Analyzing empirical(ROBUST) results*/
PROC MIANALYZE parms = emp_est covb = emp_covb parminfo=parminfo;
class int  tf5  ;
modeleffects int tf5 age village  ;
run;

希望它有所帮助。进一步阅读:

  1. SAS proc genmod with clustered, multiply imputed data
  2. http://www.ats.ucla.edu/stat/sas/v8/mianalyzev802.pdf
  3. http://analytics.ncsu.edu/sesug/2006/ST12_06.PDF
  4. Allison,Paul D. Logistic回归使用SAS®:理论与应用,第二版(第226-234页)。版权所有©2012,SAS Institute Inc.,Cary,North Carolina,USA。