我应该如何处理这个二元预测问题?


9

我有一个具有以下格式的数据集。

癌症预测无癌症

有二元结局癌症/无癌症。数据集中的每位医生都看过每位患者,并对患者是否患有癌症做出独立判断。然后,医生会给出他们的诊断正确与否的5分置信度,并在方括号中显示置信度。

我尝试了各种方法来从该数据集中获得良好的预测。

对于我来说,在不考虑医生的置信度的情况下,对所有医生平均而言,效果很好。在上表中,这将为患者1和患者2做出正确的诊断,尽管它会错误地指出患者3有癌症,因为在2-1多数中,医生认为患者3有癌症。

我还尝试了一种方法,其中我们随机抽取两名医生,如果他们彼此不同意,则决定权投给哪个更有信心的医生。这种方法是经济的,因为我们不需要咨询很多医生,但是它也大大提高了错误率。

我尝试了一种相关的方法,在该方法中我们随机选择两名医生,如果他们彼此不同意,我们将随机选择另外两名医生。如果一项诊断至少要进行两次“投票”,那么我们会解决一些问题,以支持该诊断。如果没有,我们将继续抽样更多的医生。这种方法非常经济,不会犯太多错误。

我不禁感到自己正在错过一些更复杂的做事方式。例如,我想知道是否存在某种方法可以将数据集分为训练集和测试集,并找到某种最佳方式来组合诊断,然后查看这些权重在测试集上的表现。一种可能性是某种方法,可以让我减轻一直在试验集上犯错误的医生的体重,也可以减肥以高置信度做出的诊断(置信度确实与此数据集的准确性相关)。

我有许多与此一般说明相符的数据集,因此样本量各不相同,并且并非所有的数据集都与医生/患者有关。但是,在此特定数据集中,有40位医生,每位医生看了108位患者。

编辑:这是我阅读@ jeremy-miles的答案所得到的一些权重的链接

  1. 未加权的结果在第一列中。实际上,在此数据集中,最大置信度值为4,而不是我之前错误地说的5。因此,按照@ jeremy-miles的方法,任何患者可获得的最高未加权评分将是7。这意味着从字面上看,每位医生都以4的置信度断言该患者患有癌症。任何患者均可获得的最低未加权分数是0,这意味着每位医生都以4的置信度断言该患者没有癌症。

  2. Cronbach的Alpha加权。我在SPSS中发现Cronbach的总体Alpha为0.9807。我试图通过更手动的方式计算Cronbach的Alpha值来验证该值是否正确。我创建了所有40位医生的协方差矩阵,并将其粘贴在此处。然后根据我对Cronbach的Alpha公式的理解其中是项目数(这里是医生的“项目”),我通过对协方差矩阵中的所有对角元素求和来计算,并通过对以下元素中的所有元素求和来计算协方差矩阵。然后我得到了α=ķķ-1个1个-σX一世2σŤ2ķσX一世2σŤ2α=4040-1个1个-8.7915200.7112=0.9807然后,我计算了每位医生从移出时将发生的40种不同的Cronbach Alpha结果。数据集。我将对克伦巴赫的Alpha值贡献为负的任何医生的权重加权为零。我为其余医生得出了与他们对克伦巴赫Alpha的积极贡献成正比的权重。

  3. 按项目相关性加权。我计算所有“项目总计”相关性,然后按相关性大小成比例权衡每个医生的体重。

  4. 通过回归系数加权。

我仍然不确定的一件事是如何说哪种方法比另一种“更好”地工作。以前,我一直在计算诸如Peirce技能得分之类的东西,它适用于具有二元预测和二元结果的实例。但是,现在我的预测范围是0到7,而不是0到1。我应该将所有加权分数> 3.50转换为1,将所有加权分数<3.50转换为0吗?


我们可以说No Cancer (3)Cancer (2)吗?那会简化您的问题。
韦恩

1
回复:您的数据结构,最好在不同的列中使用不同的变量(患者是否患有癌症;评估的信心程度)几乎总是更好。如“没有癌症(3)”中所述将它们组合在一起会严重限制您的选择。
rolando2 '16

@Wayne数据的范围从最大可信度的癌症预测到最大可信度Cancer (4)的无癌症预测No Cancer (4)。我们不能说No Cancer (3)Cancer (2)相同,但是可以说有一个连续体,并且该连续体的中间点是Cancer (1)No Cancer (1)
user1205901-恢复莫妮卡

@ rolando2感谢您的建议。我已经重新整理了自己数据文件中的内容,以便将它们分离出来。
user1205901-恢复莫妮卡

1
请注意,您的阈值是可调参数,因此适当的临界值将取决于您的评估标准。由于我不熟悉您的指标,因此我在Google上进行了搜索,实际上,第一个匹配项可能与您有关: 关于Peirce最高技能得分(2007)的注释
GeoMatt22 2016年

Answers:


7

首先,我要看看医生是否同意。您无法单独分析50位医生,因为您会过分拟合模型-一位医生看起来很偶然。

您可以尝试将置信度和诊断力合并为10分制。如果医生说患者没有癌症,并且非常有信心,则为0。如果医生说他们确实患有癌症并且非常有信心,则为9。如果医生说他们没有癌症,并且没有信心,那是5。

当您尝试进行预测时,您需要进行某种回归分析,但是考虑这些变量的因果顺序时,却是另一种方式。患者是否患有癌症是诊断的原因,结果是诊断。

您的行应为患者,列应为医生。您现在遇到了心理计量学中很常见的情况(这就是为什么我添加标签的原因)。

然后看看分数之间的关系。每个病人都有一个平均分数,以及每个医生的分数。平均分数与每位医生的分数呈正相关吗?如果不是,那位医生可能是不可信的(这称为项目与总相关)。有时,您从总分(或平均分)中删除了一位医生,然后查看该医生是否与所有其他医生的均值相关联-这是更正后的项目总相关性。

您可以计算Cronbach的alpha(这是类内相关性的一种形式),而无需每个医生就可以计算出alpha。当您增加一名医生时,Alpha值应该总是上升,因此,如果您在撤职时上升Alpha值,则该医生的等级值得怀疑(这通常不会告诉您与校正后的项目-总相关性有什么不同)。

如果使用R,则在心理包中可使用函数alpha进行此类操作。如果使用Stata,则命令为alpha,在SAS中为proc corr,在SPSS中为不可靠,可靠。

然后,您可以计算一个分数,作为每个医生的平均分数,或者计算加权平均值(通过相关性加权),然后查看该分数是否可以预测真正的诊断。

或者,您可以跳过该阶段,然后分别对每位医生的诊断评分进行回归,并将回归参数视为权重。

随时要求澄清,如果您想要一本书,我喜欢Streiner和Norman的“健康测量量表”。

-编辑:基于OP的附加信息。

哇,这真是Cronbach的alpha值。我唯一看到如此之高的地方是犯了一个错误。

现在,我将进行逻辑回归并查看ROC曲线。

回归加权和相关加权之间的差异取决于您相信医生的反应方式。一些文档通常可能更自信(而不是更加熟练),因此他们可能会更多地使用极限范围。如果要对此进行更正,请使用相关性而不是回归来做到这一点。我可能会通过回归进行加权,因为这将保留原始数据(并且不会丢弃任何信息)。

编辑(2):我在R中运行了逻辑回归模型,以查看每个模型对输出的预测如何。tl / dr:它们之间什么都没有。

这是我的代码:

d <- read.csv("Copy of Cancer data - Weightings.csv")

mrc <- glm(cancer ~ weightrc, data = d, family = "binomial")
mun <- glm(cancer ~ unweight, data = d, family = "binomial")
mca <- glm(cancer ~ weightca, data = d, family = "binomial")
mic <- glm(cancer ~ weightic, data = d, family = "binomial")

d$prc <- predict(mrc, type = "response")
d$pun <- predict(mun, type = "response")
d$pca <- predict(mca, type = "response")
d$pic <- predict(mic, type = "response")

par(mfrow = c(2, 2))
roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

4条ROC曲线

并输出:

> par(mfrow = c(2, 2))
> roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$prc, ci = TRUE,     plot = TRUE)

Data: d$prc in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9831
95% CI: 0.9637-1 (DeLong)
> roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pun, ci = TRUE,     plot = TRUE)

Data: d$pun in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9808
95% CI: 0.9602-1 (DeLong)
> roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pca, ci = TRUE,     plot = TRUE)

Data: d$pca in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9854
95% CI: 0.9688-1 (DeLong)
> roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pic, ci = TRUE,     plot = TRUE)

Data: d$pic in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9822
95% CI: 0.9623-1 (DeLong)

1
很好。而且,在您的推理允许的情况下,有些医生可能会在克服趋势的同时提供独特的见解,从而使alpha恶化。
rolando2

@ jeremy-miles感谢您的回答,以及提供有关此问题的友好建议。我尝试实现您的建议,并编辑了OP,以发布一些结果。我想知道的主要问题是,我是否正确解释了您的帖子,以及显示某些汇总方法在预测结果方面要比其他方法更好地工作,将需要做些什么。
user1205901-恢复莫妮卡

感谢您发布数据。我待会再看。(您使用的是什么软件?)
Jeremy Miles

@JeremyMiles感谢您发布此编辑!我正在使用MATLAB,但是由于您已经发布了R代码,因此我对R有了足够的了解,可以上调并使用它。我计算出SPSS中的Cronbach的Alpha-与R值不同吗?
user1205901-恢复莫妮卡

1
是的,这就是我的想法。因此,每个医生的体重都不同。
杰里米·迈尔斯

2

两个开箱即用的建议:

  1. 您可以对逻辑回归的损失函数使用权重,以便非常确定患者患有P = 1癌症的医生所获得的影响会增加两倍,而另一位声称他患有P = 0.75癌症的医生将产生双重影响。不要忘记将概率正确地转换为权重。
  2. 经常被忽略的一系列模型是排名模型。在排名中,有三大类:列表式,逐点式和成对排名,具体取决于您输入的内容。听起来您可以使用逐点排序

您能提出一种将概率正确转换为权重的方法吗?我尝试使用谷歌搜索这个概念,但是找不到有关如何执行此操作的明确建议。
user1205901-恢复莫妮卡

@ user1205901,我想到了一个非常简单的类似:让P=由医生给出患癌的可能性,然后(以python表示):y=[1 if p >= 0.5 else 0 for p in P]w=[abs(p-0.5)*2 for p in P]。然后训练模型:LogisticRegression().fit(X,y,w)
里卡多·克鲁兹

在损失函数中,例如,如果不是癌症,这将使权重增加一倍,达到0.1到0.2,而不是0.2(0.1-> 0.8和0.2-> 0.6)。如果医生不确定(P〜0.5),则观察结果几乎对损失无任何贡献。无论他使用哪种模型,都需要支持向损失函数中添加成本向量,大多数模型都支持这种向量。我不知道这有什么好处,但是尝试似乎很简单。他需要先指定一个指标。损失函数可以进一步适合他想要最大化的任何度量。
里卡多·克鲁兹

2

(这超出了我的专业知识范围,因此Jeremy Miles回答可能更可靠。)

这是一个主意。

i=1Nci{0,1}j=1mdij{0,1}

dijci

p[C]1个ñ一世C一世

p[dĴ|C]一世d一世ĴC一世一世C一世
ĴC一世

p[dĴ|CwĴ]一世d一世Ĵw一世ĴC一世一世w一世ĴC一世
w一世Ĵ0d一世Ĵ

w[01个]

p[dw]=dw1个-d1个-w
d=0

0^0=10^0=NaNw01个ķ{1个ķ}w=ķ/ķ+1个


在@Wayne的评论中:如果您说的话No Cancer (3) = Cancer (2),这与我使用加权模型是一致的。w[ķ]=ķķ25=1个-35No Cancer (3) = Cancer (3)w[ķ]=ķķ+1个36=1个-36

p[dĴ|CwĴ]一世d一世Ĵw一世ĴC一世一世w一世ĴC一世

dδ[01个]d{01个}δ一世=w一世d一世=1个+1个-w一世d一世=0δ=[0.80.40.8]p[Cδ]=Cδ¯=0.8+0+0.83=230.8p[2]=C¯=23p[δ]=δ¯=560.8p[C|δ]=p[Cδ]/p[δ]=0.8p[δ|C]=p[Cδ]/p[C]=0.8

0

从您的问题看来,您要测试的是您的测量系统。在过程工程领域,这将是属性测量系统分析或MSA。

该链接提供了有关所需样本量的一些有用信息,并进行了计算以进行此类研究。https://www.isixsigma.com/tools-templates/measurement-systems-analysis-msa-gage-rr/making-sense-attribute-gage-rr-calculations/

通过这项研究,您还需要医生至少两次诊断相同信息的相同患者。

您可以采用以下两种方法之一进行这项研究。您可以使用简单癌症/无癌症评级来确定医生之间以及每个医生之间的协议。理想情况下,他们还应该能够以相同的置信度进行诊断。然后,您可以使用完整的10分制来测试每个医生之间的协议。(每个人都应同意癌症(5)具有相同的等级,没有癌症(1)具有相同的等级,&c。)

链接网站中的计算很容易在您用于测试的任何平台上进行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.