SAS Estimate 或 Contrast


看到一个简明例子,分享给大家。

 

 

 

 

 

1.

lsmeans vacgrp ;
estimate '用estimate计算lsmean ACT' intercept 1 vacgrp 1 0;
estimate '用estimate计算lsmean PBO' intercept 1 vacgrp 0 1;

 

 

 

两种结果计算结果相同。一定记得在estimate中写 intercept 1.这是截距。第一个estimate是估计ACT的最小二乘均值,第二个是估计PBO的。

estimate '用estimate计算t检验 ACT PBO' vacgrp -1 1;

负号表示被减,H0: PBO - ACT  = 0;

 

 

estimate '用estimate计算lsmean ACT' intercept 1 vacgrp 1 0 visit .25 .25 .25 .25 visit*vacgrp .25 .25 .25 .25 0 0 0 0;
estimate '用estimate计算lsmean ACT' intercept 1 vacgrp 1 0;
estimate '用estimate计算t检验 ACT PBO' vacgrp -1 1 visit*vacgrp -.25 -.25 -.25 -.25 .25 .25 .25 .25;
estimate '用estimate计算t检验 ACT PBO' vacgrp -1 1;

 

estimate '用estimate计算lsmean ACT' intercept 4 vacgrp 4 0 visit 1 1 1 1 visit*vacgrp 1 1 1 1 0 0 0 0 / divisor = 4;
estimate '用estimate计算lsmean ACT' intercept 1 vacgrp 1 0;
estimate '用estimate计算t检验 ACT PBO' vacgrp -4 4 visit*vacgrp -1 -1 -1 -1 1 1 1 1 / divisor = 4;
estimate '用estimate计算t检验 ACT PBO' vacgrp -1 1;
estimate 'HI vs PB at Site 1' vacgrp vacgrp*siteid 1 0 -1
                               1 0 0 0 *HI at site 1 2 3 4;
                               0 0 0 0 *LO at site 1 2 3 4;
                               -1 0 0 0 *PB at site 1 2 3 4;

 

 

上述两段code作用完全一样。visit*vacgrp是说:vacgrp = ACT,对应的VISIT*VACGRP标上需要得数字。

 Code中 0.25那的意义是每个visit占的权重是一样的,当计算均值时。每个visit样本量占总体的比例。

当使用estimate估计均值时,计算得出的统计量和means中得出的统计量一致。参考方差分析 - GLM.

 

 

 

 

class visit vacgrp pat ;
lsmeans visit*vacgrp;
estimate '用estimate计算lsmean ACT' intercept 4 vacgrp 4 0 visit 1 1 1 1 visit*vacgrp 1 0 1 0 1 0 1 0 / divisor = 4;
estimate '用estimate计算lsmean ACT' intercept 1 vacgrp 1 0;
estimate '用estimate计算t检验 ACT PBO' vacgrp -4 4 visit*vacgrp -1 1 -1 1 -1 1 -1 1 / divisor = 4;
estimate '用estimate计算t检验 ACT PBO' vacgrp -1 1;

class中变量出现得顺序,影响交互作用相乘时得顺序。

 

 

proc iml;
      a = {0 1};
      b = {0.2 0.2 0.2 0.2 0.2};
      ab = b@a;
      print ab;
quit;

如果变量比较多,不太好区分交互作用乘积,用上述代码算。

data arthr;
 input vacgrp $ pat mo1 mo2 mo3 mo4;
 datalines;
ACT 101 6 3 0 3
ACT 103 7 3 1 2
ACT 104 4 1 2 8
ACT 107 8 4 3 1
PBO 102 6 5 5 7
PBO 105 9 4 6 6
PBO 106 5 3 4 3
PBO 108 6 2 3 9
; 

data discom; set arthr;
 keep vacgrp pat visit score;
 score = mo1; visit = 1; output;
 score = mo2; visit = 2; output;
 score = mo3; visit = 3; output;
 score = mo4; visit = 4; output;
run;

ods html;
proc mixed data = discom;
class vacgrp pat visit ;
model score = vacgrp visit visit*vacgrp;
repeated visit / subject=pat(vacgrp) type=un r rcorr;
/*lsmeans vacgrp ;*/
/*estimate '用estimate计算lsmean ACT' intercept 1 vacgrp 1 0;*/
/*estimate '用estimate计算lsmean PBO' intercept 1 vacgrp 0 1;*/
/*estimate '用estimate计算t检验 ACT PBO' vacgrp -1 1;*/
lsmeans visit*vacgrp;
estimate '用estimate计算lsmean ACT' intercept 4 vacgrp 4 0 visit 1 1 1 1 visit*vacgrp 1 1 1 1 0 0 0 0 / divisor = 4;
estimate '用estimate计算lsmean ACT' intercept 1 vacgrp 1 0;
estimate '用estimate计算t检验 ACT PBO' vacgrp -4 4 visit*vacgrp -1 -1 -1 -1 1 1 1 1 / divisor = 4;
estimate '用estimate计算t检验 ACT PBO' vacgrp -1 1;
estimate 'Month 3 Change from Baseline: ACT v. PBO' 
  vacgrp * visit -1 0 0 1 1 0 0 -1;
run;

12proc mixed data = discom;
class visit vacgrp pat ;
model score = vacgrp visit visit*vacgrp;
repeated visit / subject=pat(vacgrp) type=un r rcorr;
class visit vacgrp pat ;
lsmeans visit*vacgrp;
estimate '用estimate计算lsmean ACT' intercept 4 vacgrp 4 0 visit 1 1 1 1 visit*vacgrp 1 0 1 0 1 0 1 0 / divisor = 4;
estimate '用estimate计算lsmean ACT' intercept 1 vacgrp 1 0;
estimate '用estimate计算t检验 ACT PBO' vacgrp -4 4 visit*vacgrp -1 1 -1 1 -1 1 -1 1 / divisor = 4;
estimate '用estimate计算t检验 ACT PBO' vacgrp -1 1;
run;

proc iml;
      a = {1 -1};
      b = {-1 0 0 1};
      ab = a@b;
      print ab;
quit;
*负号表示被减;

负号表示被减, b是visit 3 - baseline得。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM