最近遇到一个问题,如果因变量为一个连续变量(如胰岛素水平),主要考察的变量为分组变量(如正常血糖组,前糖尿病组,糖尿病组三组),现在的目的是想看调整多种变量(包括多个连续性变量和分类变量)后,胰岛素水平是否一致。 # ]$ \. \- Y' K4 C# n, L ; e: u/ e( M2 e! X& B! z E 0 b- m8 X' k: H: ]" \* b7 V一开始的思路想到的是采用GLM进行协方差分析来解决。; M1 T7 ?5 p( C: l9 b
( k" d' b. U5 g- Q
但是有觉得似乎不是很对,因为经典的协方差分析通常只考虑一个连续变量(协变量)和一个分组变量,同时协变量和分组变量只有不存在交互的时候(经典协方差分析的前提)才能使用协方差分析。 ! M& P3 |3 m+ L# m* v$ {针对我目前的问题,如果想调整多个连续性变量和分类变量,这种方法能否再叫协方差分析?如果可以认为是协方差的思想,用不用检验协方差分析的前提(如协变量与分组变量之间的交互)?多个连续性变量和分类变量存在时,该前提应该怎么检验?4 S, K9 j# @* `7 O* z
$ ~+ L* Z" L5 e/ R
通过跟别人交流之后,有一句话非常受用:线性模型其实最重要的不在于用的方差分析还是协方差分析,而主要是检验残差是否符合线性的几个条件。" N$ k" y N0 u! P+ D( c
: ~5 w' W3 k+ {0 [& `受到该启发后,认真再复习GLM的相关资料,得到更加重要的总结如下(来自高惠璇SAS/STAT软件使用手册,实际是SAS8.2的User's guide的中文版,但是目前SAS 9.2,9.3的User's guide关于GLM模型的介绍中已经删去了这么经典的总结,实在可惜,倒让人看不到GLM的真正长处了): 6 d8 ?& s5 W1 {9 p4 f如果X1-X3,Y1-Y2为连续性变量,Y3为分类变量,a-c为分类变量,time为时间变量,目前我们熟悉的模型可以简单概括如下: - C2 v/ _* ~9 Q(1) y1= x1 简单回归1 A5 ^- ^+ p/ k& q* x (2) y1= x1 x2 x3 多重回归(multiple regression) - Y: f! i9 l6 h0 ?(3) y1 y2=x1 x2 多元回归(multivariate regression) / S D+ W- [3 |: Y+ p) g(4) y1= a 单因素方差分析9 E* l( x! P1 a7 }( ?. g! } (5) y1= a b (析因设计的)主效应分析+ S2 M/ K2 x+ m& o: p6 { (6) y1= a b a*b (析因设计的)主效应加交互项分析 . d1 ?, F! ^% H: Z: N4 M(7) y1= a x1 协方差分析 % K% ^2 E6 L, [(8) y3= a 单因素logistic回归 % N R% r! n i+ e! T; Y(9) y3= a b c x1 x2 x3 多因素logistic回归 ) o' U9 T/ @8 j& {% ^6 T* X(10) y3(time) =a 单因素cox回归 6 v, x d# z& b9 E c1 L(11) y3(time) = a b c x1 x2 x3 多因素cox回归0 z' j( R5 s1 a- `0 `, i: L7 ?- A
% t7 X( V* D0 u" z; i- R$ S8 z
1-7采用SAS的一般线性模型GLM都能实现,而1-9采用SAS的广义线性模型GENMOD都能实现,具体验证详见后面举例 # x0 g8 r! z8 b2 @4 C ' U" N# t1 h, F再次回到开始的问题:掌握上述的基本思路后,因为因变量为连续变量,所以采用线性模型肯定是对的。如果因变量可以认为是正态的,那采用一般线性模型是合理的。所以现在的关键问题是:如果调整多个变量(包含分类和连续变量)后看不同分组间因变量(连续变量)是否仍有差异时,能否再称为协方差分析?我目前认为应该是可以的,但是事实上我们遇到这种情况后,并不再去强调它是协方差的思想,而只是回到线性模型分析的最初的起点,也即是检查残差是否符合线性的基本条件即可。 # M2 e2 B* J9 q- M9 ^0 {7 t7 A( l3 Y# T
但是现实中,我们在使用GLM解决前面遇到的类似问题时,只是简单地用了,而很多时候我们都没有认真去检验残差是否符合这个条件,这可能是我们滥用GLM的表现之一,因为我们更多只关注模型的参数是否有意义,而不去关心对结果“无关紧要”的前提条件。# l2 c* i: L/ }* j! Q
" a( k/ Y0 E/ t# m s; `再次思考一个问题,上述列举的1-7模型,在GLM中并没有特定的选项指定是哪一种模型,而采用一种表达方式。由此,可以进一步深入概括一句话,GLM模型,对于上述列举的1-7模型并没有本质区别,唯一的区别只是模型中自变量的属性和数量不同。但是我们对1-7模型的叫法却不相同。而其原因是我们对事物的认识是一个由浅到深的过程,之前我们认为他们是不同的7件事情,随着认识的加深,发现原来这些问题可以用一个方式表达出来。而SAS的GENMOD则更能说明这一问题。现在还没有一个模型能把上述模型1-11用一种表达方式表示,但是COX回归在抛开基线生存函数之后剩下的部分也是线性模型,所以说不定哪天真的能够把上述所有模型用一种表达方式表示出来。到时候更应该相信人们对事物的认识绝对是一个由浅到深的过程啦。6 E8 m2 D1 g/ y/ g
. H8 G+ r/ ?+ u* c. p3 l" H
附:GLM与GENMOD在协方差分析结果的比较# B5 F+ @! C! ~* L" j3 i
data drugtest; : z7 C, r( [& h$ t/ D& U+ O9 m input Drug $ PreTreatment PostTreatment @@; ' ~$ p. _# I1 y" r2 r datalines; 3 O8 [# U6 }9 r! v R
A 11 6 A 8 0 A 5 2 A 14 8 A 19 11 * ~; ]) M2 s8 x4 Y4 S A 6 4 A 10 13 A 6 1 A 11 8 A 3 0 / `! J8 x! _ p& I9 \* w/ d9 {
D 6 0 D 6 2 D 7 3 D 8 1 D 18 18 * t! f9 B& z |9 u
D 8 4 D 19 14 D 8 9 D 5 1 D 15 9 : c0 p, O$ d; ]7 d3 \4 x
F 16 13 F 13 10 F 11 18 F 9 5 F 21 23 # W5 f. ]$ @8 I L5 b F 16 12 F 12 5 F 12 16 F 7 1 F 12 20 6 A4 {# Z, R# i/ m4 g6 |) i: }: w
; ' B* s: x. |3 k9 S
* j4 A8 G% M0 D. J proc glm; 8 W. N* W! [3 k- b) B" w# a class Drug; * G% m# Y( q& {9 E7 T' g9 a
model PostTreatment = Drug PreTreatment / solution; . p9 v. V( Q; \: _/ d5 p; L5 J lsmeans Drug / stderr pdiff cov out=adjmeans; $ K+ {" {" C+ d& O6 v
run; : |' G: c1 J3 v5 g
3 d: X3 p' F7 h B0 \# L( R
proc genmod data=drugtest; # Z( |' n& _+ h& H& w0 k class Drug; v) L3 V; L* H; X/ P: K; ]0 g
model PostTreatment = Drug PreTreatment / dist=NOR link=ID obstats type1; 1 r" H# {% A h# K" u) `& E, h run; 7 L; h, F& C: F6 R* _, X
! n' E. [9 Z, L& j/ ` proc print data=adjmeans; , v* M* H9 x, i& k \' P4 C
run;5 g# i. z$ R$ ]7 M" G
- @& u( T* U" N- k4 r
+ f# I7 o, w& @0 V) _9 ?% m
9 ?+ E) D* z" x' \
! T9 A a. Y1 p9 e
学习了,,“我们更多只关注模型的参数是否有意义,而不去关心对结果“无关紧要”的前提条件! b4 |5 w) w- Z# \4 x/ T) g* r" d
”这句话是该提醒了很多人啊,个人感觉不要只知道应用,还要知道原理,所以说理论性的东西还是不可缺的,,谢谢楼主了哈,,) N, K0 }( O+ T& t8 ?; S