人群归因分数(Population Attributable Fraction, PAF):概念、简单计算案例


专注系列化高质量的R语言教程

推文索引 | 联系小编 | 付费合集


本篇目录如下:

  • 1 人群归因分数

    • 1.1 相对风险度

    • 1.2 人群归因分数

  • 2 案例

    • 2.1 示例数据

    • 2.2 计算案例1

    • 2.3 计算案例2

    • 2.4 计算案例3

  • 3 总结

1 人群归因分数

人群归因分数(Population Attributable Fraction, PAF)是疾病负担研究中常用的指标,其大致含义是,假设人群的风险暴露降低至理想水平,预计可减少的患病人口数占实际患病人口数的比例。

The population attributable fraction (PAF), which represents the proportion of risk that would be reduced in a given year if the exposure to a risk factor in the past were reduced to an ideal exposure scenario.[1]

风险因素的理想暴露水平有多种定义方式,常用的是理论最小风险水平(Theoretical Minimum Risk Level,TMREL),指理论上能使疾病负担水平达到最低的暴露水平。如世卫组织推荐的不会造成健康风险的污染物临界指标[2]

3a90070a8d6adc3ee41e8d25a5e154c6.png

1.1 相对风险度

假设理想暴露水平时的患病人口比例为,暴露水平为时的患病人口比例为,则该暴露水平的相对风险度(Relative Risk,RR)为:

1.2 人群归因分数

如果暴露水平是分类变量,,暴露在各水平的人群比例使用表示,则人群归因分数(PAF)可表示为:

是指理想暴露水平的相对风险度,一般说来它应该是1。不过相对风险度并不一定需要使用本队列的数据进行计算,也可以直接使用或汇总已有的研究成果,这时不一定为1。

如果暴露水平是连续变量:

2 案例

本节通过几个例子展示PAF的具体计算过程。

2.1 示例数据

示例数据使用causalPAF工具包的数据集strokedata。该数据集包括16623个观察样本,本案例涉及到的变量有:

  • case:二分变量,数值型;0表示未患病,1表示患病;

  • phys:二分变量;因子类型;1表示缺乏锻炼,2表示积极锻炼。

根据后文需要,将phys转换为0/1变量。需要注意的是,phys的类别顺序为“2、1”,因此转换后0表示积极锻炼、1表示缺乏锻炼。

library(causalPAF)
data = strokedata  
levels(data$phys)
## [1] "2" "1"

data$phys <- as.numeric(data$phys) - 1
unique(data$phys)
## [1] 1 0

2.2 计算案例1

phys为分组变量,展示样本的分布情况:

library(tidyverse) 
table <- data %>%
  group_by(phys) %>%
  summarise(pop = length(case),
            pop_prop = pop/16623,
            case_num = sum(case),
            case_prop = mean(case))

table
##    phys   pop pop_prop case_num case_prop
##   <dbl> <int>    <dbl>    <dbl>     <dbl>
## 1     0  2297    0.138     1043     0.454
## 2     1 14326    0.862     7192     0.502
  • pop:样本数;

  • pop_prop:样本占总样本比例;

  • case_num:患病样本数;

  • case_prop:患病率,即case_num/pop

显然,可以将phys = 0定义为理想暴露水平,计算phys = 0,1时的相对风险度:

rr0 = 1
(rr1 = table$case_prop[2]/table$case_prop[1]) 
## [1] 1.105609

phys = 0,1时的人口暴露比例即pop_prop

p0 = table$pop_prop[1]
p1 = table$pop_prop[2]

套用上节的计算公式,计算PAF:

1 - rr0/(rr0*p0 + rr1*p1)
## [1] 0.08342266

因此,由缺乏锻炼(phys = 1)导致的患病人群归因分数为8.34%。

2.3 计算案例2

上节是使用公式计算PAF,也可以直接使用PAF的定义来计算,即若所有样本的phys都取0(理想暴露水平),预计可减少的患病人口数占实际患病人口数的比例。

可减少的患病人口数reducephys = 1的样本数乘以两个暴露水平的患病率之差:

(reduce <- table$pop[2]*(table$case_prop[2] - table$case_prop[1])) 
## [1] 686.9856

实际患病人口数total_case

(total_case = sum(data$case))
## [1] 8235

reducetotal_case之比即PAF:

reduce/total_case
## [1] 0.08342266

与2.2节计算结果一致。

2.4 计算案例3

在该类研究中,响应变量通常都是0/1二分变量,因此一般可使用Logistic回归进行建模。

case为响应变量,phys为解释变量(风险因子),建立Logistic模型:

fit <- glm(case ~ phys, data = data,
           family = binomial())
summary(fit)
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -0.18424    0.04191  -4.396 1.10e-05 ***
## phys         0.19233    0.04512   4.263 2.02e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

使用回归结果估计在理想暴露水平phys = 0时的患病率:

newdata <- data.frame(phys = 0)
(p0 <- predict(fit, newdata = newdata, type = "response"))
## 0.4540705

使用PAF定义的计算公式:

就是实际人群患病比例,因此上式可简化为:

(p = mean(data$case))
## [1] 0.4953979

1 - p0/p
## 0.08342266

AF工具包的AFglm()函数以广义回归模型为输入对象计算PAF:

library(AF)
AFglm(fit, exposure = "phys", data = data)
## Estimated attributable fraction (AF) and standard error : 
## 
##          AF  Std.Error
##  0.08342266 0.01948951

3 总结

本篇推文简要介绍了PAF、RR的概念及其计算公式,使用的案例只涉及一个风险变量,后续推文会介绍有控制变量、多风险变量及中介变量(mediator)的情况。

参考资料

[1]

GBD:2017 补充材料1,p33: https://doi.org/10.1016/S0140-6736(18)32225-6

[2]

环境(室外)空气质量和健康: https://www.who.int/zh/news-room/fact-sheets/detail/ambient-(outdoor)-air-quality-and-health

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
分析平安银行可以从以下几个方面入手: 1. 财务分析:通过分析平安银行的财务报表,包括资产负债表、利润表和现金流量表等,来了解公司的盈利能力、财务状况和现金流量状况等。 2. 市场分析:通过分析平安银行的股价走势、市值、市盈率等指标,来了解公司在市场上的表现和市场对公司的看法。 3. 行业分析:通过了解银行业的整体市场环境、行业发展趋势、竞争格局等因素,来了解平安银行在行业中的地位和发展前景。 以下是通过Python进行财务分析的示例代码: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取平安银行财务报表数据 data = pd.read_excel('path/to/file.xlsx', sheet_name='Profit') data.head() # 计算平安银行的营业收入、净利润、总资产和净资产 revenue = data.loc[data['Item'] == 'Operating revenue', 'Value'].values[0] net_income = data.loc[data['Item'] == 'Net profit attributable to shareholders of the parent company', 'Value'].values[0] total_assets = data.loc[data['Item'] == 'Total assets', 'Value'].values[0] total_equity = data.loc[data['Item'] == 'Total equity attributable to shareholders of the parent company', 'Value'].values[0] # 计算平安银行的净利润率、总资产收益率和净资产收益率 net_profit_margin = net_income / revenue roe = net_income / total_equity roa = net_income / total_assets # 打印结果 print('平安银行\n') print('营业收入:', revenue) print('净利润:', net_income) print('总资产:', total_assets) print('净资产:', total_equity) print('净利润率:', net_profit_margin) print('总资产收益率:', roa) print('净资产收益率:', roe) ``` 你需要将代码中的`path/to/file.xlsx`替换为你的数据文件路径,并且需要确保数据文件中包含平安银行的财务报表数据,并且工作表名称为`Profit`。通过运行代码,你可以得到平安银行的财务指标,并对其进行分析。如果需要进行更深入的分析,可以使用其他的Python库,例如pandas、numpy、matplotlib等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值