内容来自:“小白学统计”微信公众号,感谢作者授权最近审稿看到有的关于预测模型的文章,文中尽管声明采用了外部验证,但实际上并不是真正的外部验证。说明还是有的人对模型的内部验证和外部验证并不是很了解。所以专门说一下这个问题。先通过一个例子引出问题,某研究选择了某医院的一段时间内的一批人构建预测模型,然后将这批人随机拆分成7:3的两份完全不重叠的数据。70%建模,30%验证。作者提到,以70%的数据作为模型开发数据,以30%的数据作为外部验证,评价模型的效果。作者还在文中专门列出了“训练数据”和“外部验证数据”的对比,结果显示,在所有的预测变量上,两组数据均无统计学差异。而且最终文中也给出了“内部验证”和“外部验证”的两部分结果,如ROC曲线、校准曲线等。做的结果也很丰富。我感觉类似的文章其实不少。有的临床大夫可能觉得,这没什么问题啊,这30%的数据是完全“独立”于另外的70%的数据,这不就是“独立的外部验证数据”?要说明这个问题,首先要了解一下什么是“内”和“外”。在预测模型中,如果你通过各种方式(如翻阅以往病历、追踪调查等)获得了一批数据,打算用这批数据建一个模型。那这批数据就是“内”,这批数据以外的其它地方找的数据就是“外”。(不是很严谨的解释,当然我这个公众号一向对概念什么的都不是很严谨,大概明白这个意思就行。)也就是说,如果你找到了过去2年的数据,用这些数据建一个模型。那么,你在这批数据内无论如何拆分折腾,这都不能叫外部验证。你把数据随机分成两份,也不能称之为“独立”的数据。你可以说这两份数据是不重叠的,但不能说“独立”的。为什么呢?因为这两份数据都是来自于同一个数据源,所以“独立”这个词不能随便说。举个例子,你一共10000块钱,你的孩子从你手里要了1000块钱,那么,他的1000和你的9000肯定不重叠,但是你不能说你们俩的钱是独立的,因为都是从你手里拿的。你不给他,他不可能有,所以这不是独立的。所谓的“内部数据”和“外部数据”很多情况下跟你的研究目的有关。比如你有2021年和2022年的数据,那2022年的数据就一定算是“外部验证数据”吗?并不一定。这取决于你的研究目的、模型拟推广人群等。下面会继续讨论这个问题。内部验证和外部验证的目的不大一样。内部验证主要是看模型的可重复性,也就是说,看你模型稳不稳定。外部验证主要看可推广性,也就是说,你的模型换人后好不好使。举个例子,如果你考试的话,先给你一份卷子让你做一遍,这个卷子包含了10个知识点,然后给你换一份卷子,还是考这10个知识点,只不过也许题目稍微换了换,这就是内部验证,主要考你的记性。如果再给你换一份卷子,超出了这10个知识点范围内,看你能不能举一反三,把其它的题目也做好,这就是外部验证,主要考你的真正学习能力。能把第二份卷子做好,才是真正的水平。对于你找到的这批数据,你怎么分,怎么折腾,也就是内部验证,都不能叫做外部验证。那对这批数据一般你能怎么做呢?通常内部验证做法主要就是这几种(这些做法已经有很多介绍了,我就简单一提):(1)随机分割,也叫做holdout验证。就是把数据随机分成两份。尽管这种方式简单且听起来也挺合理,但是统计学家并不建议这种方式。为什么呢?首先,如果样本量很小,那你拆分了后,不管是模型开发还是模型验证,数据都少了,不利于模型的稳定性;其次,如果你的数据量很大,分割后的结果与不分割的基本差不多。换句话说,无论样本量很大还是很小,都没有必要。然而,目前很多文章中都在用这种方式。比如前面的例子中,就是将人群随机分割为两份数据,而且还专门做了“训练数据”和“外部验证数据”的特征比较。但是,我们稍微想想就不难理解,你把一份数据随机分为两部分,正常情况下,肯定不会有差异,有差异反而就不对了。所以这种看起来似乎很有道理的做法,其实没有意义。你可以把数据随机分成两部分,但是再进行比较以说明你的“外部数据”与“训练数据”相似,那就不对了。(2)bootstrap法。bootstrap法在统计模拟中的效果表现最优(很多文献都有报道),通常可作为首选。这种方法思路不难,就是对原始数据进行bootstrap抽样,把抽中的数据作为训练数据,没抽中的作为验证。(3)交叉验证。这大概是目前文献中用的最多的(目测如此)。可以看作是对随机分割的多次重复,这样结果会更稳定一些。比如把数据分成10份,每次留出1份作为验证,其余9份作为训练,重复10次。(4)还有一些比较特殊的情况。你用于建模的数据本身就包含了多个时间或空间,比如你查阅病历找到的数据可能是2年的数据。那这种情况下有多种处理方式,可以是前面说的三种,这三种都涉及随机。也可以采用非随机分割,用其中一年数据训练,另一年验证。这两种方式哪种更好?可能有的人会觉得,听起来好像第二种方式更好,跟外部验证很接近,很像是时间外部验证。其实不一定,需要看情况。如果你采用第二种方式,把其中一年作为训练,另一年作为验证,存在几个问题:第一,你把哪一年作为训练?很多人肯定就想当然地说,当然是第一年训练,第二年验证。但这种方式存在一个问题,因为第二年的数据肯定是最新的,如果你的变量中有些测量方式恰好在这一年做了更新(比如治疗手段的改进,检测技术的更新),那你用第一年的数据建模,显然不利于以后的推广。第二,如果这两年的数据有一定差异,那你把数据拆分开,就降低了利用合并数据建模的稳定性。因为把两年数据合并起来,代表性就会更广泛,外推性理论上也会更好。所以,取决于实际情况。如果你收集到的这2年数据几乎没有什么变化,其实你把它看作一份数据就挺好,所谓“年”只是我们人为划分的,其实关键的不在于我们所定义的“年”、“月”,而是在于你找的这些数据,有无随时间发生变化的趋势。如果你们医院5年内都没有什么变化,用到的预测变量的检测方式、人群特征等全都很固定,那即使是5年数据,也仍然可以看作就是一个时间段,只不过例数增多了而已。这时你按年分割当然可以,但是可能并没有什么优势。而如果在不同年份的人群特征发生了变化,这种情况下,按年分割反而不利于真正的外部验证。如果你的开发数据(注意是开发数据)包含了多个时间点,如有可能,可以考虑动态模型更新,这是一种更好的方式。目前这方面的文献不多,但也有几篇,感兴趣的可以自己找找看。 特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“号”用户上传并发布,本平台仅提供信息存储服务。 |