最近遇到一个问题,如果因变量为一个连续变量(如胰岛素水平),主要考察的变量为分组变量(如正常血糖组,前糖尿病组,糖尿病组三组),现在的目的是想看调整多种变量(包括多个连续性变量和分类变量)后,胰岛素水平是否一致。 $ x8 [# }. _6 x9 Q ; @2 U6 i+ ?8 D7 j " u- I: R- E8 I: g一开始的思路想到的是采用GLM进行协方差分析来解决。# k- h6 }7 n* @
, i% |$ G& E& K& _) ^
但是有觉得似乎不是很对,因为经典的协方差分析通常只考虑一个连续变量(协变量)和一个分组变量,同时协变量和分组变量只有不存在交互的时候(经典协方差分析的前提)才能使用协方差分析。* ~$ y ?: _- r' L2 m( d# }: T
针对我目前的问题,如果想调整多个连续性变量和分类变量,这种方法能否再叫协方差分析?如果可以认为是协方差的思想,用不用检验协方差分析的前提(如协变量与分组变量之间的交互)?多个连续性变量和分类变量存在时,该前提应该怎么检验? ! @- N$ Z! \0 k5 g* Y8 n9 H$ o4 j 5 \. Y+ k6 q$ z8 b+ O9 O通过跟别人交流之后,有一句话非常受用:线性模型其实最重要的不在于用的方差分析还是协方差分析,而主要是检验残差是否符合线性的几个条件。 2 j A( ]: \. F& p# x) \$ d. `! t# t1 P% m: t0 d' `" O
受到该启发后,认真再复习GLM的相关资料,得到更加重要的总结如下(来自高惠璇SAS/STAT软件使用手册,实际是SAS8.2的User's guide的中文版,但是目前SAS 9.2,9.3的User's guide关于GLM模型的介绍中已经删去了这么经典的总结,实在可惜,倒让人看不到GLM的真正长处了):. w3 O G$ l3 _: k2 z 如果X1-X3,Y1-Y2为连续性变量,Y3为分类变量,a-c为分类变量,time为时间变量,目前我们熟悉的模型可以简单概括如下:8 `- B6 _3 o( f (1) y1= x1 简单回归 + y7 k. r, g2 ?. Z1 `3 E6 m(2) y1= x1 x2 x3 多重回归(multiple regression)0 `/ a, O' ^5 X& i c e, L/ T. [ (3) y1 y2=x1 x2 多元回归(multivariate regression)3 }* A L/ D8 V$ a* b7 p$ t (4) y1= a 单因素方差分析 3 f. l7 W( F& o8 W9 L(5) y1= a b (析因设计的)主效应分析. K+ i7 s5 a- a! R& S1 | (6) y1= a b a*b (析因设计的)主效应加交互项分析6 w, W5 r( h! P, |; L/ ` F (7) y1= a x1 协方差分析1 w) X5 o* J- q7 s2 a, d (8) y3= a 单因素logistic回归 - V, C+ F# R$ i' D(9) y3= a b c x1 x2 x3 多因素logistic回归 $ \2 k- X0 o/ s9 s(10) y3(time) =a 单因素cox回归 . R6 R7 i u2 T% z) m9 t* G( |" |(11) y3(time) = a b c x1 x2 x3 多因素cox回归 , V* V* \, r4 |2 c2 P 4 A; ^* U. @. N6 S" L+ C) n$ u1-7采用SAS的一般线性模型GLM都能实现,而1-9采用SAS的广义线性模型GENMOD都能实现,具体验证详见后面举例" r2 ?. V) ?# E# o, z! p7 G8 ^
D% B* ^/ s) `0 I1 q7 C; t- @4 D再次回到开始的问题:掌握上述的基本思路后,因为因变量为连续变量,所以采用线性模型肯定是对的。如果因变量可以认为是正态的,那采用一般线性模型是合理的。所以现在的关键问题是:如果调整多个变量(包含分类和连续变量)后看不同分组间因变量(连续变量)是否仍有差异时,能否再称为协方差分析?我目前认为应该是可以的,但是事实上我们遇到这种情况后,并不再去强调它是协方差的思想,而只是回到线性模型分析的最初的起点,也即是检查残差是否符合线性的基本条件即可。 4 L9 x6 n3 b5 c. K! n8 M' v5 `" o( M
但是现实中,我们在使用GLM解决前面遇到的类似问题时,只是简单地用了,而很多时候我们都没有认真去检验残差是否符合这个条件,这可能是我们滥用GLM的表现之一,因为我们更多只关注模型的参数是否有意义,而不去关心对结果“无关紧要”的前提条件。8 H* k0 k. R6 i0 j( _
3 M6 V% v S! ~# k
再次思考一个问题,上述列举的1-7模型,在GLM中并没有特定的选项指定是哪一种模型,而采用一种表达方式。由此,可以进一步深入概括一句话,GLM模型,对于上述列举的1-7模型并没有本质区别,唯一的区别只是模型中自变量的属性和数量不同。但是我们对1-7模型的叫法却不相同。而其原因是我们对事物的认识是一个由浅到深的过程,之前我们认为他们是不同的7件事情,随着认识的加深,发现原来这些问题可以用一个方式表达出来。而SAS的GENMOD则更能说明这一问题。现在还没有一个模型能把上述模型1-11用一种表达方式表示,但是COX回归在抛开基线生存函数之后剩下的部分也是线性模型,所以说不定哪天真的能够把上述所有模型用一种表达方式表示出来。到时候更应该相信人们对事物的认识绝对是一个由浅到深的过程啦。# K% S' {& H; Q S! x, W* ?
8 {+ C1 s3 x' U4 I2 u- i附:GLM与GENMOD在协方差分析结果的比较 * {9 U, |0 W2 T- x' T" b# d data drugtest; ; o. P* E, a5 k+ ?0 i
input Drug $ PreTreatment PostTreatment @@; ! f, m2 U8 q& d0 x$ E datalines; $ i" E9 b+ C) u4 F A 11 6 A 8 0 A 5 2 A 14 8 A 19 11 . v' I6 I7 d* J9 I
A 6 4 A 10 13 A 6 1 A 11 8 A 3 0 . [5 [ g- D! X L! _ D 6 0 D 6 2 D 7 3 D 8 1 D 18 18 # X4 A% e2 N: W, I8 e: _# l5 x D 8 4 D 19 14 D 8 9 D 5 1 D 15 9 ! q7 W! k0 ~% r7 t" W# B
F 16 13 F 13 10 F 11 18 F 9 5 F 21 23 ! F: S! U+ b0 b F 16 12 F 12 5 F 12 16 F 7 1 F 12 20 ! L1 c; `# D, n$ ?# y
; 1 n. q8 P, h& _6 K# ^2 q O1 F1 n# u2 I; D2 S* x: G
proc glm; 7 x5 {8 {; h7 G4 @. C2 d
class Drug; 9 C+ n* ]' Z' l6 Z5 }/ w
model PostTreatment = Drug PreTreatment / solution; 2 f" `% C9 }3 n
lsmeans Drug / stderr pdiff cov out=adjmeans; ' Z. M" Z2 Q' A; q; ?; O run; 6 \& {' S% Z7 }' \8 N' N
# E6 {1 d& ?% F! }9 _* l S( c9 x7 T proc genmod data=drugtest; 6 O$ ~: N6 q) i5 I# M c
class Drug; ) B6 N: P) X7 q1 O; g* d0 i) P model PostTreatment = Drug PreTreatment / dist=NOR link=ID obstats type1; " m, t6 I3 y- X# \' R5 {/ A! W8 ] run; ! s$ {& `, U0 x% L5 c
2 i7 Z7 V4 c! }/ y
proc print data=adjmeans; + Q' r$ s' W& n1 {; Z+ _2 r
run; ) k0 g: t3 e! Z/ Q, d& _# r( d F! x4 B; |
" B! T- f/ j9 X