最近遇到一个问题,如果因变量为一个连续变量(如胰岛素水平),主要考察的变量为分组变量(如正常血糖组,前糖尿病组,糖尿病组三组),现在的目的是想看调整多种变量(包括多个连续性变量和分类变量)后,胰岛素水平是否一致。7 u) `9 F _9 P- X% c% x* d8 n
1 b# T5 g' a8 l7 u$ s ! W* }, c" ]9 P. V" v+ l一开始的思路想到的是采用GLM进行协方差分析来解决。) ^4 t( v2 ?: S/ ~! S' M/ A, _
2 W ~" D0 y1 R1 o2 s但是有觉得似乎不是很对,因为经典的协方差分析通常只考虑一个连续变量(协变量)和一个分组变量,同时协变量和分组变量只有不存在交互的时候(经典协方差分析的前提)才能使用协方差分析。 7 W- `: C+ {" o* ?) D1 x( M针对我目前的问题,如果想调整多个连续性变量和分类变量,这种方法能否再叫协方差分析?如果可以认为是协方差的思想,用不用检验协方差分析的前提(如协变量与分组变量之间的交互)?多个连续性变量和分类变量存在时,该前提应该怎么检验?. T6 C* F% y9 A3 y9 p7 J4 W
( N) v( ], ?& j C, z/ E7 Q
通过跟别人交流之后,有一句话非常受用:线性模型其实最重要的不在于用的方差分析还是协方差分析,而主要是检验残差是否符合线性的几个条件。 " N7 v' r0 x: H! _; J+ R: B& i {4 R. n & R0 G" j& x. d. Y1 d% Q. f3 p! g受到该启发后,认真再复习GLM的相关资料,得到更加重要的总结如下(来自高惠璇SAS/STAT软件使用手册,实际是SAS8.2的User's guide的中文版,但是目前SAS 9.2,9.3的User's guide关于GLM模型的介绍中已经删去了这么经典的总结,实在可惜,倒让人看不到GLM的真正长处了): 7 T$ k+ t/ O2 I' T- \$ ^! O5 L如果X1-X3,Y1-Y2为连续性变量,Y3为分类变量,a-c为分类变量,time为时间变量,目前我们熟悉的模型可以简单概括如下: ! a F) W8 K& L' z1 ^, Q(1) y1= x1 简单回归3 T# B1 R4 W, T+ X; a (2) y1= x1 x2 x3 多重回归(multiple regression)3 n {3 J3 J% V8 f% L+ H2 o% Z. K/ a# Q (3) y1 y2=x1 x2 多元回归(multivariate regression) , `& B% D% e# A(4) y1= a 单因素方差分析; E# h$ r) L% T- E0 S3 P (5) y1= a b (析因设计的)主效应分析 7 ?. ?1 {! w" U(6) y1= a b a*b (析因设计的)主效应加交互项分析0 o7 @" @7 r0 ]% c (7) y1= a x1 协方差分析 + \/ Y/ b7 ~5 @5 v(8) y3= a 单因素logistic回归2 Z3 M& u0 l7 A( y/ X (9) y3= a b c x1 x2 x3 多因素logistic回归! Y: ]' @% {& b9 G* o: p0 J (10) y3(time) =a 单因素cox回归 4 S/ y( M% D @(11) y3(time) = a b c x1 x2 x3 多因素cox回归$ }/ ~7 O+ m% X' S
: Z3 O: h& W7 D8 @+ a
1-7采用SAS的一般线性模型GLM都能实现,而1-9采用SAS的广义线性模型GENMOD都能实现,具体验证详见后面举例 3 Z: S; N0 I& n H3 O' G0 g; u: i8 V5 P( t8 G5 F
再次回到开始的问题:掌握上述的基本思路后,因为因变量为连续变量,所以采用线性模型肯定是对的。如果因变量可以认为是正态的,那采用一般线性模型是合理的。所以现在的关键问题是:如果调整多个变量(包含分类和连续变量)后看不同分组间因变量(连续变量)是否仍有差异时,能否再称为协方差分析?我目前认为应该是可以的,但是事实上我们遇到这种情况后,并不再去强调它是协方差的思想,而只是回到线性模型分析的最初的起点,也即是检查残差是否符合线性的基本条件即可。; O3 x, B/ b. L; c _. m" [
2 }0 ^( a2 a9 M/ _% Q但是现实中,我们在使用GLM解决前面遇到的类似问题时,只是简单地用了,而很多时候我们都没有认真去检验残差是否符合这个条件,这可能是我们滥用GLM的表现之一,因为我们更多只关注模型的参数是否有意义,而不去关心对结果“无关紧要”的前提条件。 ' i/ N. T; {* L5 d' ] Y: Y* _+ U, C5 T# h1 q- M
再次思考一个问题,上述列举的1-7模型,在GLM中并没有特定的选项指定是哪一种模型,而采用一种表达方式。由此,可以进一步深入概括一句话,GLM模型,对于上述列举的1-7模型并没有本质区别,唯一的区别只是模型中自变量的属性和数量不同。但是我们对1-7模型的叫法却不相同。而其原因是我们对事物的认识是一个由浅到深的过程,之前我们认为他们是不同的7件事情,随着认识的加深,发现原来这些问题可以用一个方式表达出来。而SAS的GENMOD则更能说明这一问题。现在还没有一个模型能把上述模型1-11用一种表达方式表示,但是COX回归在抛开基线生存函数之后剩下的部分也是线性模型,所以说不定哪天真的能够把上述所有模型用一种表达方式表示出来。到时候更应该相信人们对事物的认识绝对是一个由浅到深的过程啦。! G& i- [7 u' Y& v
' r1 g/ n) B0 f附:GLM与GENMOD在协方差分析结果的比较 - t" b! a) F9 M data drugtest; + c. o8 `3 M0 H% c1 q
input Drug $ PreTreatment PostTreatment @@; % N* y, Z9 W. `% a2 G, q9 h+ x
datalines; + R8 [8 y! z! Z3 j
A 11 6 A 8 0 A 5 2 A 14 8 A 19 11 8 c. ?' \! _# A) \
A 6 4 A 10 13 A 6 1 A 11 8 A 3 0 / w: M+ [% J0 Z# u8 ?8 w$ @
D 6 0 D 6 2 D 7 3 D 8 1 D 18 18 D7 p& V- k6 @" }, C
D 8 4 D 19 14 D 8 9 D 5 1 D 15 9 9 E2 _# S, Z$ L% C, c4 x F 16 13 F 13 10 F 11 18 F 9 5 F 21 23 0 G- q0 J2 I7 G( j& p F 16 12 F 12 5 F 12 16 F 7 1 F 12 20 8 h* m x8 A0 ~0 v1 ]: k
; % x& T! j w Q' h+ t' w
3 r; z3 J0 @2 u3 ?0 n1 `% p) E; g5 Y
proc glm; & U0 Y0 @) w2 R; O
class Drug; 0 n) F% M! m! p model PostTreatment = Drug PreTreatment / solution; 2 E% o7 v5 a4 Y& g' w% U0 A0 q7 `% M
lsmeans Drug / stderr pdiff cov out=adjmeans; / n7 n, n2 \ l9 h& k- d$ j run; 6 v4 L' B- w. x( ^
4 {/ i) D: h0 { n proc genmod data=drugtest; ! ]8 u3 N& |* {: k% z% U
class Drug; : y0 n; w2 `' f2 ^6 ^ N% ~ model PostTreatment = Drug PreTreatment / dist=NOR link=ID obstats type1; ) `7 m, ~/ n M+ z run; ! _( s; V! a7 r
# t7 x' Z+ ~' h3 ~8 u6 w
proc print data=adjmeans; + | g! H K P" }$ o
run;3 J! }! B: K2 u' |7 I1 c
, C0 ?+ C' n% n2 }4 {
- U7 H5 N/ Q' z; B/ z: S2 ?! Y
- r5 x- o4 m4 E; F+ A" p5 J