2009-02-08

回归与GLM的分析结果真的不同吗?

dylan @ 2009-02-04:

祝老师,您好!我在做回归分析时发现对于分类变量有2种处理方法,1是引入哑变量(或叫虚拟变量),2是在minitab中采用方差分析的一般回归模型,两种方法的结果是不一样的,究竟应该采用哪种方法才是合理的呢?还是都可以用?这2种方法的区别是什么呢?各有啥优缺点呢?期待您的答复。

庄主 @ 2009-02-08:

dylan说对了一半,即对于定类属性的自变量,历来有两种方法,一是直接将定类自变量进入方差分析,二是先将定类自变量转换为dummy variable(哑变量)、然后再进入回归分析。dylan提到的”一般回归模型“,应该指General Linear Model(GLM),其实是对方差分析的扩展,而不是对回归分析的扩展,所以译成“一般回归模型”容易引起误解,如熟悉回归分析的用户对于GLM的术语、思想等都会感到很陌生。

dylan的另一半结论是错的,上述两种方法(即方差或GLM与回归)的分析结果应该而且必须是一样的。如果你看到的结果不同,可能是你在两个分析中设置的模型不同(如回归中只有主影响而GLM中还包括主影响之间的交互关系)、更有可能是两种软件(如minitab与SPSS)或同一软件中GLM与回归的子程序对定类自变量组别之间的比较方法(技术术语叫做contrast coding)不同。以SPSS的GLM为例,其输出的Parameter Estimates(回归系数估计值)表以前是以effects-coding为内定值,其结果与回归中的哑变量(叫做dummy-coding,indicator-coding,simple-coding等)自然不同;但现在该表已经改成simple-coding,所以其结果与回归的哑变量结果一样了。我不用minitab,不知道它的内定contrast coding是什么,很可能是effects-coding。当然,如下例所示,即使我们在回归和GLM中采用了同样的contrast coding,还需要使用相同的reference group基准组),否则结果也可能不一样。

为了帮助理解上面的道理,我们来看一个实例。数据是SPSS软件随带的University of Florida graduate salaries.sav(存放在program files\spss之下)。我们先用SPSS的回归分析来检验以下模型:

Salary = b0 + b1Graduate + b2Gender + b3College

其实因变量Salary是该校毕业生的就业起薪,自变量之一Graduate是毕业年份(定距变量)、自变量之二Gender是性别(二分类的定类变量)、自变量之三College是专业(八分类的定类变量)。如前所说,回归之间需要先将定类转换成哑变量。 Gender的取值已经是0(女性)和1(男性)的哑变量了,其基准组是女性。College有八个类别,应该而且必须生成七个哑变量。在本例中,为了简便起见,我们保留原有的三个大专业(即毕业生较多者,包括1 Agricultural, 4 Business, 7 Engineering)而将其它五个小专业(2,3,5,6和8)合成一个“Others”专业,并相应生成C1、C2、C3三个哑变量,分别代表上述三个大专业,而将Others当作基准组(参见附录)。也就是说,回归分析中实际检验的模型中“College”被C1-C3三个哑变量代替了。回归结果见下表右边三列:

RegressionGLM
CoefficientUnstandardized BStd. ErrorParameterBStd. Error
Constant25244.0756.2Intercept25030.3819.1
Graduate1.879.606Graduate1.8790.606
Gender (Male=1, Female=0)213.6422.0[Gender=0]-213.6422.0
[Gender=1]0.
C1 (Agric=1, Others=0)-2428.5 787.5[College=1]-2428.5787.5
C2 (Business=1, Others=0)-1383.4788.1[College=2]-1383.4788.1
C3 (Engineering=1, Others=0)4690.4796.0[College=3]4690.4796.0
[College=4]0.
R Square
.179
R Square
.179
Adjusted R Square
.176
Adjusted R Square
.176
F
47.810
F
47.810
Regression DF
5
Corrected Model DF
5
Error DF
1094
Error DF
1094
Total DF
1099
Corrected Total DF
1099

我们对本例的主要兴趣在于比较回归和GLM结果之间的区别,而不是解读分析结果的社会意义。但是,为了便于讨论,还是先对回归系数的意义做些简单解读。Constant=25244.0指在控制了性别、毕业年份和专业的区别之后,该样本毕业生的平均起薪为25244美元;每早毕业一年,起薪高1.879元(虽然显著、但没什么实际意义);男性比女性平均高213.6元(但因Std Error很大而并不显著);C1表明Agricultural专业比Others低2428.5元(显著);C2表明Business专业比Others低1383.4元(但并不显著);C3表明Engineering比Others高4690.4元(很显著,还是读工科好)。上述模型用了5个自由度(毕业年份、性别和三个专业),共解释了毕业生起薪之间差异的17.6%,符合“多”(剩余很多自由度)、“快”(一步到位)、“好”(模型的解释力不错)、“省”(只用了千分之五的自由度)原则。

好了,我们来看看GLM的结果(上表右三列)。与回归结果相比,GLM的有些术语不同(如用Intercept而不是Constant来指常数),而且也将基准组列在表内(因为基准组没有参数,所以都是0)。后者有其好处,提醒读者每个定类变量中什么是基准组。左右两边相比,除了一处之外,所有的参数(系数、标准误差、R平方、F值、各种自由度)全部一模一样!其原因首先归功于SPSS对GLM的修改(其实这么做是方便了“回归派”弟子但对“方差派”是不恭的)。其次也与我碰巧(其实是有意的)选对和选错基准组有关。

先说选对的地方:我在将College合成四个组之后,将第4组Others定为基准组,所以回归中用了C1,C2,C3、而没有用C4(C4从头到尾没有用到,放在那里是留给哪位有兴趣者用来替换C1-C3中的任意一个),这正好与GLM的内定选择(组别数值最大者)相一致。

现在来看选“错”的地方:原始数据Gender中男性=1、女性=0,在回归中,取0的是基准组,当我们得到Gender的回归系数为正值(213.6)时,我们知道这说明研究组(男性)高于基准组(女性)。然后,在GLM中,男性被当作基准组(因为1大于0),所以在其结果中,Gender=0的参数为-213.6而Gender=1的参数为0(提醒我们后者为基准组)。回归和GLM的参数值相同而符合相反,就是因为不同的基准组在作怪。当然,我可以在做GLM时将Gender的男女取值对换,使得两个分析结果完全一样。我故意不做这一步,以显示选对基准组的重要性。

最后总结一下:回归与GLM在本质上是一样的,但在操作上和输出结果上有所不同。两者不存在孰优孰劣,完全取决于各自原有的习惯和手头研究问题的需要。我对回归更熟悉,所以一般用回归。但如果遇到大部分自变量都是定类数据时,也会转到GLM上。当然,如果遇到多个相关的因变量,回归无法做,GLM就是一种很好的选择。我在写Zhu & He (2002) Communication Research 29, pp. 466-495 那篇文章时,就是用GLM做的,但考虑(推测)读者多半更熟悉回归,所以在报告结果时,花了一番心血来展示四个组之间的差别,时至今日我还不能肯定那中报告方法是帮助还是混淆了读者。

附录、SPSS指令(其中大写字母为命令、小写字母为变量名)

GET FILE='C:\Program Files\SPSS\University of Florida graduate salaries.sav'.

RECODE college (1=1)(4=2)(7=3)(else=4)
/college (1=1)(else=0) into c1
/college (2=1)(else=0) into c2
/college (3=1)(else=0) into c3.
VALUE LABELS college 1 'Agricultural' 2 'Business' 3 'Engineering' 4 'Others'.
FREQ college c1 c2 c3.

REG DEP=salary/ENTER graduate gender c1 c2 c3.

GLM salary BY gender college WITH graduate/PRINT=parameter/DESIGN graduate gender college.

2 comments:

Keykure said...
This comment has been removed by the author.
Keykure said...

庄主您好,这个帖子与我现在碰到的问题正好非常相似,所以我有个问题想请交,还请庄主不吝赐教。
我分析了下你举例用的数据“University of Florida graduate salaries.sav”,假如数据中gender对start salary 有显著影响,而两组(F/M)的数据分别是469/631,这种数目不相等的分组数据会对GLM分析的结果有影响吗?
实际情况是我的数据中F:34/M:17,除了gender还有两个factors(age, volume),而volume本身有显著性别差异,这种情况下要分析gender/age/volume对最后因变量Y的影响,我该怎么进行数据分析?我非常担心样本容量本身不大,而且gender两组数目差距又很大的情况下,GLM是否还适用?