手动计算校正年龄、性别后的标准化死亡率 (SMR)

news/2024/12/29 5:33:11/

分析队列人群有无死亡人数超额,通常应用标准人群死亡率来校正,即刻观察到中的实际死亡数(D)与定一个标准的死亡人数(E),D与E之比称为死亡比(standarized Mortality ratio,SMR). 标准化死亡率 (SMR) 是观察到的病例与预期病例的比率。
在这里插入图片描述
今天我们介绍一下怎么通过手动计算校正年龄、性别后的标准化死亡率 (SMR)。 我们先导入R包和数据,也不能算完全手动,还是需要用到survival包。

library(survival)
bc<-read.csv("E:/r/test/smr1.csv",sep=',',header=TRUE)
head(bc,6)
##      sex      age entry_date status   futime
## 1   male 11213.45  1985/2/26      1 2750.988
## 2 female  6681.62   1994/3/1      0 1981.679
## 3   male 10411.76   1992/6/6      0 2979.385
## 4 female 10665.13  1985/9/22      0 2576.967
## 5   male 19065.91  1986/11/2      0 4993.524
## 6   male 10154.70  1993/4/23      0 1821.558

这是一个很简单的数据,sex为性别,age是年龄,entry_date为诊断也就是进入这个队列的时间,status为结局变量,futime为生存时间。(公众号回复:SMR1可以获得该数据) 先处理一下生存时间

bc$entry_date<-as.Date(bc$entry_date)

我们首先要算出它的haz, 每人年的平均人口死亡率(d/(pyrs),其中d是死亡人数,pyrs是人年),可以通过survival包的survexp函数计算。sex这个指标不能少,如果全是女的也要设置.

bc$risk1 <- -log(survexp(futime ~ 1, data = bc, rmap = list(year = entry_date, age = age, sex = sex), cohort = FALSE, conditional = TRUE))

survexp函数中选项还有一个费率表,就是用来调整生成的预测概率的,可以理解为校正功能。 survival函数自带了3个survexp.us, survexp.usr和survexp.mn. survexp.usr就是1940年至2014年按年龄、性别和种族划分的美国人口。这里有黑人和白人的数据集,我这里只取白人的

survexp.uswhite <- survexp.usr[,,"white",]
head(survexp.uswhite ,6)
## Rate table with dimension(s): age sex year 
## , , year = 1940
## 
##    sex
## age         male       female
##   0 1.350207e-04 1.057536e-04
##   1 1.336591e-05 1.185314e-05
##   2 7.264935e-06 6.029907e-06
##   3 5.206865e-06 4.411492e-06
##   4 4.192119e-06 3.506694e-06
##   5 3.780843e-06 3.013293e-06
## 
## , , year = 1941
## 
##    sex
## age         male       female
##   0 1.300527e-04 1.017030e-04
##   1 1.260761e-05 1.118577e-05
##   2 6.919267e-06 5.733727e-06
##   3 4.976544e-06 4.208639e-06
##   4 4.019425e-06 3.345001e-06
##   5 3.624615e-06 2.879024e-06
## 
## , , year = 1942
## 

如果你想算某个地方的生存率,可以使用当地人口普查数据,这里我们把费率表加进去。

bc$risk2 <- -log(survexp(futime ~ 1, data = bc, rmap = list(year = entry_date, age = age, sex = sex), cohort = FALSE, ratetable = survexp.uswhite , conditional = TRUE))
head(bc,6)
##      sex      age entry_date status   futime       risk1       risk2
## 1   male 11213.45 1985-02-26      1 2750.988 0.017979337 0.015404330
## 2 female  6681.62 1994-03-01      0 1981.679 0.002648331 0.002482978
## 3   male 10411.76 1992-06-06      0 2979.385 0.015381638 0.013551117
## 4 female 10665.13 1985-09-22      0 2576.967 0.006089193 0.005058961
## 5   male 19065.91 1986-11-02      0 4993.524 0.186826509 0.175753223
## 6   male 10154.70 1993-04-23      0 1821.558 0.008510061 0.007464535

可以看到,加入费率表的概率和不加的是不一样的。算出了预测概率后我们就可以进一步计算了。

O <- sum(bc$status)
E <- sum(bc$risk2)
O;
## [1] 46
E
## [1] 6.74174

可以得到O为46,E为6.74.SMR等于O/E

SMR <- O/E
SMR
## [1] 6.823164

接下来计算可信区间,先设置一下alpha

alpha = 0.05

接下来计算可信区间,公式是固定的,直接放进去就可以了

SMR.lo <- O/E * (1 - 1/9/O - qnorm(1 - alpha/2)/3/sqrt(O))^3
SMR.up <- (O + 1)/E * (1 - 1/9/(O + 1) + qnorm(1 - alpha/2)/3/sqrt(O + 1))^3
SMR.lo
## [1] 4.994967
SMR.up
## [1] 9.101355

这样全部结果就计算出来啦,计算结果我们使用survexp.fr包来验证一下

library(survexp.fr)
attach(bc)
bc$entry_date<-as.Date(bc$entry_date)
SMR(futime, status, age, sex, entry_date,ratetable =survexp.uswhite)
## $O
## [1] 46
## 
## $E
## [1] 6.74174
## 
## $SMR.classic
## $SMR.classic$SMR
## [1] 6.823164
## 
## $SMR.classic$SMR.lo
## [1] 4.994967
## 
## $SMR.classic$SMR.up
## [1] 9.101355
## 
## $SMR.classic$p.value
## [1] 0
## 
## 
## $SMR.poisson
## $SMR.poisson$SMR
## [1] 6.823164
## 
## $SMR.poisson$SMR.lo
## [1] 5.110733
## 
## $SMR.poisson$SMR.up
## [1] 9.109373
## 
## $SMR.poisson$p.value
## [1] 8.903473e-39

两者算得一模一样。


http://www.ppmy.cn/news/107640.html

相关文章

zookeeper机制及消息队列kafka

目录 一、zookeeper1、zookeeper简介2、zookeeper特点3、zookeeper工作模式及机制4、zookeeper应用场景及选举机制5、zookeeper集群部署 二、消息队列kafka1、为什么要有消息队列2、使用消息队列的好处3、kafka简介4、kafka特点5、kafka系统架构名词介绍6、Kafka架构及流程7、k…

SpringBoot Redis Cache

知识点 Spring高版本引入了Cache的注解技术。该技术是一种规范&#xff0c;官方支持的实现包括Generic、JCache(JSR-107)、&#xff08;EhCache 3&#xff0c;Hazelcast&#xff0c;Infinispan&#xff0c;and others&#xff09;、EhCache 2.x、Hazelcast、Infinispan、Couch…

阿里巴巴淘天集团后端暑期实习面经

目录 1.面向对象三大特性2.重写和重载3.protected 关键字和 default 关键字的作用范围4.栈帧中有哪些东西&#xff1f;5.堆中有哪些区域&#xff1f;6.new 一个对象存放在哪里&#xff1f;7.CMS 收集器回收阶段8.CMS 收集器回收过程哪些需要暂停线程&#xff1f;9.HashMap JDK …

电商客户消费预测模型-基于数千万真实在线零售数据__企业调研_论文科研_毕业设计

之前发过 《谁主沉浮&#xff1f;银行&#xff0c;消金&#xff0c;互联网公司的精准营销_智慧营销完全解读》介绍了智慧营销/精准营销目的是降低运营成本。但精准营销可以带来很多额外收益&#xff0c;例如提高销售利润&#xff0c;提高客户忠诚度&#xff0c;降低客户流失率&…

关于数据科学的文本分析案例

在本文中&#xff0c;我们尝试通过进行一些文本挖掘来发现数据科学相关概念。我们将从一篇关于数据科学的文本开始&#xff0c;从中提取关键字&#xff0c;然后尝试可视化结果。 作为文本&#xff0c;将使用维基百科的数据科学页面&#xff1a; url https://en.wikipedia.org…

几种经典算法

1.分治法 分治法也叫做分而治之法。核心思想是将一个难以直接解决的大问题依照相同的概念分割成两个或者多个相同的小问题&#xff0c;以便各个击破。 如图所示&#xff1a; 2.递归法 递归法和分而治之法像一对孪生兄弟&#xff0c;都是将一个复杂的算法问题进行分解&#x…

分布式时序数据库DolphinDB

简介 DolphinDB不仅可作为分布式数据仓库或者内存数据库来使用&#xff0c;而且自带丰富的计算工具&#xff0c;可作为一个研究工具或研究平台来使用。DolphinDB对时间序列数据的处理特别友好&#xff0c;非常适合量化金融、物联网等领域的海量数据分析。例如在量化金融领域的交…

ISO21434 项目网络安全管理

目录 一、概述 二、目标 三、输入 3.1 先决条件 3.2 进一步支持信息 四、要求和建议 4.1 网络安全责任 4.2 网络安全规划 4.3 裁剪 4.4 重用 4.5 非上下文组件 4.6 现成组件 4.7 网络安全案例&#xff08;Cybersecurity case&#xff09; 4.8 网络安全评估&#…