運行邏輯回歸時,我確實得到了整個模型擬合 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
);
