R数据分析:临床预测模型的样本量探讨及R实现
文本的大部分内容来自下面的文献:
Riley R D, Ensor J, Snell K I E, Harrell F E, Martin G P, Reitsma J B et al. Calculating the sample size required for developing a clinical prediction model BMJ 2020; 368 :m441 doi:10.1136/bmj.m441
这个文章是今年2月份瞅见的,本来那个时候就想写出来分享给大家,奈何我太懒了,成功托到了11月,哈哈哈。刚好最近有粉丝问临床预测模型的样本量,就捡回来这篇文章分享给大家。
一个变量10个样本?
“一个变量最少需要10个样本”,这句话是很多同学开题报告样本量计算时候都要说的一句话(有些同学说的15个,有些说20个,都是可以在上面这个文章中找到参考文献的),确实有这么个法则,英文叫做10 events per variable 缩写为(10 EPV),就是每一个变量就应该有10个样本,确切地说应该是你估计多少个β,你就最少需要10β个样本,比如你的预测变量有分类变量,转化为哑变量的时候我们估计的β其实是变多的,所以这一点也需要考虑进去,比如对于有3个水平的分变自变量,这么一个变量其实是需要最少20个样本的。同时如果你的模型考虑预测变量的高次项,这个时候一个变量对应的β值也变多了,也需要提高样本量。
所以说大家最好不要说一个变量对应10个样本,而应当改成1个待估参数对应最少10个样本。
这么一个简单而广泛使用的标准,也是有争议的。当然大家还是依然可以用哈,没人会对大家要求这么高的,只不过作者在文章给出了一个更加好的预测模型样本量计算方法。
样本量计算4步法
4步法是van Smeden and Riley et al提出来的,其基本思想是从4个方面考虑一个预测研究的样本量,然后取4个考虑中最大的样本量作为我们的最终样本量。
一是考虑我们的样本量能够准确估计结局的发生率(2分类)或者结局均值(连续)。
对于分类结局,我们有样本量计算公式
这个也是大家统计课本上的样本量计算公式
两个公式一样的,都是为了估算分类结局的率。
就是这个方法首先考虑我们的样本量能够合理估计出结局的发生率,或者发生水平。
第二步是确定使得我们模型预测误差最小的样本量。对于分类结局来说,模型预测误差最小需要考虑预测变量个数,预计结局占比,平均结局误差这3个指标,用下面的公式算:
n就是需要的样本量,分子上面的3个符号分别代表预计结局占比,预测变量个数,平均结局误差。通过这一步计算出来的样本量能够使得模型预测误差最小。
第三步是考虑减少过拟合的最小样本量,就是样本量越少越容易过拟合,我们得将样本量扩大到过拟合不再是问题的程度。这个时候对于分类结局的样本量估计我们需要考虑预测变量个数,期望结局占比,期望模型表现Cox-Snell R squared statistic (R2cs)这3个指标。样本量计算公式如下:
其中s一般取0.9(这是个防止模型过拟合惩罚极端值的一个指标),P是预测变量个数,R2cs越小越好,一般取0.1,所以对于一个20个预测变量,s取0.9,R2cs取0.1时我们需要的样本量按上面的公式算出来就应该是1698个。
第4步是考虑模型优化的问题,我们的样本量要使得我们的模型R2和最优模型R2的差异最小,算法如下,反正我也看不太懂,然后反正大家记住R2cs和max(R2cs)都是自己设定,p是预测变量个数:
上面的4个步骤其实就是做预测模型的时候要考虑的4个标准,每个标准都有相应的样本量要求就产生了4个样本量,最终我们是取4个样本量中最大的那个作为我们预测模型的最终的样本量就可以了。
样本量计算的R实现
理论部分很难懂哦,反正我们知道我们需要从多个方面去考虑一个临床预测模型的样本量计算问题,更重要的是我们掌握整个样本量的计算方法就行。作者的论文中是有stata的代码的,这儿给大家写一个R语言的实际例子,预测模型大家做的多的还是二分类结局,所以我们就完整地走一个二分类结局样本量计算的4步法,4步如下图:
掌握了这4步对大家前瞻性研究设计,回顾性研究确定预测变量个数都是蛮有好处的:
The calculations are especially helpful when prospective data collection (eg, new cohort study) are required before model development; however, they are also relevant when existing data are available to guide the number of predictors that can be considered.
并且,整个4步在R语言的pmsampsize函数中一下就搞定。大家可以去瞅瞅pmsampsize的函数说明。
比如我现在要设计一个二分类变量为结局变量的预测模型,我估计我要纳入24个预测因素,结局的发生率为17.4,估计R-squared为0.288,那么我就可以直接写出代码:
pmsampsize(type = "b", rsquared = 0.288, parameters = 24, prevalence = 0.174)
运行后即可得到结果,结果中有默认的模型和最优模型的差异,有默认的容许误差,最终计算出的我们需要的样本量为668个,见下图:
当然啦pmsampsize还可以计算连续变量结局和生存数据结局的预测模型所需要的样本量,大家可以去瞅瞅函数说明哈。
小结
今天给大家写了临床预测模型的样本量的计算方法,希望大家知道除了1个变量10个样本这个傻瓜法则之外还有更好的方法。感谢大家耐心看完,自己的文章都写的很细,代码都在原文中,希望大家都可以自己做一做,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先收藏,再点赞分享。
也欢迎大家的意见和建议,大家想了解什么统计方法都可以在文章下留言,说不定我看见了就会给你写教程哦,另欢迎私信。
如果你是一个大学本科生或研究生,如果你正在因为你的统计作业、数据分析、模型构建,科研统计设计等发愁,如果你在使用SPSS, R,Python,Mplus, Excel中遇到任何问题,都可以联系我。因为我可以给您提供最好的,最详细和耐心的数据分析服务。
如果你对Z检验,t检验,方差分析,多元方差分析,回归,卡方检验,相关,多水平模型,结构方程模型,中介调节,量表信效度等等统计技巧有任何问题,请私信我,获取详细和耐心的指导。
If you are a student and you are worried about you statistical #Assignments, #Data #Analysis, #Thesis, #Reports, #Composing, #Quizzes, Exams.. And if you are facing problem in #SPSS, #R-Programming, #Excel, Mplus, then contact me. Because I could provide you the best services for your Data Analysis.
Are you confused with statistical Techniques like z-test, t-test, ANOVA, MANOVA, Regression, Logistic Regression, Chi-Square, Correlation, Association, SEM, multilevel model, mediation and moderation etc. for your Data Analysis...??
Then Contact Me. I will solve your Problem...
加油吧,打工人!