SAS proc genmod с кластеризованными, многократными вменяемыми данными

Я пытаюсь получить оценки соотношения рисков на основе многократно вмененных кластерно-коррелированных данных в SAS с использованием логарифмической биномиальной регрессии с использованием SAS Proc Genmod. Мне удалось рассчитать оценки соотношения рисков для необработанных (не MI) данных, но кажется, что программа столкнулась с проблемой при создании выходного набора данных для меня, чтобы прочитать в Proc Mianalyze.

Я включил повторное утверждение субъектов, чтобы SAS использовал надежную оценку дисперсии. Без оператора "повторяющихся субъектов" оператор вывода ODS, кажется, работает просто отлично; однако, как только я включаю выражение "повторяющиеся субъекты", я получаю предупреждение о том, что мой выходной набор данных не был сгенерирован.

Я открыт для других подходов и предложений по получению оценок отношения риска, используя эти данные, если комбинация genmod/mianalyze не подходит, но хотел бы посмотреть, смогу ли я заставить это работать! Я бы предпочел SAS, если это возможно, из-за проблем с доступом к лицензиям для других программ, таких как Stata и SUDAAN. Ниже приведен мой код, где "seroP" - это мой биномиальный результат, "int" - это биномиальная независимая переменная, представляющая интерес (вмешательство получено, а не получено), "tf5" - биномиальная ковариата, age - непрерывная ковариата, а village задает кластер:

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 ответ

Краткий ответ - добавить опцию "PRINTMLE" в конце оператора "Repeated". Но код, который вы разместили здесь, может не дать того, что вы на самом деле хотите. Итак, следующий ответ более длинный:

1.Программа ниже основана на SAS 9.3 (или более новых версиях) для Windows. Если вы используете более старую версию, кодировка может отличаться.

2.Для PROC MIANALYZE требуются три таблицы ODS из PROC GENMOD вместо одной, а именно: 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 и ковариационных таблиц.

3а) Первый набор таблиц взят из неповторяющейся модели (т. Е. Без "повторного" оператора). В вашем случае это выглядит так:

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) опция COVB добавлена ​​в оператор MODEL, чтобы получить ковариационную таблицу 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) Третий набор содержит эмпирические оценки, также из повторной модели. Эмпирические оценки также называются ROBUST оценками. Похоже, результаты здесь, что вы хотите. Это выглядит как:

…
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;

Как вы могли заметить, в операторе "Repeated" опция меняется на 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 с кластеризованными, многократными вменяемыми данными
  2. http://www.ats.ucla.edu/stat/sas/v8/mianalyzev802.pdf
  3. http://analytics.ncsu.edu/sesug/2006/ST12_06.PDF
  4. Эллисон, Пол Д. Логистическая регрессия с использованием SAS®: теория и применение, второе издание (стр. 226-234). Copyright © 2012, SAS Institute Inc., Кэри, Северная Каролина, США.
Другие вопросы по тегам