R数据分析:临床研究样本量计算、结果解读与实操
很久之前给大家写过一篇文章详细介绍了样本量计算的底层逻辑,不过那篇文章原理是依照卡方比较来写的,可以拓展到均值比较,但视角还是比较小,今天从整个临床研究的角度结合具体的例子谈谈大家遇到的样本量的计算方法。有操作,有原理,有比较,认真阅读下来应该会大有裨益。
统计课上都讲过:我们做统计推断无外乎两个目的:一个是估计总体参数(一般是均值和率),一个是假设检验:
Inferential statistics has two parts: estimation of population parameter and testing of hypothesis. According to the type of medical research, any one of them can be adopted. The estimation method is used in prevalence/descriptive studies and the testing of hypothesis is used for cohort/case control/clinical trials.
估计参数的研究中能尽可能地把总体参数估计得准,假设检验过程能尽可能地少犯错误是我们计算样本量要达到的终极目标。
临床研究
新药或者新的治疗方式开发的临床研究一般分为四期:
每一期都涉及统计操作,也都涉及样本量的计算。 统的看下来还是在做统计推断,计算逻辑依然在假设检验(所以本文将估计总体参数的样本计算略过),核心就目的一个:要正确的拒绝零假设:
本身我们做假设检验的时候客观的就会出现上表的情况,天然会犯两类错误,所以我们考虑样本量的目的就是尽可能减少犯错误的概率,对照上表可以从两个方面考虑,就是减小α和β。根据假设检验的原理实际操作中我们通常会把α设定为0.05,所以剩下的操作空间就是β,唯一的做法就是减小β从而增大统计效能(1-β)。
One of the most popular approaches to sample size determination involves studying the power of a test of hypothesis
而统计效能的重要影响因素之一就是样本量。所以我们要去计算样本量,这里一定要注意是样本量影响了统计效能所以样本量重要(根源还是统计效能重要)。而不是常常听到的“样本量的影响因素包括β”,“计算样本量的时候要考虑统计效能”,这种表述统统都是错误的。统计效能我们永远是希望越大越好。我们是为了寻求更大的统计效能,减小犯二类错误所以我们才要去要寻求一个合适的样本量。逻辑不能搞反了。我们是Determines the minimum number of subjects for adequate study power。
当然,样本量是统计效能重要的影响因素但并非唯一的,α和效应量等也会对统计效能造成影响:
With continuous outcomes, 4 main components impact power: the specified effect size, the significance level, the sample size n, and the population variance σ2. Specifically, power increases with larger effect sizes, higher values of α, larger sample sizes, and less variability within the sample
比如对于一个两样本t检验,我们设定好α和β,效应量设定为Cohen·d0.5,就可以得到样本量为64的时候统计效能就可以超过0.8了。如果你觉得统计效能0.8够了,那么64个样本就够。
上面只是一个例子,临床研究的实验设计种类有很多,可以归结为下表:
对于上述研究设计,涉及到的假设检验如下面2张表:
总之我们要理解:我们计算样本量的目的就是尽可能减少上面的假设检验的犯错误情况。
我们再具体看计算思路和方法。
RCT研究的样本量计算
实验性研究中RCT是大家经常会做的,或者是经常需要计算样本量的研究类型。具体到统计比较又有三种情况了,分别叫做优效性实验,等效性实验和非劣效性实验:
在计算之前需要明确下面几个事情
所涉及到的公式可以参考下面文章:
Zhong B. How to calculate sample size in randomized controlled trial? J Thorac Dis. 2009 Dec;1(1):51-4. PMID: 22263004; PMCID: PMC3256489.
我们依然是来看例子,下面例子详细展示了一个连续变量为结局的优效性研究的例子:
就是我们预计一种新治疗能减少收缩压10mmhg,在实验组中130mmhg,对照组中140mmHg,优效性界值我们取-5mmHg,α和β取0.05和0.2,那么按照上面的公式可以计算得到每组样本是50人,共计需要样本100人。当然我们实际操作不会傻到对照公式一个一个去算,直接在R中使用下面代码即可:
TwoSampleMean.NIS(alpha=0.05, beta=0.2, sigma=10 , k=1, delta=-10, margin=-5)
输出如下,同样是50个样本:
结局为二分类变量的优效性研究的例子也给大家放一个:
就是我们预计新的治疗方法可以降低卒中的发病率,假设实验组发病率为0.338,对照组率为0.564,设定优效界值为-0.05,取α和β分别为0.05和0.2,按照上面公式可以计算得到91个样本每组,共需要样本182个。在R中使用下面代码:
TwoSampleProportion.NIS( alpha=0.05, beta=0.2,
p1=0.338, p2=0.564, k=1, delta=-0.226, margin=-0.05)
结果输出如下:
比公式多了2个,考虑约分造成的误差。
还有的时候我们单纯就是要证明差异,不考虑到底是优效性还是非劣效性的问题,这个时候可以理解为界值为0的优效性实验。看下面的例子:
就是说我们就想比较两组血压是否有差异,血压的总体标准差为20mmHg,两组的差值为15mmHg我们认为有意义,那么按照box1中的公式我们得到28个样本每组,共56个样本就可以,当然我们也可以使用下面代码直接得到结果:
pwr::pwr.t.test(
sig.level = 0.05,
type = "two.sample",
alternative = "two.sided",
power = 0.80,
d = 15/20)
得到结果也是每组29人,共需要58人(误差归因于约分):
需要注意的是函数中的d为效应量,其和绝对差异是有区别的,对于连续变量来讲,其就是绝对误差除以变异:
You need to calculate an effect size (aka Cohen’s d) in order to estimate your sample size. This effect size is equal to the difference between the means at the endpoint, divided by the pooled standard deviation.
那么对于此例子我们也可以将其看作是界值为0的优效性实验,但是根据优效和双侧假设的原理我们需要将α设定为0.025,如下代码计算后依然可以得到结果为28:
这样我们就将优效性/非劣效性实验研究的样本量计算和寻求差异的研究样本量计算统一起来了。
再看一个分类结局的例子:就是根据以往研究,治疗组的的高血压患病率是0.2,对照组是0.3,我们认为差异0.1在临床上是有意义的,那么在α为0.05,统计效能为0.8的情况下根据box2的公式可以算出每组样本应该为291,合计需要582个样本。
我们依然可以用两组率的比较的代码直接得到结果:
pwr.2p.test(h = ES.h(p1 = .2, p2 =0.3),
sig.level = .05,
power = .8,
alternative = "two.sided")
同样的我们依然可以将其看作是一个界值为0的非劣效/有效性研究,对应的样本量计算方法依然可以得到同样的的结果:
再一次巩固了将优效性/非劣效性实验研究的样本量计算和寻求差异的研究样本量计算是统一的。能看到这,其实基本的rct研究的样本量计算根本就难不住你了,恭喜你。
simon 两阶段
在新药的临床开发过程中,II期临床研究一般会初步地确定某一个药物的临床疗效,决定该药物是否值得进一步的投入和开发,这一步是失败风险最大的环节。同时,由于药物的临床疗效尚未确定,基于伦理的考虑,我们往往希望纳入的受试者控制在合理的数量,从而避免患者接受无效的治疗方案。
这个时候我们关注的重点是,及早地发现药物是否是未达到疗效,以便及早终止实验,及时止损,Simon两阶段的研究设计就实现了当药物疗效未达到预期疗效时,尽快终止试验的目的。根本思路是,将试验分为两个阶段,在第一个阶段完成时进行一次评估,如符合预期(如对治疗响应的患者达到预期人数),进行第二阶段。反之,终止试验。具体技术路线如下图:
可以看到,Simon两阶段设计是一个单臂设计并不涉及组间比较,第一阶段先来一批样本看一下药的响应情况,根据响应情况决定研究是否进入第二阶段。上图中的r1和r都是自己预先设定的标准,x1,x2是相应阶段的响应数量,还有统计中小概率事件的概率。
从上面的逻辑看,为了计算Simon两阶段设计的样本量我们需要事先设定一些值,一个是r1:第一阶段的响应标准(unacceptable response rate; baseline response rate that needs to be exceeded for treatment to be deemed promising);还有第二阶段的期望响应标准(response rate that is desirable; should be larger than pu)。Simon两阶段设计样本量的标准有两个一个叫做minimax design,另一个叫做optimal design,两种标准的逻辑是不一样的:Minimax design的目的是使使用的总样本量最少,optimal是使得第一阶段样本量最少。
Minimax design mainly aims to minimize the maximum sample size. Alternatively, optimal design aims to minimize the expected sample size
依然是看实操:下面是某篇文献中给到的在不同参数设定下两个标准下的样本量:
可以看到在第一阶段响应率设定在0.05,第二阶段不低于0.25响应率的前提下,所需要的样本量分别为Optimal:17,Minimax:16.
我们直接在R中输入下面代码:
ph2simon(0.05, 0.2, 0.05, 0.2)
输出如下:
和文献中一模一样。
小结
今天从临床研究的大的层面写了样本量计算的问题,涉及了大家经常会用到的研究设计的样本量计算,也是我经常被同学们问的,这个问题个人也认为很重要,但似乎没几个人能讲清楚,是医学研究生教育应该着力补齐的短板。这篇文章既有理论,又有实操,还有例子,实属难得。以下还有很多我写作本文时查阅的参考文献,供大家参考:
R数据分析:临床研究样本量计算、结果解读与实操的更多相关文章
- R数据分析:孟德尔随机化中介的原理和实操
中介本身就是回归,基本上我看到的很多的调查性研究中在中介分析的方法部分都不会去提混杂,都是默认一个三角形画好,中介关系就算过去了,这里面默认的逻辑就是前两步回归中的混杂是一样的,计算中介效应的时候就自 ...
- R数据分析:样本量计算的底层逻辑与实操,pwr包
样本量问题真的是好多人的老大难,是很多同学科研入门第一个拦路虎,今天给本科同学改大创标书又遇到这个问题,我想想不止是本科生对这个问题不会,很多同学从上研究生到最后脱离科研估计也没能把这个问题弄得很明白 ...
- R数据分析:跟随top期刊手把手教你做一个临床预测模型
临床预测模型也是大家比较感兴趣的,今天就带着大家看一篇临床预测模型的文章,并且用一个例子给大家过一遍做法. 这篇文章来自护理领域顶级期刊的文章,文章名在下面 Ballesta-Castillejos ...
- R数据分析:临床预测模型中校准曲线和DCA曲线的意义与做法
之前给大家写过一个临床预测模型:R数据分析:跟随top期刊手把手教你做一个临床预测模型,里面其实都是比较基础的模型判别能力discrimination的一些指标,那么今天就再进一步,给大家分享一些和临 ...
- 给大厨写的R数据分析代码
###************************************** 新老客户统计 ***************************************### dachu &l ...
- 孟德尔随机化(Mendelian Randomization) 统计功效(power)和样本量计算
孟德尔随机化(Mendelian Randomization) 统计功效(power)和样本量计算 1 统计功效(power)概念 统计功效(power)指的是在原假设为假的情况下,接受备择假设的概率 ...
- R数据分析:潜类别轨迹模型LCTM的做法,实例解析
最近看了好多潜类别轨迹latent class trajectory models的文章,发现这个方法和我之前常用的横断面数据的潜类别和潜剖面分析完全不是一个东西,做纵向轨迹的正宗流派还是这个方法,当 ...
- R数据分析:如何简洁高效地展示统计结果
之前给大家写过一篇数据清洗的文章,解决的问题是你拿到原始数据后如何快速地对数据进行处理,处理到你基本上可以拿来分析的地步,其中介绍了如何选变量如何筛选个案,变量重新编码,如何去重,如何替换缺失值,如何 ...
- 数据分析之Numpy-数组计算
引言 : 数据分析 : 就是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出研究对象的内在规律 . 数据分析三剑客 : Numpy 数组计算 Pandas 表计算与数据分析 ...
- R数据分析:二分类因变量的混合效应,多水平logistics模型介绍
今天给大家写广义混合效应模型Generalised Linear Random Intercept Model的第一部分 ,混合效应logistics回归模型,这个和线性混合效应模型一样也有好几个叫法 ...
随机推荐
- mysql后台导入sql文件-设定字符集
需求描述:有一个user_info.sql 的文件里面都是插入user_info表的insert语句数据,数据量500M,要求快速插入mysql的数据库中. 解决方法: 1.利用客户端工具加载文件插入 ...
- Java实现随机抽奖的方法有哪些
在Java中实现随机抽奖的方法,通常我们会使用java.util.Random类来生成随机数,然后基于这些随机数来选择中奖者.以下将给出几种常见的随机抽奖实现方式,包括从数组中抽取.从列表中抽取以及基 ...
- foobar2000 v2.1.3 汉化版(更新日期:2024.04.02)
foobar2000 v2.1.3 汉化版 -----------------------[软件截图]---------------------- -----------------------[软件 ...
- linux内核 快速分片,技术|Linux slabtop命令——显示内核片缓存信息
Linux内核需要为临时对象如任务或者设备结构和节点分配内存,缓存分配器管理着这些类型对象的缓存.现代Linux内核部署了该缓存分配器以持有缓存,称之为片.不同类型的片缓存由片分配器维护.本文集中讨论 ...
- C#中的原始字符串
// 原始字符串使用 三个引号(至少三对)包裹,ps: 引号单独占用一行 // 原始字符串使用变量需要加两个 $$"""{变量}""" st ...
- C# Webapi Filter 过滤器 - 生命周期钩子函数 - Exception Filter 基础
什么是Filter ? 1. 切面编程机制,在 ASP.NET Core 特定的位置执行我们自定义的代码: 2. ASP.NET Core 中的Filter五种类型,Authorization ,fi ...
- 新建数据库 phpStudy
官网:https://www.xp.cn/下载phpStudy : 环境配置:1. 下载MySQL8.0.12 2. 安装HeidiSQL11.0 开启 MySQL8.0.12 修改MySQL的密码: ...
- Java面试题(持续更新中...)
事务的四大特性 原子性,隔离性,持久性,一致性 事务的隔离级别和现象 读未提交:可能产生脏读,读取到未提交的数据 读已提交:可能产生不可重复读取问题,A事务中读取到B事务已提交的数据,导致两次读取数据 ...
- (系列七).net8 Aop切面编程
说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...
- CKS 认证备考指南
作者:scwang18,主要负责技术架构,在容器云方向颇有研究. 前言 CKA 和 CKS 是 Linux 基金会联合 CNCF 社区组织的云原生技术领域权威的技术水平认证考试,考试采用实操方式进行. ...