a8 _; |1 c) E; N通过跟别人交流之后,有一句话非常受用:线性模型其实最重要的不在于用的方差分析还是协方差分析,而主要是检验残差是否符合线性的几个条件。 # K3 q5 j. S8 k% s: y+ S! d . P' W" E+ }$ w1 g U受到该启发后,认真再复习GLM的相关资料,得到更加重要的总结如下(来自高惠璇SAS/STAT软件使用手册,实际是SAS8.2的User's guide的中文版,但是目前SAS 9.2,9.3的User's guide关于GLM模型的介绍中已经删去了这么经典的总结,实在可惜,倒让人看不到GLM的真正长处了): 2 x- `5 v6 \; b5 s1 o如果X1-X3,Y1-Y2为连续性变量,Y3为分类变量,a-c为分类变量,time为时间变量,目前我们熟悉的模型可以简单概括如下:6 o% V4 ?: T( ] (1) y1= x1 简单回归 % x/ f( g: Y! Q* {, d$ c(2) y1= x1 x2 x3 多重回归(multiple regression). I( I1 A0 I- w% @2 }$ d (3) y1 y2=x1 x2 多元回归(multivariate regression) / `7 D- w) ~$ ^) W* X7 J4 d(4) y1= a 单因素方差分析 ) v) G$ n: y: E9 h3 Y(5) y1= a b (析因设计的)主效应分析# M: t3 w8 }4 ?5 u/ }. @ v! U (6) y1= a b a*b (析因设计的)主效应加交互项分析% U6 W0 y2 p# K. ?3 L (7) y1= a x1 协方差分析: y) B0 [! l* s( ]/ _* {# q (8) y3= a 单因素logistic回归 8 I/ I5 m% ]3 w7 s- ](9) y3= a b c x1 x2 x3 多因素logistic回归 7 b% s) y+ f" [$ f/ [& X6 a+ |1 F7 o(10) y3(time) =a 单因素cox回归 ! A4 w: `6 _3 R- t! K(11) y3(time) = a b c x1 x2 x3 多因素cox回归; y; V; B0 g, c% u M
) }- x7 y P) r8 @4 u' R
1-7采用SAS的一般线性模型GLM都能实现,而1-9采用SAS的广义线性模型GENMOD都能实现,具体验证详见后面举例/ a- b J" p9 M) |9 T+ p# B
" p B! v4 N9 w* K0 v再次回到开始的问题:掌握上述的基本思路后,因为因变量为连续变量,所以采用线性模型肯定是对的。如果因变量可以认为是正态的,那采用一般线性模型是合理的。所以现在的关键问题是:如果调整多个变量(包含分类和连续变量)后看不同分组间因变量(连续变量)是否仍有差异时,能否再称为协方差分析?我目前认为应该是可以的,但是事实上我们遇到这种情况后,并不再去强调它是协方差的思想,而只是回到线性模型分析的最初的起点,也即是检查残差是否符合线性的基本条件即可。$ |/ @6 t1 \& T% \& y! V Y
2 h" R1 S& `& y d但是现实中,我们在使用GLM解决前面遇到的类似问题时,只是简单地用了,而很多时候我们都没有认真去检验残差是否符合这个条件,这可能是我们滥用GLM的表现之一,因为我们更多只关注模型的参数是否有意义,而不去关心对结果“无关紧要”的前提条件。 ) |2 P! o, I9 V) b: F 0 R, y# Y/ I/ l$ [1 c再次思考一个问题,上述列举的1-7模型,在GLM中并没有特定的选项指定是哪一种模型,而采用一种表达方式。由此,可以进一步深入概括一句话,GLM模型,对于上述列举的1-7模型并没有本质区别,唯一的区别只是模型中自变量的属性和数量不同。但是我们对1-7模型的叫法却不相同。而其原因是我们对事物的认识是一个由浅到深的过程,之前我们认为他们是不同的7件事情,随着认识的加深,发现原来这些问题可以用一个方式表达出来。而SAS的GENMOD则更能说明这一问题。现在还没有一个模型能把上述模型1-11用一种表达方式表示,但是COX回归在抛开基线生存函数之后剩下的部分也是线性模型,所以说不定哪天真的能够把上述所有模型用一种表达方式表示出来。到时候更应该相信人们对事物的认识绝对是一个由浅到深的过程啦。4 a" G4 d2 g: I& t* w. z
# E, i! P3 F; |; B附:GLM与GENMOD在协方差分析结果的比较 & Q4 ^# u+ `! B$ ] data drugtest; % A9 k8 r6 k. p input Drug $ PreTreatment PostTreatment @@; 7 m- u1 X; H2 ]. o& O8 m datalines; & V! M( t& O8 ] q/ H g8 |$ W A 11 6 A 8 0 A 5 2 A 14 8 A 19 11 7 e7 D" f: j) T! h" L
A 6 4 A 10 13 A 6 1 A 11 8 A 3 0 + v! c# `$ `" n) |" S D 6 0 D 6 2 D 7 3 D 8 1 D 18 18 & w$ y* z& `/ O H! o/ Y$ o
D 8 4 D 19 14 D 8 9 D 5 1 D 15 9 ! m3 w2 t! K. U o+ z6 d& `9 B
F 16 13 F 13 10 F 11 18 F 9 5 F 21 23 0 ~6 \9 v! q) n
F 16 12 F 12 5 F 12 16 F 7 1 F 12 20 8 i. l& n. P7 U& E# ^( v
; 7 D: F2 |1 P- j+ \. r: g ! O+ N% D9 ^3 A i" H proc glm; 8 `8 z- I: s) G; r K5 a+ t class Drug; 1 D3 _$ a- r/ r. n" x5 u% t
model PostTreatment = Drug PreTreatment / solution; 7 k7 t( M9 e: K# ?; ~5 m( `
lsmeans Drug / stderr pdiff cov out=adjmeans; 6 x2 o( J0 l! z# T run; 3 G. ]' h4 w7 D; u4 n; c- D: [ * L# }- T3 D% b9 b- G; s/ ]+ z proc genmod data=drugtest; / ^' d! t: k4 s. u
class Drug; ; q& u( i y3 C3 n
model PostTreatment = Drug PreTreatment / dist=NOR link=ID obstats type1; " S' H1 u: y/ U, f" G5 |6 ~9 A
run; % l( S' H; e% t& d) b
% B' {$ t& _8 P& H* S5 t proc print data=adjmeans; 1 k% Z' G4 b. A run; % V9 E$ r) O+ A3 ~+ \0 A9 A7 f& O7 y. X4 }- n" s0 D2 A
$ n- \, e- _+ r $ F8 g# n- K3 P" m3 O+ E* [& M. P! W