GEE 和 GLM 是否估计相同的系数?

机器算法验证 回归 广义线性模型 估计 广义估计方程 集群样本
2022-04-06 19:06:22

在 GLM 中,似然方程仅通过均值和方差取决于假设的分布。似然方程是

in(μiηi)yiμiVar(Yi)xij=0,(j=1,...,p)

在拟似然情况下,我们只是让成为平均值的某个函数。对于 GEE,响应扩展为多变量,具有假设的相关结构,具有准似然方程。Var(Yi)=v(μi)

这是否意味着 GEE 和 GLM 将具有相同的参数(例如)估计(人口平均),唯一的区别是 GEE 案例中的正确标准误差(假设聚集数据?)β

如果估计的系数不同,那么有什么区别?

3个回答

是的。GEE 和 GLM 确实会有相同的系数,但标准误差不同。要检查,请在 R 中运行一个示例。我从Kleinbaum 等人的第 5 章应用回归分析和其他多变量方法的第 25 章中获取了这个示例。al(只是因为它在我的桌子上并参考 GEE 和 GLM):

library(geepack)
library(lme4)

#get book data from 
mydf<-read.table("http://www.hmwu.idv.tw/web/bigdata/rstudio-readData/tab/ch25q04.txt", header=TRUE)
mydf<-data.frame(subj=mydf$subj, week=as.factor(mydf$week), fev=mydf$fev)
#Make 5th level the reference level to match book results
mydf$week<-relevel(mydf$week, ref="5")

#Fit GLM Mixed Model
mixed.model<-summary(lme4::lmer(fev~week+(1|subj),data=mydf))
mixed.model$coefficients

                Estimate Std. Error     t value
(Intercept)  6.99850  0.2590243 27.01870247
week1        2.81525  0.2439374 11.54087244
week2       -0.15025  0.2439374 -0.61593680
week3        0.00325  0.2439374  0.01332309
week4       -0.04700  0.2439374 -0.19267241

#Fit a gee model with any correlation structure.  In this case AR1
gee.model<-summary(geeglm(fev~week, id=subj, waves=week, corstr="ar1", data=mydf))
gee.model$coefficients

            [Estimate   Std.err         Wald  Pr(>|W|)
(Intercept)  6.99850 0.2418413 8.374312e+02 0.0000000
week1        2.81525 0.2514376 1.253642e+02 0.0000000
week2       -0.15025 0.2051973 5.361492e-01 0.4640330
week3        0.00325 0.2075914 2.451027e-04 0.9875090
week4       -0.04700 0.2388983 3.870522e-02 0.8440338][1]

更新

正如 Mark White 在他的评论中指出的那样,我以前确实适合“单级”混合效果 GLM。由于您没有指定是否需要“固定效果”或“随机”效果 GLM 模型,我只选择了“随机”,因为这是我选择的书中的模型。但事实上,Mark 是正确的,系数在多级模型中不一定一致,之前有人对这个问题提供了一个很好的答案。供您参考,我在下面添加了一个“固定”效果 GLM 模型,使用lm.

#Fit Traditional GLM Fixed Effect Model (i.e. not Random effects)
glm.fixed<-summary(lm(fev~week, data=mydf))
glm.fixed$coefficients
            Estimate Std. Error     t value     Pr(>|t|)
(Intercept)  6.99850  0.2590243 27.01870247 7.696137e-68
week1        2.81525  0.3663157  7.68531179 7.287752e-13
week2       -0.15025  0.3663157 -0.41016538 6.821349e-01
week3        0.00325  0.3663157  0.00887213 9.929302e-01
week4       -0.04700  0.3663157 -0.12830465 8.980401e-01

请注意每个模型中输出的第一列和第二列。它们的系数是同一性的,但标准误差不同。

您还添加了一条评论,询问“当我们选择非线性链接函数时,情况是否仍然如此?” 首先请注意,这是一个不同的问题,因为非线性链接函数通常不是广义线性模型,而是广义线性模型。在这种情况下,系数不一定匹配。这是R中的一个例子:

#Fit Generalized Linear Mixed Effects Model with, say, Binomail Link
nlmixed.model<-summary(lme4::glmer(I(mydf$fev>mean(mydf$fev))~week+(1|subj), family="binomial", data=mydf))
nlmixed.model$coefficients

#Fit GEE model with, say, Binomial Link
nlgee.model<-summary(geeglm(I(mydf$fev>mean(mydf$fev))~week, id=subj, waves=week, family="binomial", data=mydf))
nlgee.model$coefficients

这完全取决于您的意思和假设。

如果您使用独立工作相关性,glm 和 GEE 中的参数估计将是相同的,只有标准误差可能不同β^

如果您使用另一个工作相关性,参数估计将不相同。如果E[ Y_线性模型(或具有链接函数的等价广义线性模型)。也就是说,如果边际模型针对过去和未来正确指定,他们将估计相同的参数,而不仅仅是当前(见这个问题)。β^β

E[Yit|Xi=xi]=xitβ
xx

如果只有是真的,那么基础参数将会不同(除了对角线工作相关矩阵)。发生的情况是对于相关,并且使用非对角工作相关矩阵会带来类似到估计方程的期望中,其中是工作协方差矩阵的逆矩阵的元素。

E[Yit|Xit=xit]=xitβ
YitμitXisst(Yitμit)XisVstVst(s,t)

甚至也很可能不是真的,在这种情况下,参数和估计值将再次取决于工作相关矩阵. 例如,对于一个单位的 差异,人与人之间和人内部吸烟者和非吸烟者之间的差异可能大于开始或停止吸烟的影响,要么因为持续时间很重要,要么因为吸烟者和非吸烟者之间存在其他差异。不同的工作相关性结构将不同地衡量人与人之间和人内的对比。本文讨论示例

E[Yit|Xit=xit]=xitβ
YX

我认为可能不会。

估计的方程在其公式中取决于工作协方差矩阵的逆。如果我们改变它,β系数也会改变,因为整个方程会改变。

而在 GLM 中,工作相关性不适用——它是固定的、独立的。

并且可以显示:

对于独立性,贝塔是相同的。请注意,GEE 报告从 GLM 获取的原始数据,因此我们可以立即比较 GLM 和 GEE 的输出:

> coef(summary(gee(Reaction ~ Days, id = Subject,data = sleepstudy,corstr = "independence")))
Beginning Cgee S-function, @(#) geeformula.q 4.13 98/01/27
running glm to get initial regression estimate
(Intercept)        Days 
      251.4        10.5 
            Estimate Naive S.E. Naive z Robust S.E. Robust z
(Intercept)    251.4       6.61   38.03        6.63    37.91
Days            10.5       1.24    8.45        1.50     6.97

但不是,当我们改变结构时。它们很接近,但并不完全相同。

> coef(summary(gee(Reaction ~ Days, id = Subject,data = sleepstudy,corstr = "AR-M", Mv=1)))
Beginning Cgee S-function, @(#) geeformula.q 4.13 98/01/27
running glm to get initial regression estimate
(Intercept)        Days 
      251.4        10.5 
            Estimate Naive S.E. Naive z Robust S.E. Robust z
(Intercept)    253.5      10.71   23.67        6.36    39.88
Days            10.5       1.67    6.25        1.44     7.27

或者

> coef(summary(gee(Reaction ~ Days, id = Subject,data = sleepstudy,corstr = "AR-M", Mv=2)))
Beginning Cgee S-function, @(#) geeformula.q 4.13 98/01/27
running glm to get initial regression estimate
(Intercept)        Days 
      251.4        10.5 
            Estimate Naive S.E. Naive z Robust S.E. Robust z
(Intercept)    253.8      10.83   23.45        6.45    39.34
Days            10.4       1.57    6.65        1.46     7.18
> 

或者

> coef(summary(gee(Reaction ~ Days, id = Subject,data = sleepstudy,corstr = "unstructured")))
Beginning Cgee S-function, @(#) geeformula.q 4.13 98/01/27
running glm to get initial regression estimate
(Intercept)        Days 
      251.4        10.5 
            Estimate Naive S.E. Naive z Robust S.E. Robust z
(Intercept)   252.04       7.33   34.40       10.09    24.97
Days            9.78       1.02    9.62        2.64     3.71