看到一个简明例子,分享给大家。
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得。