01 解决何种问题

在临床研究中,经常会比较两种治疗方式对患者结局的影响,并且多次测量结局。例如为了研究两种降血糖药对血糖的控制结果是否存在差异,研究者会在两组人群服药后不同的时间点记录血糖值,然后评价降血糖结果。

为评价抗癫痫药物的作用,观察并记录两组不同用药的人群在8周内,每2周发病的次数,分析该药物是否有抑制癫痫发作的作用。

另外,有的研究只收集一个时间点的数据,但一个研究者会提供多个部位的数据点,例如研究者想评价冠心病患者在冠脉搭桥术后应用阿司匹林是否能有效降低患者血管再堵塞的风险,而一个患者可能在同一次手术中对多条冠脉动脉进行搭桥。

这类数据存在相关性,不满足线性模型和广义线性模型所要求的的独立性,且计数类数据,不满足正态性,怎么办?

02 方法说明

广义估计方程GEE是在传统的模型基础上对相关性数据做了校正,可以拟合Logistic回归、泊松回归、一般线性回归等回归模型。专门用于处理这种重复测量资料且非独立,不同于重复测量方差分析(要求结局变量为连续性数据且满足球形假设检验),既可以处理连续性结局变量也可以处理分类型结局变量,其利用连接函数将多种分布的因变量拟合为相应的统计模型。

该模型的一个重要概念是作业相关矩阵,表示因变量的各次重复测量值两两之间的相关性的大小,常用Ri(a)表示,是个t*t维的对角阵,t是总测量次数,其第s行t列的元素表示,Yis和Yit的相关,近似的表示个体之间平均的相关。常见的形式有这几种,独立,等相关,相邻相关,自相关和不确定相关。

其中独立是指同一患者贡献的各数据点数据彼此独立,无相关性。等相关是各数据点的相关性均相等,相邻相关是仅临近的M+1个数据有相关,自相关是用于不同时间点的数据,相邻时间点相关性最大,时间间隔越大相关性越小,不确定相关是不限定相关结构,由数据本身决定。

GEE模型估计涉及到的数学原理比较复杂,读者可参考相关文献。下面讲述GEE在R中的操作。

首先我们以第三个案例作为例子,讲解在R中的操作。

03 加载数据

表中变量的含义:

04 R代码

library(gee)
dt <- read.csv('C:GEE.csv',stringsAsFactors = F)
fit <- gee(Outcome~Treatment+Sex,id=id,data=dt,corstr = 'exchangeable',family = 'binomial')
summary(fit)##返回结果
##Model:
## Link:                      Logit
## Variance to Mean Relation: Binomial
## Correlation Structure:     Exchangeable##Call:
##gee(formula = Outcome ~ Treatment + Sex, id = id, data = dt,
##    family = "binomial", corstr = "exchangeable")
##Summary of Residuals:
##       Min         1Q     Median         3Q        Max
##-0.7573351 -0.4696669  0.2426649  0.4005292  0.5759983
##
##Coefficients:
##               Estimate Naive S.E.    Naive z Robust S.E.   Robust z
##(Intercept)   1.1381242  0.5546159  2.0520945   0.3807494  2.9891690
##Treatment    -1.0767769  0.5992072 -1.7970025   0.5388111 -1.9984310
##Sex          -0.3677144  0.5885404 -0.6247904   0.5868946 -0.6265424
##
##Estimated Scale Parameter:  1.089952
##Number of Iterations:  2
##
##Working Correlation
##           [,1]       [,2]       [,3]
##[1,]  1.0000000 -0.1617976 -0.1617976
##[2,] -0.1617976  1.0000000 -0.1617976
##[3,] -0.1617976 -0.1617976  1.0000000

05 结果解说

1.R中加载gee包,用该包中的gee()函数建模。

2.该数据集有39个观测值,每名患者贡献的数据量不一致,2号患者对两根血管进行搭桥手术,1号患者只对一根血管行搭桥手术。

3.gee()构建模型的写法跟之前线性回归的写法是一样的,需要注意的是id用来设置数据集的标识变量,即观测个体,这里表示每个患者。corstr参数是指数据的相关结构,这里设置的是等相关,还可以设置其他类型。

4.返回的结果中#model是采用logit转换,对应的二分类。#coefficients表示系数估计,其结果解释和LR回归一致。Treatment的系数是-1.077,exp(B)为0.314,即OR值,说明术后使用阿司匹林的患者发生血管再堵塞的风险是使用安慰剂组的0.314倍,具有统计学意义,阿司匹林具有保护作用。而纳入性别变量的校正OR值是0.692。#working correlation是作业相关矩阵,对角线上都是1,因为选的是等相关,除了对角线上,其他相关系数都是-0.162。

再以一个结局为连续变量的案例作为例子,讲解在R中的操作。

06 R代码

library(gee)
head(warpbreaks)
## breaks wool tension
##1     26    A       L
##2     30    A       L
##3     54    A       L
##4     25    A       L
##5     70    A       L
##6     52    A       L
table(warpbreaks$wool,warpbreaks$tension)
##   L M H
## A 9 9 9
## B 9 9 9
##等相关
summary(gee(breaks~tension,id=wool,data=warpbreaks,corstr = 'exchangeable'))
#自相关
summary(gee(breaks~tension,id=wool,data=warpbreaks,corstr = 'AR-M',Mv=1))

##返回结果1
##Model:
## Link:                      Identity
## Variance to Mean Relation: Gaussian
## Correlation Structure:     Exchangeable ## coefficients:
##             Estimate Naive S.E.   Naive z Robust S.E.  Robust z
##(Intercept)  36.38889   3.069434 11.855246    5.774705  6.301428
##tensionM    -10.00000   3.910008 -2.557539    7.463905 -1.339781
##tensionH    -14.72222   3.910008 -3.765266    3.731952 -3.94491

##返回结果2
##Model:
## Link:                      Identity
## Variance to Mean Relation: Gaussian
## Correlation Structure:     AR-M , M = 1##Coefficients:
##             Estimate Naive S.E.   Naive z Robust S.E.  Robust z
##(Intercept)  36.41361   2.889306 12.602890    5.788146  6.291065
##tensionM    -10.09043   4.077388 -2.474730    7.513413 -1.342989
##tensionH    -14.72471   4.086060 -3.603646    3.758972 -3.917218

07 结果解读

1.table()函数观察数据集的基本结构,该数据集是R包中自带数据集。观察两种羊毛A和B分别在三种不同强度下,即L,M,H,对应低中高三种韧度,在纺织中崩断的次数(breaks)。每种羊毛有27个观测值,共计54个观测。

2.gee()构建模型的写法跟之前线性回归的写法是一样的,需要注意的是id用来设置数据集的标识变量,即观测个体,这里表示每种羊毛。corstr参数同上。

3.返回的结果1中#model是Identity表示原始数据没有进行任何转化,拟合线性回归模型。#coefficients表示系数估计,其结果解释和Lm回归一致,tensionM的系数是-10,相对于强度低L的羊毛,强度M要少断10次,tensionH的系数是-14.7,相对于强度低L的羊毛,强度H要少断14.7次。

4.返回的结果2是改变数据相关结构类型为自相关MR,此时一定要设置Mv参数,设置为1,对模型进行估计,可看到系数结果和等相关基本一致。

08 总结

GEE具有非常好的特性,既能处理连续型结局变量,又能处理分类型结局变量。它的优势在于:

1.建模稳定,即使设置的数据相关结构与实际有偏差,但在样本量足够大的时候,其的参数估计仍然具有无偏性。其自变量的系数估计准确性论证高于多水平模型。

2.充分利用资料信息。对于多次重复测量的数据,充分利用每次测量结果,减少信息损失。

09 更多阅读

文章在公粽号:易学统计

文章里的干货更多哟

欢迎交流,欢迎提问

r 函数返回多个值_R语言:广义估计方程(GEE)相关推荐

  1. r 函数返回多个值_R 技巧 | 绘制nomogram列线图的细节优化

    生活,有时候就需要些技巧~ 使用 nomogram 绘制列线图时,有个参数fun,输入计算特定时间点的生存函数,如果是多个时间点的话,则使用列表形式: If more than one transfo ...

  2. r 函数返回多个值_第四讲 R描述性统计分析

    在"R与生物统计专题"中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现.以从浅入深,层层递进的形式在投必得医学公众号更新. 在上一讲中,我们介绍了第三讲 R编程基础- ...

  3. geeglm函数R语言广义估计方程系数的置信区间计算

    转载 链接: https://www.codesd.com/item/confidence-interval-of-coefficients-using-the-generalized-estimat ...

  4. Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址      内存地址就是指针. ...

  5. C语言通过指针间接的实现函数返回多个值

    C语言通过指针间接的实现函数返回多个值 本例题中通过把指针作为函数参数来传递,依次达到改变变量的值的目的,最后实现一个函数返回两个变量的值 int *X,*X应该被看成一个整体来看,表示一个整形. # ...

  6. Python学习之函数返回多个值

    Python学习之函数返回多个值 问题的引出 Python中,一个函数能不能一次返回多个值? 在C语言中,函数最多返回一个值,如果要返回多个值,可以把这些值封装在一个结构体中.注意,C语言不允许函数返 ...

  7. c++中函数放在等号右边_如何从C或C++中的函数返回多个值?

    新程序员通常在寻找从函数返回多个值的方法.不幸的是,C和C++不允许直接这样做.但是幸运的是,通过一些巧妙的编程,我们可以轻松实现这一目标. 下面是从C函数中返回多个值的方法: 通过使用指针. 通过使 ...

  8. python学习笔记-day6-函数的延续【汉字转拼音模块,函数返回多个值,匿名函数,列表生成式,generator生成器,三元运算符】...

    继续来说函数的后续知识点,主要是函数返回多个值,匿名函数,三元运算符,算是比较小的知识点. 一.汉字转拼音模的使用 1.安装模块 #install xpinyin 2.如果使用 结果: 二.函数返回多 ...

  9. python函数返回多个值_python函数返回多个值的示例方法

    python可以返回多个值,确实挺方便 函数里的return只能返回一个值,但是返回类型是没是限制的 因此,我们可以"返回一个 tuple类型,来间接达到返回多个值". 例子是我在 ...

最新文章

  1. Linux进程虚拟地址空间
  2. 【错误记录】Flutter 界面报错 ( No MediaQuery widget ancestor found. | Scaffold widgets require a MediaQuery )
  3. java 实体类包含list 怎么取值_舅舅是面试官,偷偷告诉你们面试官最爱问的Java面试题...
  4. matlab无限循环怎么停下来,[求助] 关于matlab无限循环的问题
  5. poj 3275 Ranking the Cows 搜索
  6. python应用程序类型_python – 类型提示条件可变参数应用程序
  7. wps两列数据分别作为xy轴_0.4 秒,完成两列数据核对
  8. python递归必须要有_python如何递归生成树?
  9. [react] React v15中怎么处理错误边界?
  10. angular div 滚动条事件_DOM事件
  11. python多环境管理_怎样管理多个Python版本和虚拟环境
  12. 互联网公司大厂中厂小厂分别指哪些公司?
  13. 号码被标记,各平台取消方法
  14. C++实现FPS游戏辅助教程
  15. html超链接qq,超链接打开qq对话框
  16. 反向题在测试问卷信效度_检验问卷的信度和效度
  17. 演示固态硬盘装win11系统教程
  18. 世间安得双全法,不负如来不负卿
  19. Android支付接入(一):支付宝
  20. 《ASP.NET AJAX 应用剖析立即上手》推荐序!

热门文章

  1. 产品经理如何开好需求评审会
  2. Oracle update语句用法
  3. STM32中 1u 0u的含义
  4. JZ77 按之字形顺序打印二叉树
  5. setTimeout()和setInterval()的区别和转换
  6. .NET报错:所生成项目的处理器框架“MSIL”与引用“xxx”的处理器架构“AMD64”不匹配
  7. DO - varying
  8. 在思科模拟器Cisco Packet Tracer实现自反ACL
  9. 菜鸟的springboot项目图片上传及图片路径分析
  10. 风火家人:避风港湾;火泽暌:求同存异