阅读权限 255 威望 0 级论坛币 14 个 通用积分 0 学术水平 0 点 热心指数 0 点 信用等级 0 点 经验 96 点 帖子 4 精华 0 在线时间 7 小时 注册时间 2020-5-1 最后登录 2022-3-8
小学生
还不是VIP /贵宾
威望 0 级论坛币 14 个 通用积分 0 学术水平 0 点 热心指数 0 点 信用等级 0 点 经验 96 点 帖子 4 精华 0 在线时间 7 小时 注册时间 2020-5-1 最后登录 2022-3-8
难过
2020-5-1 16:25:49
签到天数: 1 天
连续签到: 1 天
[LV.1]初来乍到
6 论坛币
数据是1:2匹配的病例对照数据,已经运用了条件Logistic回归分析了因变量(fpg3)和两个自变量(WHR1和BMI2)的关系,最后想分析它们的交互作用,我在找到了一篇名为《实现logistic与Cox回归相乘相加交互作用的临床实践宏程序》[网址:http://www.doc88.com/p-7087671227853.html ],可是我对于宏程序方面还是小白一个,不是特别明白,老师催着我赶快把数据分析 完,我只能通过模仿的方式编写了一个宏程序,但感觉好像有挺多问题的,想请教一下大神,看看哪里有什么错误,感激不尽。
因变量(fpg3)和和两个自变量(WHR1和BMI2)均为二分类变量,id1是对子编号。
其中变量time的得来如下:
data pd1;
set pd;
if FPG3=1 then time=2-FPG3;
if FPG3=0 then time=2-FPG3;
run;
%macro additive2dum_LOGISTIC (dat, a, b, statues, cov1, cov2, cov3, cov4, cov5, cov6, cov7, cov8);
Data p1;
Set &dat;
xx=&a*&b;
proc phreg outset=est data=p1 covout;
class &a(ref=first) &b(ref=first)/pram=ref;
model time*&statues(0)=&a &b xx &cov1 &cov2 &cov3 &cov4 &cov5 &cov6 &cov7/risklimits COVB include=3 selection=stepwise ties=discrete; BETA3=t(BETAP[,2:4]); V3=COV[1:3,2:4];
strata id1;
Constrast “OR10” &a 1 &b 0 xx 0/estimate=exp;
Constrast “OR01” &a 0 &b 1 xx 0/estimate=exp;
Constrast “OR11” &a 1 &b 1 xx 1/estimate=exp;
Run;
Proc export data=estoutfile= “D:\&b” DBMS=excel replace;
Run;
%mend additive2dum_LOGISTIC;
%let ICR_LOGISTIC=%str(
Proc print data=est;
Run;
Data parmscovb;
Set est;
Drop _Inlike_;
If_type_ =‘PARMS’ then output parms; elseif_type_=’COV’ then output covb;
run;
proc IML;
Use parms; Read ALL var _all_ INTO BETAP;
Close parms;
print betap;
use covb; read all var _all_ into cov;
close covb;
print cov;
BETA3=t(BETAP[,2:4]); V3=COV[2:4,2:4];
Print BETA3 V3;
C=BETA3[1,]+BETA3[2,]+BETA3[3,];
D=EXP(C)-1;
I=EXP(BETA3[1,])+EXP(BETA3[2,])-1;
F=EXP(BETA3[1,])+EXP(BETA3[2,])-2;
H=EXP(C)/D;
ICR=EXP(C)-EXP(BETA3[1,])-EXP(BETA3[2,])+1;
AP=ICR/EXP(C);
SI=D/F;
A=J(3,1,0);
A[1,]=EXP(C)-EXP(BETA3[1,]);
A[2,]=EXP(C)-EXP(BETA3[2,]);
A[3,]=EXP(C);
VARICR=T(A)*V3*A;
Z=ICR/SQRT(VARICR);
PVAL=2*(1-PROBNORM(ABS(Z)));
L_ICR=ICR-1.96*SQRT(VARICR);
H_ICR=ICR+1.96*SQRT(VARICR);
B=J(3,1,0);
B[1,]=(EXP(BETA3[2,]-1))/EXP(C);
B[2,]=(EXP(BETA3[1,]-1))/EXP(C);
B[3,]=I/exp(C);
VARAP=t(B)*V3*B;
L_AP=AP-1.96*SQRT(VARAP);
H_AP=AP+1.96*SQRT(VARAP);
S=J(3,1,0);
S[1,]=H-EXP(BETA3[1,])/F;
S[2,]=H-EXP(BETA3[2,])F;
S[3,]=H;
VRS=t(S)*V3*S;
L_LSI=log(SI)-1.96*SQRT(VARS);
H_LSI=log(SI)+1.96*SQRT(VARS);
L_SI=exp(L_LSI);
H_SI=exp(H_LSI);
Print ICR L_ICR H_ICR AP L_AP H_AP SI L_SI H_SI Z PVAL;
RUN;
QUIT;
Option mcompilenote=all;
%macro addit_sign(dat, a, b, y, beta0, beta1, beta2,beta3);
Proc nlmixed data=&dat DF=10000;
PAEMS b0=&beta0 b1=&beta2 b3=&beta3;
Odds=exp(b0+b1*&a+b2*&b+b3*&a*&b);
pi=odds/(1+odds);
model &y ~ Binary(pi);
estimate ‘ICR=ICR using OR’ exp(b1+b2+b3)-exp(b1)-exp(b2)+1;
estimate ‘AP using OR’ (exp(b1+b2+b3)-exp(b1)-exp(b2)+1)/(exp(b1+b2+b3));
estimate ‘SI=ICR using OR’ (exp(b1+b2+b3)-1)/(exp(b1)+exp(b2)-2);
run;
%mend addit_sign;
Option mcompilenote=all;
%macro addit_sign1(dat, a, b, y, beta0, beta1, beta2, WaldICR);
Proc NLP data=%dat VARDEF=N technique=dbldogpcov;
PARMS b0=&beta0, b1=&beta1, b2=&bata2, ICR=&WaldICR;
b_interaction=log((ICR+exp(b1)+exp(b2)-1)/(exp(b1)*exp(b2)));
if &y=1 then p=exp(b0+(b1*&a)+(b2*&b)+(b_ interaction*&a*&b))/(1+exp(b0+(b1*&a)+(b2*&b)+(b_ interaction*&a*&b)));
else p=1/(1+exp(b0+(b1*&a)+(b2*&b)+(b_ interaction*&a*&b)));
loglike=log(p);
max loglike;
PROFILE ICR/ALPHA=0.05;
RUN;
%mend; 复制代码