本人有一个机器学习相关的问题求教

有三组人:A和B是疾病的两个亚组,C是健康对照组, 一开始的做法是统计三组的差异,得到一些脑区特征。将这些特征平均后对A和B做ROC分析;

审稿人质疑因为特征是通过统计比较得到的,最后的ROC分析可能有偏向性。我对样本做了留一法后的ROC分析,审稿人认为这样消除了被试间的影响,但是需要在交叉验证加一个ROI selection的步骤。求教这个步骤应该如何完成?

审稿人的问题如下:

ROC和相关分析的选择偏差没有得到充分的解决。选择偏差是由于选择的ROI,显示出最强的群体效应。跨受试者的留一交叉验证消除了相关性的有限样本量偏倚,但它没有消除由ROI选择引起的偏倚。ROI选择需要包括在交叉验证中,以防止选择偏差。否则,相关性或ROC的强度和显著性不能以公正的方式解释。

虽然没有很清楚你具体怎么做的,我猜测审稿人的意思是你在做三组间的差异的时候就应该考虑留一的操作,因为一般测试集的数据不能在前面做特征筛选的时候出现过。

谢谢Alex的回复。我以为他是让我在ROC分析之前做特征提取。我因为只有1个特征(17个有统计性的脑区做平均),所以当时没做分类器,直接算了ROC和AUC。所以他现在让我在交叉验证中增加一个ROI selection的步骤,不知道如何弄;

如果是在统计中留一,那么应该怎么留呢? 我是做的全脑voxel层面的统计,即A,B,C三组统计比较得到一个voxel簇,然后提取出来这个簇中包含哪些脑区。(A是我主要探究的组,BC都是对照组),如果现在想在统计这一步就留一,应该遵循一个什么样的思路呢?这种做法常见吗?

(1)如果你是在voxel-level进行的统计,那么这个留一过程会比较麻烦。具体地,就是用N-1个被试进行统计分析,得到显著cluster,计算剩下这个被试在cluster里的均值。对所有被试重复这个过程,得到所有被试的均值。然后用这些均值再去做ROC。
(2)如果是机器学习的文章中,这种还是挺常见的。因为交叉验证主要是为了衡量模型的泛化性能,也就是如果遇到新的数据表现会如何。如果不把训练集和测试集分离开来,这个表现(比如分类准确率)会有很大的bias。

谢谢Alex,非常清晰。我还有一个小问题,就是我还有一个纯的外部测试集,之前我的做法是将那些有差异的voxel做平均,作为特征给外部测试做ROC分析;

那么在特征筛选的步骤进行交叉验证操作后,每次留一的voxel总体稳定,但是会有些微变化,这时候怎么对外部测试选取特征做分析呢?这种有没有常规的做法?

你有独立的测试集的结果,审稿人还会纠结于你训练集的ROC结果吗?
如果是有独立测试集的话,我觉得还是应该在训练集的所有数据上来提取特征,而且都没有必要做交叉验证了,因为你这里也没有使用机器学习模型,不需要调试超参数(除非显著性水平也当做一个超参数)。

哈哈,好的,我本身的原稿是没有独立测试集。就一个ROC分析,也没做留一法,然后审稿人提出可能存在selection biases的问题,我在修改时就对ROC分析做了留一法,并增加了一个独立外部测试做ROC。

审稿人二审时说独立外部测试是可以的,但是留一法的ROC分析只考虑了被试间的差异,没考虑ROI的问题。同时我的ROC分析只汇报了AUC,没汇报P值。我刚算了下,这个外部测试集的ROC值虽然在0.7以上,但是p值约为0.19左右,不知道作为外部测试行不行;

我感觉好像报告AUC的p值并不是普遍做法,一般来说,p值跟样本量有关,如果你的外部测试集数据样本量少,p值不显著也正常。

还是ROC分析,我有一个更细节的问题。

用SPSS做ROC分析,分析结果提供了渐进性b显著值(P值)和95%的置信区间,我想知道这个P值和置信区间是如何计算出来的呢?

因为有一个p值比0.05大,所以朋友推荐我用置换检验(打乱标签)来计算一下p值,这个东西我可以写个demo来完成。但是我现在很纠结如何汇报这个p值,是按spss的算(我不知道他的原理和采用的方法),还是自己写个demo

我没用过SPSS,所以不清楚它的p值和置信区间是怎么计算的。不过你可以考虑用R来计算p值(verification包)和置信区间(pROC包)。如果你不用R,下面的两个链接也有讲如何计算:

https://stackoverflow.com/questi … s-with-proc-package

https://stats.stackexchange.com/ … area-under-roc?rq=1

另一方面,我觉得如果是用SPSS做的,只要在文中提到SPSS和版本,你不提具体的方法应该审稿人也是不会质疑的,只要能重复你的方法即可。

至于自己写置换检验来计算p值,我可能不会选择这种思路,特别是在已经有现成软件的情况下,因为你需要对自己的方法负责。统计我感觉还是很容易出错的。