运行逻辑回归时,我确实得到了整个模型拟合 p 值。尽管如此,在我读到的许多论文中,它们都专门报告了 AUC 的 p 值,据我了解,这是一个检验零假设的 p 值,即曲线下面积确实等于 0.50。 其他软件似乎默认提供此功能。 我将不胜感激你对此事的建议。
你好@eliyahu100 ,
(TLDR:可以以不同的方式使用引导和随机化测试来获得 AUCroc 的经验 p 值,通过这些我们可以看到为什么 AUCroc 的 p 值最终成为整个模型测试)。
我的第一印象是,从 AUCroc 测试中获得的任何 p 值在概念上等同于分类器的整个模型测试(无论是逻辑回归还是其他)。 也就是说,测试是否有证据表明 AUCroc 与原假设(随机分类)下的预期不同似乎等同于模型是否解释了比偶然预期更多的错误(即分类)。 也就是说,我能够找到各种描述如何计算 AUCroc p 值的方法(例如Hajian-Tilaki, 2013 ),我们可以肯定地说 JMP 默认情况下不执行这些计算(当然,通过脚本可以进行任何操作)。 然而,通过查看这些公式让我想知道这些假设检验的性能和它们所做的假设。 如果您可以访问 JMP Pro,您现在就可以做一些事情,这可能会优于用于获取 AUCroc p 值的大样本/正态近似公式,这就是自举和/或模拟/随机化测试。 我们是这样做的:
1. 拟合分类器模型。 我将使用 Big Class,并根据身高预测性别。 从红三角揭示 AUCroc。
Open("$SAMPLE_DATA\Big Class.jmp");
Logistic(Y( :sex ),X( :height ), Positive Level( "M" ),
Logistic Plot( 0 ), ROC Curve( 1 ),
SendToReport(
Dispatch( {}, "Whole Model Test", OutlineBox, {Close( 1 )} ),
Dispatch( {}, "Parameter Estimates", OutlineBox, {Close( 1 )} )
));
2. 首先,让我们尝试使用 Bootstrapping。 右键单击报告的 AUCroc 值,然后选择 Bootstrap。 使用至少 2500 个 bootstrap 样本,我喜欢分数权重,尤其是当你有任何相对频率较低的类别时。
这将返回一个自举 AUCroc 值表——您从表中进行替换抽样并重新计算模型和 AUCroc,在每次迭代中存储您获得的值。 本质上,您现在拥有给定分类器的 AUCroc 抽样分布。 获得 p 值现在只是一个计数问题。 但是,让我们让 JMP 来做吧。
3. Analyze > Distribution,然后将AUC设为Y,并勾选“Histograms only”,然后点击OK:

您现在有了 AUCroc 的 bootstrap 置信限度,这非常适合报告,此外,如果您想知道您最初获得的 AUCroc 是否与特定值不同,您只需要查看该空值是否在您的置信区间内选择的置信水平。
但是,您要求的是 p 值。 我们可以从字面上数出在 2500 个样本中有多少次我们获得了 0.50 或更低的 AUCroc,但我们可以做得更好。 JMP 正在向该分布报告添加特殊输出,因为您的表中有一个 BootID 列。 JMP 知道如何将该列与表格中的第一行(原始样本估计值)结合使用。 如果我们愿意,我们可以改变周围的情况,使它成为一种随机化测试而不是引导程序(我们稍后将进行适当的随机化测试以进行比较)。 我们只需要进行两个简单的更改:将列“BootID•”重命名为“SimID•”并将表中的原始估计值更改为您希望测试的值...即更改值AUC 列的第一行到 0.50。 这是您的表格顶部现在的样子:
现在启动分析 > 分布,再次为 Y 放入 AUC,并仅检查直方图。 我们将得到以下输出:
请注意,JMP 向我们展示的是“模拟结果”而不是自举结果。 这是由于BootID列的变化(SimID是右键模拟提供的)。 我们在这里做了一些小改动,所以要知道这不是 JMP 报告模拟结果的通常方式(接下来我们将看到它是如何正常工作的),但在这种情况下,JMP 已经为您放置原假设值的位置画了一条线AUCroc (0.50),并且在 Y<=Y0 的 p 值中,您可以看到获得 AUCroc 小于或等于 0.50 的随机样本(来自原始数据)的时间比例。 这是您的经验单尾 p 值,给定 0.50 作为您的空值。 但是,我们不要停在这里,因为另一种方法可以产生一些有趣和重要的东西。
如果经验 p 值是我们想要的结果,我们可以采用另一种方法(坦率地说,更好的方法),即对报告的 AUCroc 使用右键单击 > 模拟。 与 Bootstrapping 非常相似,我们将涉及使用表中的替换进行重采样(如果我们希望进行排列测试,则不使用替换)。 为了通过右键单击 > 模拟来执行此操作,我们需要为模拟器创建一个新的公式列,用于处理替换采样。 一种简单的方法是选择表格中的 Y 列,右键单击标题行 > 新建公式列 > 随机 > 替换样本。
这会生成一个新列 (Resample[sex]),每次重新重新计算此列的公式时,都会根据观察到的基本比率(即有放回的抽样)将 M 和 F 的标签随机分配给表。
接下来,让我们回到我们的逻辑回归并在报告中右键单击 AUCroc,但我们没有选择 Bootstrap,而是选择 Simulate。 系统将提示我们选择一个公式列来替换我们报告中使用的列。 在这种情况下,我会选择 sex 和 Resample[sex]。 至少做 2500 个样本,但对于这个例子,我会做 10k,这样我们就可以更精确地估计结果统计数据。
JMP 完成后,我们得到了一个与 bootstrap 非常相似的表,但我们现在拥有的不是给定原始数据的 AUCroc 的采样分布,而是给定的 AUCroc 的采样分布不性别和身高之间的关系,但尊重性别的基本比率(因为我们正在模拟如果我们将 M 和 F 的标签随机分配给我们表中的行会发生什么 - 这是原假设)。我将选择“分析”>“分布”,将 AUC 置于 Y 中,但这次我们不要仅选中“直方图”框,因为这里有一些重要事项需要注意:

我们的经验 p 值再次报告,但这次我们对 AUCroc 的估计值徘徊在 0.50(但实际上不是 0.50,我们会回到原因),而从 bootstrap 开始,它们徘徊在我们观察到的估计值附近。 同样,在这种情况下,我们模拟了原假设下 AUCroc 发生的情况,因此这应该是有道理的。 这里的经验 p 值报告了我们从这个抽样分布中获得超过我们原始估计值的估计值的频率(这是我们对 p 值的典型定义:我们的估计值有多大可能仅由机会产生值)。 这里需要注意两点:
1. 我们的经验 p 值为 0.0190,与原始整个模型测试的 p 值相同。
这个 p 值接近并非偶然,尽管就这一点而言幸运的是它们在数字上与小数点后 4 位相同。 事实上,它们是不同的,并且以不同的方式获得,但正如我在开始时所说的,AUCroc 与偶然预期的测试在概念上与整个模型测试是一回事:我们分类比偶然更好吗? .
2. 请注意,此处的抽样分布均值不是 0.50。 也就是说,这里的预期值不是 0.50,因此给出的经验 p 值不是关于零值 0.50,而是零值,在这种情况下,大约是 0.57。 这是由于该数据集中男性和女性的比例——如果我们只是随机猜测身高,但知道男性多于女性,我们可以更频繁地猜测男性,并且分类准确率超过 50% (我们的模型截距说明了这一点)。 旁注:注意这个抽样分布是绝对不正常,但是从大样本近似公式(如我在开始时引用的公式)中获得的 p 值会让您相信这种抽样分布是正态的。 如果我们简单地使用均值和标准差并以这种方式执行 p 值查找,我们得到 p = 0.0033,而不是 p = 0.0190。 这是一个很大的区别,也是随机化测试很好的一个重要原因:没有关于分布形状的假设。 
还有一点:引导测试和随机化测试之间的差异很重要,即使它们可以提供看似相似的信息。 在引导程序中,我们更改了 BootI丁列为 SimID 以破解 JMP 以提供经验 p 值报告,并更改表中的值以将空 AUCroc 精确设置为 0.50。 我们得到的是一个经验 p 值,但我们是从样本估计的角度出发的(就像置信区间是从样本估计的角度来看的那样)。 对于通过右键单击 Simulate 进行的随机化测试,我们采用零的视角,我们允许 jmp 生成 AUCroc 零假设下的抽样分布,然后将我们的原始估计与其进行比较。 这些都不是更准确,但它们最终会给你带来微妙的不同,理解两者是很好的。
然而,最大的区别不是每种方法所采用的统计角度的概念差异,而是我们的 bootstrap 变体中将 0.50 指定为空值。 您可能想知道,如果我们使用 bootstrap 表并将零假设值设置为我们从随机化测试中获得的零值 (0.57079) 下的值,会怎样?
好吧,如果你像我一样相信随机性的随机性是确定的,你应该期望我们的经验 p 值是从针对相同空值的自举样本生成的,与实际的随机化测试非常相似。 毕竟,他们不是在概念上估计同一件事,只是从不同的角度来看吗?
看看那个,p = 0.0192。 坚持随机性的信念。:)
我希望这对某些人有所帮助!
@朱利安
事实上,我的问题是关于 p 值的,这仍然没有解决。任何帮助都会得到帮助。
@dale_lehman写道:
我认为问题不在于如何获得AUC,而在于如何确定p值是否与0.5有显着差异。虽然我不太喜欢 p 值,但我也想知道答案。似乎确实有一个测试提供了这个,但我在 JMP 中看不到任何地方可以获得它。
我认为问题不在于如何获得AUC,而在于如何确定p值是否与0.5有显着差异。虽然我不太喜欢 p 值,但我也想知道答案。似乎确实有一个测试提供了这个,但我在 JMP 中看不到任何地方可以获得它。
统计索引有一个如何做到这一点的例子。如果您不熟悉统计索引,请访问:
帮助==>统计索引
这是取自索引条目的示例
Names Default To Here( 1 );
Open(
"$SAMPLE_DATA/Big Class.jmp"
);
Logistic(
Y( :sex ),
X( :height ),
Positive Level( "F" ),
ROC Curve
);
