其他

事件史分析:概述及Stata操作

2017-08-18 郑连虎 Tiger·Z 公共管理定量方法学习

点击上方蓝字,关注:

公共管理定量方法学习  微信公众号


早上,被邻居迎亲的锣鼓叫醒。要是以前,我兴许会冲下楼去,向新郎新娘要糖吃。只是昨天熬夜,彼时尚未清醒,这份兴致也就消失地无影无踪。看看表,六点半,不必再睡,倚着卧室的窗子听歌。发现自个儿挺喜欢罗威的“钢琴随笔”,就随便捡一首放这儿吧;喜欢的话,云村有专辑。

今天推“事件史统计分析方法”,这是前一阵子答应同学要写的。本期封面图片来自吴晓刚老师和他的博导Donald J. Treiman合作的论文“The Household Registration System and Social Stratification in China: 1955-1996”,用事件史分析方法讨论了户口转换(即“农转非”)的决定因素;对该论文感兴趣的读者可以戳本期左下方的“阅读原文”获取。

 

为什么要用“事件史分析”?

事件史分析方法(Event History Analysis,以下简称EHA)是一种小样本分析技术,指一系列研究事件的发生及其发生时间的统计方法,服务于对事件发生方式及其相关因素的研究。

这里的“事件”多种多样:生命的结束、机器的损坏、股票的崩溃、工作的终止、婚姻的结束、罪犯的被捕等等。这些事件都包含一些在特定时点上的定性变化,甚至一些尖锐的突变,而这些变化及其原因常常引起研究者的关注。

在不同的学科中,“事件史分析”有着不同的称呼:例如,在计量经济学中被称为“持续时间模型”;在生物或人口统计学中被称为“生存分析”;在工程学中被称为“失效时间分析”

与一般横贯统计研究方法不同,事件史分析采用纵贯数据,这样就能够很好地将随时间变化的动态变量纳入分析中;事件史分析的另一个优点,在于能够纳入和处理删截案例,从而避免信息的损失及由此产生的统计偏差。

这里需要说明一下,什么是“删截”:删截的主要概念是指那些在观察结束时事件尚未发生的案例,具体又分为“左删截”和“右删截”;通常的统计模型无法处理删截尤其是右删截的问题,因为事件“尚未发生”不等于“一定不会发生”;而EHA能有效地处理右删截的问题:当我们知道事件发生于观察结束以后但不知道实际发生时点时,就是“右删截”问题;例如,在高校学生中调查他们第一次性交时间(郭志刚,1999:p389)的观察,很多人还从未有过这样的经历,这就是右删截的例子。反之,当我们只知道时间发生时点T小于调查时间C但不知道小多少时,就是“左删截”问题。

图片:不同“删截”情形的讨论:事件C的全部过程完全观察到,在统计上没有问题(周雪光,P6)

总结一下,EHA考虑了时间,即事件何时发生或发生早晚的问题;EHA能有效地处理右删截的问题;EHA能处理时变变量:这就是为什么要用“事件史分析”的最主要原因

 

EHA:概念

学习事件史分析,要注意几组概念(李骏,2016):

1. 时间起点:它可以基于日历时间、年龄等,标志进入到某一事件的风险的时间起点。每个分析对象的时间起点可以相同,也可以不相同;

2. 风险集:它是在某一时间点上(或某一段时间内)所有可能经历某一事件的分析对象的集合;

3. 生存函数:它通常记为S(t),表示生存的时间超过时点t的概率。与生存函数密切相关的是累积分布函数,通常记为F(t),表示在时点t之前死亡的概率。两者的关系是:S(t) = 1-F(t);

4. 风险函数:它通常记为h(t),表示在一段时间内某一事件发生的风险。风险函数等于某段时间内死亡的概率除以从该段时间的起点开始的生存概率,或者说是某一事件在时间t尚未发生、在t和t+t之间发生的概率(即所谓的“瞬时风险”)。

5. 时变变量与非时变变量;

6. 单次事件与重复事件:前者是对每个研究对象来说事件只发生一次,例如死亡等;后者是对每个研究对象来说事件可发生多次,例如换工作等。

7. 单个事件与竞争事件:前者是指事件发生的类型只有一种,后者是指事件发生的类型有多种。

生存分析(survival analysis)中同样有几组概念需要注意:

1. 生存时间:是一个广义概念,泛指所关心的某现象的持续时间,即随访观察持续的时间,常用符号t表示。生存时间分为两种类型:完全数据complete data:指从观察起点到发生“死亡”事件所经历的时间,提供了观察对象确切的生存时间;截尾数据censored data:亦称截尾值或终检值,指从观察起点到发生非“死亡”事件所经历的时间;

2. 截尾:生存结局分为“死亡”与“截尾”两类,“死亡”是感兴趣的终点时间,其他终点事件或结局都归为截尾;

3. 死亡概率:表示单位时间段开始存活的个体,在该段时间内死亡的可能性;

4. 生存概率:表示单位时间段开始存活的个体,到该段时间结束时仍存活的可能性;

5. 生存率:表示观察对象经历tk个单位时间段后仍存活的可能性;

6. 生存曲线:生存时间为横轴,将各时点所对应的生存率连接在一起的曲线图,样本量小时生存曲线呈阶梯形,样本量足够大时,形成光滑的曲线;

7. 中位生存时间:是指50%观察对象能存活的时间;

 

EHA:模型

事件史分析方法根据时间数据性质(李骏,2016)的不同,分为连续时间模型和离散时间模型

连续时间模型是对“风险率(hazard/odds)”或其对数进行建模,根据对基准风险函数的不同假定,有不同的模型:

1.Exponential模型:假定风险率不随时间t而变化,而是一个常数,所以又称为constant hazard model。它的一个变体Piecewiseexponential model,是把时间t分成几段,每段内的风险率不随时间t而变化,但各段的那个常数可以不同;

2.Gompertz模型:在Exponential模型的基础上引入γ参数,对后者进行一般化。当γ=0时,风险率是一个常数;当γ>0时,风险率随时间t成比例单调增;当γ<0时,风险率随时间t成比例单调减;

3.Weibull模型:在Exponential模型的基础上引入p参数,对后者进行另一种形式的一般化。当参数p=1时,风险率是一个常数;当参数p>1时,风险率随时间t单调增;当参数p<1时,风险率随时间t单调减;

4. Log-normal& log-logistic模型:它假定风险率随时间t非单调增或非单调减;

5. Cox模型:Cox提出,也可以不考虑基准风险函数的具体形式,即不需要估计基准风险函数,而只关心自变量的影响效应或两个研究对象的风险率之比。也就是说,不管时间函数的具体形式如何,只要两条线之间平行,或成比例即可。Cox model是对以上所有模型的一般化,但它也同时假定风险率要成比例,所以也被称为proportionalhazard model;

如果时间t不是连续而是离散的,例如社会调查数据一般都是基于比较大的时间单位(年或月),就可以使用离散时间模型。它的主要原理是,先构建“人-记录”数据集,对每个人的每条记录构建非时变和时变变量(包括表示在每条记录中事件是否发生的因变量),再应用标准的logit模型。如果是单个事件,就用二项logit模型;如果是竞争事件,就用多项logit模型;

社会科学研究中,使用最广泛的两种事件史分析方法是用于离散时间数据的logit模型用于连续时间数据的Cox比例风险模型

下面就通过Stata操作实例,进一步了解用于离散时间数据的logit模型和用于连续时间数据的Cox比例风险模型:

 

logit模型Stata实例:职位晋升

演示数据为30名雇员的职位晋升数据,来自梁在(郭志刚,1999:p400)于1997年做的一次调查活动;为方便读者练习,数据文件EHA_job.dta现已上传至我的百度网盘,下载地址是http://pan.baidu.com/s/1hrNUYNE,提取密码是2k00;

该数据包含5个变量:id(案例识别码)、dura(在本公司工作时间)、prom(此人年中是否晋升)、wexp(到本公司前是否有工作经历)、sex(性别);我们将要用dura、wexp及sex来解释prom;

下面应用logistic回归,通过“优势比”来讨论上面的问题,Stata代码如下:

logistic prom dura wexp sex

Stata输出如下:

这与一般的logistic回归一样,只不过这里使用的是可以表示历时风险变化的“人-记录”数据:优势比系数表明,其他条件不变的情况下,在本公司工作时间每增加1年,晋升发生是4.7倍;到本公司前有工作经历的,晋升发生是没工作经历的5.7倍,男职员是女职员的3.4倍,但均不显著;

 

Cox模型Stata实例:癌症用药

演示数据为Stata软件自带的癌症患者的数据“cancer.dta”,直接在Stata中调用即可:

sysuse cancer.dta

通过“desc”命令可以得知,该数据包含8个变量:“studytime”表示癌症患者的风险期长度,即从患病到死亡或删截的时间;“died”的结果,1表示患者以死亡结束,0表示以删截结束;“drug”表示患者采用的不同类药物,1表示安慰剂,2和3表示药物;“age”表示患者年龄等等;可以通过Stata命令代码做以下分析:

1. 用stset命令(survival time set)定义做生存分析的变量

stset studytime died

2. 输出生存数据的统计概要:

stsum

由此可知,患者的死亡风险(即“发生率”)为0.04167及生存时间的四分位数;

3. 计算所有时期t末的生存概率:

stslist

由此看出生存函数值从时点1开始随时间的下降;

4. 绘制尚存概率曲线:

sts graph

5. 应用stcox命令输出Cox模型的风险比

stcoxdrug age, nohr

6. 应用stcox命令完成Cox模型的估计:

stcoxdrug age, nohr

7. 应用cox命令完成Cox模型的估计:

coxstudytime drug age, dead(died)

 

本期参考文献及延伸阅读

[1] Blossfeld, Hans-Peter, Katrin Golsch and Götz Rohwer. 2007.Event History Analysis with Stata. Lawrence Erlbaum Associates.

[2] 劳伦斯•汉密尔顿,郭志刚 译,应用STATA做统计分析,重庆大学出版社,2008:p250-275.

[3] 郭志刚 主编,社会统计分析方法——SPSS软件应用,中国人民大学出版社,1999:p385-421.

[4] 斯坦福大学周雪光,事件史统计分析法讲课提纲.

[5] 米红,曾昭磐,事件史分析方法介绍,人口与经济,1997(3):47-52.

[6] Wu, Xiaogang and Donald J. Treiman. 2004. “The HouseholdRegistration System and Social Stratification in China: 1955-1996.” Demography41(2): 363-384.

[7] 李骏,事件史分析,微信公众号“定量群学”2016-07-22的推送.

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存