キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.

Get the free JMP Student Edition for qualified students and instructors at degree granting institutions.

言語を選択 翻訳バーを非表示
最初に公開されたスレッドを表示

AUC p 値を生成する方法

eliyahu100
Level III

ロジスティック回帰を実行すると、モデル全体のフィット p 値が得られます。それにもかかわらず、私が読んだ多くの論文では、AUC の p 値について具体的に報告しています。私の理解では、これは、曲線の下の領域が実際には 0.50 に等しいという帰無仮説をテストする p 値です。 他のソフトウェアはデフォルトでこれを提供しているようです。 この件についてのご提案をいただければ幸いです。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

1 件の受理された解決策

受理された解決策
julian
Community Manager Community Manager

Re: AUC p 値を生成するにはどうすればよいですか

やあ@eliyahu100

 

(TLDR: ブートストラップとランダム化テストをさまざまな方法で使用して、AUCroc の経験的な p 値を得ることができます。これらを通じて、AUCroc の p 値が最終的にモデル テスト全体になる理由を確認できます)。

 

私の第一印象は、AUCroc のテストから得られる可能性のある p 値は、分類子のモデル テスト全体 (ロジスティック回帰であろうとなかろうと) と概念的に同等であるということです。 つまり、AUCroc が帰無仮説 (ランダム分類) で予想されるものと異なるという証拠があるかどうかをテストすることは、モデルが偶然だけで予想されるよりも多くのエラーを説明 (つまり、分類) するかどうかに等しいように見えます。 そうは言っても、AUCroc p 値を計算する方法を説明するさまざまな方法を見つけることができました (例:ハジアン・ティラキ、2013年)、そして、JMP はデフォルトでこれらの計算を実行しないと言っても過言ではありません (もちろん、スクリプトを使用すれば何でも可能ですが)。 しかし、これらの式を調べてみると、これらの仮説検定のパフォーマンスとそれらが行う仮定について疑問に思いました. JMP Pro にアクセスできる場合は、AUCroc の p 値を取得するために使用される大規模なサンプル/正規近似式よりも優れている可能性が高い、今すぐできることがあります。それは、ブートストラップおよび/またはシミュレーション/ランダム化テストです。 これを行う方法は次のとおりです。

 

1. 分類器モデルを当てはめます。 Big Class を使用し、身長で性別を予測します。 赤の三角形から AUCroc を明らかにします。undefined

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. まず、Bootstrap を試してみましょう。 報告された AUCroc 値を右クリックし、[ブートストラップ] を選択します。 少なくとも 2500 個のブートストラップ サンプルを使用します。私は分数の重みが好きです。特に、相対度数が低いカテゴリがある場合はそうです。undefined

 

これにより、ブートストラップされた AUCroc 値のテーブルが返されます。これは、テーブルから置換を使用してサンプリングし、モデルと AUCroc を再計算して取得した値を反復ごとに保存することで得られるものです。 本質的に、指定された分類子の AUCroc のサンプリング分布が得られました。 p 値を取得することは、カウントするだけの問題になりました。 しかし、それはJMPに任せましょう。

 

3. [分析] > [分布] を選択し、AUC を Y に設定し、[ヒストグラムのみ] をオンにして、[OK] をクリックします。
undefined

これで、AUCroc のブートストラップ信頼限界が得られました。これはレポートに最適です。さらに、最初に取得した AUCroc が特定の値と異なるかどうかを知りたい場合は、null 値が信頼区間内にあるかどうかを確認するだけで済みます。選択された信頼レベル。

 

しかし、あなたはp値を求めました。 文字通り、2500 個のサンプルから 0.50 以下の AUCroc を取得した回数を数えることができますが、もっと良い結果が得られます。 表に BootID 列があるため、JMP はこの分布レポートに特別な出力を追加しています。 JMP は、表の最初の行 (元のサンプル推定値) と組み合わせてその列を操作する方法を知っています。 必要に応じて、これをブートストラップではなく一種のランダム化テストにするように変更できます (後で比較のために適切なランダム化テストを行います)。 2 つの簡単な変更を行うだけです: 列の名前を「BootID•」から「SimID•」に変更し、表の元の見積もりの値をテスト対象の値に変更します...つまり、 AUC 列の最初の行を 0.50 に変更します。 テーブルの上部は次のようになります。undefined

 

[分析] > [分布] を起動し、再び Y に AUC を入力して、ヒストグラムのみを確認します。 次の出力が得られます。undefined

JMP は、ブートストラップの結果ではなく、「シミュレーション結果」を提示していることに注意してください。 これは、BootID 列の変更によるものです (SimID は、右クリックのシミュレートで提供されるものです)。 ここで少し手を加えているので、これは通常、JMP がシミュレーション結果をレポートする方法ではないことを知っておいてください (正常にどのように機能するかは次で説明します)。ただし、この場合、JMP は、帰無仮説の値を配置した場所に線を引きました。 Y<=Y0 の p 値では、AUCroc が 0.50 以下の無作為サンプル (元のデータから) を取得した時間の割合を確認できます。 これは、null として 0.50 を指定した場合の経験的な片側 p 値です。 しかし、これに対する別のアプローチが何か興味深く重要なものをもたらす可能性があるので、ここで止めません。

 

経験的な p 値が望ましい結果である場合、別の方法 (率直に言って、より良い方法) は、報告された AUCroc で右クリック > シミュレートを使用することです。 ブートストラップと同様に、テーブルからの置換を伴うリサンプリングを行います (順列テストを行う場合は、置換を伴わない)。 これを右クリック > シミュレートとして行うには、置換を伴うサンプリングを処理するシミュレーター用の新しい数式列を作成する必要があります。 これを行う簡単な方法は、テーブルの Y 列を選択し、ヘッダー行を右クリックして、[新しい数式列] > [ランダム] > [置換を含むサンプル] を選択することです。undefined

 

これにより、新しい列 (Resample[sex]) が作成され、この列の数式が再生成されるたびに、M と F のラベルが観測された基本レートに基づいてテーブルにランダムに割り当てられます (つまり、置換によるサンプリング)。

 

次に、ロジスティック回帰に戻り、レポートで AUCroc を右クリックしますが、Bootstrap を選択するのではなく、Simulate を選択します。 レポートで使用される列の代わりに数式列を選択するよう求められます。 この場合、sex と Resample[sex] を選択します。 少なくとも 2500 のサンプルを実行しますが、この例では、結果の統計のより正確な見積もりを得るために 10k を実行します。undefined

JMP が終了すると、ブートストラップと非常によく似たテーブルが与えられますが、現在得られているのは、元のデータが与えられた場合の AUCroc のサンプリング分布ではなく、与えられた AUCroc のサンプリング分布です。いいえ性別と身長の関係を示していますが、性別の基本レートを尊重しています (テーブルの行に M と F のラベルをランダムに割り当てるとどうなるかをシミュレートしているため、これは帰無仮説)。[分析] > [分布] を選択し、Y の代わりに AUC を配置しますが、ここで注目すべき重要な点があるため、今回はヒストグラムのみのチェックボックスをオンにしないことにします。

 undefined

経験的な p 値が再び報告されますが、今回は AUCroc の推定値が 0.50 に向かって動きます (ただし、実際には 0.50 ではありません。理由については後で説明します)。 この場合も、帰無仮説の下で AUCroc に何が起こるかをシミュレートしているので、これは理にかなっています。 ここでの経験的な p 値は、このサンプリング分布から、元の推定値を超える推定値を取得する頻度を報告しています (これは、p 値の一般的な定義です。値)。 ここで注意すべき点が 2 つあります。

 

1. 経験的な p 値は 0.0190 で、元のモデル全体のテストの p 値と同じです。undefinedこの p 値が近いのは偶然ではありませんが、数値的に小数点以下 4 桁まで同じであることは幸運なことです。 実際、それらは異なっており、さまざまな方法で取得されますが、冒頭で述べたように、AUCroc と偶然だけで期待されることのテストは、モデル全体のテストと概念的に同じものです。 .

 

2. ここでのサンプリング分布の平均は 0.50 ではないことに注意してください。 つまり、ここでの期待値は 0.50 ではないため、与えられた経験的 p 値は 0.50 の null に関するものではなく、この場合は約 0.57 の null に関するものです。 これは、このデータセットの男性と女性の比率によるものです。身長に関してランダムに推測しているだけで、女性よりも男性の方が多いことがわかっている場合、男性をより頻繁に推測し、50% を超える分類精度を達成できます。 (私たちのモデル切片はこれを説明します)。 補足: このサンプリング分布は明らかに異常、それでも、大規模なサンプル近似式 (最初に参照したものなど) から得られた p 値は、このサンプリング分布が正常であると信じ込ませます。 単純に平均と標準偏差を使用して p 値ルックアップを実行すると、p = 0.0190 ではなく、p = 0.0033 が得られます。 これは大きな違いであり、無作為化テストが優れている大きな理由です。分布の形状に関する仮定がないのです。  undefined

 

もう 1 点: ブートストラップ テストとランダム化テストの違いは重要ですが、似たような情報を提供することはできます。 ブートストラップで、BootI を変更しましたD JMP をハックして実験的な p 値レポートを提供するために列を SimID に変更し、表の値を変更して null の AUCroc を正確に 0.50 に設定しました。 得られたのは経験的なp値ですが、サンプル推定の観点から(信頼区間がサンプル推定の観点から見た方法で)それについて調べました。 右クリック Simulate によるランダム化テストでは、null の観点から、AUCroc の帰無仮説の下で jmp にサンプリング分布を生成させ、元の推定値をそれと比較しました。 どちらも正確ではありませんが、最終的に微妙に異なる結果が得られるため、両方を理解することをお勧めします。

 

ただし、最大の違いは、各アプローチが採用する統計的観点の概念的な違いではなく、ブートストラップ バリアントのヌルとして 0.50 を指定することです。 ブートストラップ テーブルを使用して、帰無仮説の値を無作為化テストから得た帰無値より下の値 (0.57079) に設定するとどうなるか疑問に思われるかもしれません。undefined

 

私のように、ランダム性のランダム性が確実であるという信者であれば、同じ null に対してブートストラップされたサンプルから生成された経験的な p 値が、実際のランダム化テストとかなり似ていることを期待する必要があります。 結局のところ、彼らは概念的に同じものを異なる観点から見積もっているのではないでしょうか?undefined

p = 0.0192 です。 ランダム性への信頼が支持されました。:)

 

これがいくらか役立つことを願っています!

 

 

@ジュリアン

4件の返信4
txnelson
Super User

Re: AUC p 値を生成するにはどうすればよいですか

Statistics Index には、これを行う方法の例があります。Statistics Index に慣れていない場合は、次のサイトから入手できます。

ヘルプ==>統計インデックス

インデックス エントリから取得した例を次に示します。

Names Default To Here( 1 );
Open(
 "$SAMPLE_DATA/Big Class.jmp"
);
Logistic(
 Y( :sex ),
 X( :height ),
 Positive Level( "F" ),
 ROC Curve
);

undefined

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

dale_lehman
Level VII

Re: AUC p 値を生成するにはどうすればよいですか

問題は AUC をどう求めるかではなく、0.5 と有意に異なるかどうかの ap 値をどのように決定するかだと思います。私は p 値の大ファンではありませんが、答えも知りたいです。これを提供するテストがあるようですが、それを取得するための JMP のどこにもありません。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

eliyahu100
Level III

Re: AUC p 値を生成するにはどうすればよいですか

実際、私の質問は p 値に関するものでしたが、これはまだ解決されていません。どんな助けでも感謝します。


@dale_lehman書きました:

問題は AUC をどう求めるかではなく、0.5 と有意に異なるかどうかの ap 値をどのように決定するかだと思います。私は p 値の大ファンではありませんが、答えも知りたいです。これを提供するテストがあるようですが、それを取得するための JMP のどこにもありません。


 

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

julian
Community Manager Community Manager

Re: AUC p 値を生成するにはどうすればよいですか

やあ@eliyahu100

 

(TLDR: ブートストラップとランダム化テストをさまざまな方法で使用して、AUCroc の経験的な p 値を得ることができます。これらを通じて、AUCroc の p 値が最終的にモデル テスト全体になる理由を確認できます)。

 

私の第一印象は、AUCroc のテストから得られる可能性のある p 値は、分類子のモデル テスト全体 (ロジスティック回帰であろうとなかろうと) と概念的に同等であるということです。 つまり、AUCroc が帰無仮説 (ランダム分類) で予想されるものと異なるという証拠があるかどうかをテストすることは、モデルが偶然だけで予想されるよりも多くのエラーを説明 (つまり、分類) するかどうかに等しいように見えます。 そうは言っても、AUCroc p 値を計算する方法を説明するさまざまな方法を見つけることができました (例:ハジアン・ティラキ、2013年)、そして、JMP はデフォルトでこれらの計算を実行しないと言っても過言ではありません (もちろん、スクリプトを使用すれば何でも可能ですが)。 しかし、これらの式を調べてみると、これらの仮説検定のパフォーマンスとそれらが行う仮定について疑問に思いました. JMP Pro にアクセスできる場合は、AUCroc の p 値を取得するために使用される大規模なサンプル/正規近似式よりも優れている可能性が高い、今すぐできることがあります。それは、ブートストラップおよび/またはシミュレーション/ランダム化テストです。 これを行う方法は次のとおりです。

 

1. 分類器モデルを当てはめます。 Big Class を使用し、身長で性別を予測します。 赤の三角形から AUCroc を明らかにします。undefined

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. まず、Bootstrap を試してみましょう。 報告された AUCroc 値を右クリックし、[ブートストラップ] を選択します。 少なくとも 2500 個のブートストラップ サンプルを使用します。私は分数の重みが好きです。特に、相対度数が低いカテゴリがある場合はそうです。undefined

 

これにより、ブートストラップされた AUCroc 値のテーブルが返されます。これは、テーブルから置換を使用してサンプリングし、モデルと AUCroc を再計算して取得した値を反復ごとに保存することで得られるものです。 本質的に、指定された分類子の AUCroc のサンプリング分布が得られました。 p 値を取得することは、カウントするだけの問題になりました。 しかし、それはJMPに任せましょう。

 

3. [分析] > [分布] を選択し、AUC を Y に設定し、[ヒストグラムのみ] をオンにして、[OK] をクリックします。
undefined

これで、AUCroc のブートストラップ信頼限界が得られました。これはレポートに最適です。さらに、最初に取得した AUCroc が特定の値と異なるかどうかを知りたい場合は、null 値が信頼区間内にあるかどうかを確認するだけで済みます。選択された信頼レベル。

 

しかし、あなたはp値を求めました。 文字通り、2500 個のサンプルから 0.50 以下の AUCroc を取得した回数を数えることができますが、もっと良い結果が得られます。 表に BootID 列があるため、JMP はこの分布レポートに特別な出力を追加しています。 JMP は、表の最初の行 (元のサンプル推定値) と組み合わせてその列を操作する方法を知っています。 必要に応じて、これをブートストラップではなく一種のランダム化テストにするように変更できます (後で比較のために適切なランダム化テストを行います)。 2 つの簡単な変更を行うだけです: 列の名前を「BootID•」から「SimID•」に変更し、表の元の見積もりの値をテスト対象の値に変更します...つまり、 AUC 列の最初の行を 0.50 に変更します。 テーブルの上部は次のようになります。undefined

 

[分析] > [分布] を起動し、再び Y に AUC を入力して、ヒストグラムのみを確認します。 次の出力が得られます。undefined

JMP は、ブートストラップの結果ではなく、「シミュレーション結果」を提示していることに注意してください。 これは、BootID 列の変更によるものです (SimID は、右クリックのシミュレートで提供されるものです)。 ここで少し手を加えているので、これは通常、JMP がシミュレーション結果をレポートする方法ではないことを知っておいてください (正常にどのように機能するかは次で説明します)。ただし、この場合、JMP は、帰無仮説の値を配置した場所に線を引きました。 Y<=Y0 の p 値では、AUCroc が 0.50 以下の無作為サンプル (元のデータから) を取得した時間の割合を確認できます。 これは、null として 0.50 を指定した場合の経験的な片側 p 値です。 しかし、これに対する別のアプローチが何か興味深く重要なものをもたらす可能性があるので、ここで止めません。

 

経験的な p 値が望ましい結果である場合、別の方法 (率直に言って、より良い方法) は、報告された AUCroc で右クリック > シミュレートを使用することです。 ブートストラップと同様に、テーブルからの置換を伴うリサンプリングを行います (順列テストを行う場合は、置換を伴わない)。 これを右クリック > シミュレートとして行うには、置換を伴うサンプリングを処理するシミュレーター用の新しい数式列を作成する必要があります。 これを行う簡単な方法は、テーブルの Y 列を選択し、ヘッダー行を右クリックして、[新しい数式列] > [ランダム] > [置換を含むサンプル] を選択することです。undefined

 

これにより、新しい列 (Resample[sex]) が作成され、この列の数式が再生成されるたびに、M と F のラベルが観測された基本レートに基づいてテーブルにランダムに割り当てられます (つまり、置換によるサンプリング)。

 

次に、ロジスティック回帰に戻り、レポートで AUCroc を右クリックしますが、Bootstrap を選択するのではなく、Simulate を選択します。 レポートで使用される列の代わりに数式列を選択するよう求められます。 この場合、sex と Resample[sex] を選択します。 少なくとも 2500 のサンプルを実行しますが、この例では、結果の統計のより正確な見積もりを得るために 10k を実行します。undefined

JMP が終了すると、ブートストラップと非常によく似たテーブルが与えられますが、現在得られているのは、元のデータが与えられた場合の AUCroc のサンプリング分布ではなく、与えられた AUCroc のサンプリング分布です。いいえ性別と身長の関係を示していますが、性別の基本レートを尊重しています (テーブルの行に M と F のラベルをランダムに割り当てるとどうなるかをシミュレートしているため、これは帰無仮説)。[分析] > [分布] を選択し、Y の代わりに AUC を配置しますが、ここで注目すべき重要な点があるため、今回はヒストグラムのみのチェックボックスをオンにしないことにします。

 undefined

経験的な p 値が再び報告されますが、今回は AUCroc の推定値が 0.50 に向かって動きます (ただし、実際には 0.50 ではありません。理由については後で説明します)。 この場合も、帰無仮説の下で AUCroc に何が起こるかをシミュレートしているので、これは理にかなっています。 ここでの経験的な p 値は、このサンプリング分布から、元の推定値を超える推定値を取得する頻度を報告しています (これは、p 値の一般的な定義です。値)。 ここで注意すべき点が 2 つあります。

 

1. 経験的な p 値は 0.0190 で、元のモデル全体のテストの p 値と同じです。undefinedこの p 値が近いのは偶然ではありませんが、数値的に小数点以下 4 桁まで同じであることは幸運なことです。 実際、それらは異なっており、さまざまな方法で取得されますが、冒頭で述べたように、AUCroc と偶然だけで期待されることのテストは、モデル全体のテストと概念的に同じものです。 .

 

2. ここでのサンプリング分布の平均は 0.50 ではないことに注意してください。 つまり、ここでの期待値は 0.50 ではないため、与えられた経験的 p 値は 0.50 の null に関するものではなく、この場合は約 0.57 の null に関するものです。 これは、このデータセットの男性と女性の比率によるものです。身長に関してランダムに推測しているだけで、女性よりも男性の方が多いことがわかっている場合、男性をより頻繁に推測し、50% を超える分類精度を達成できます。 (私たちのモデル切片はこれを説明します)。 補足: このサンプリング分布は明らかに異常、それでも、大規模なサンプル近似式 (最初に参照したものなど) から得られた p 値は、このサンプリング分布が正常であると信じ込ませます。 単純に平均と標準偏差を使用して p 値ルックアップを実行すると、p = 0.0190 ではなく、p = 0.0033 が得られます。 これは大きな違いであり、無作為化テストが優れている大きな理由です。分布の形状に関する仮定がないのです。  undefined

 

もう 1 点: ブートストラップ テストとランダム化テストの違いは重要ですが、似たような情報を提供することはできます。 ブートストラップで、BootI を変更しましたD JMP をハックして実験的な p 値レポートを提供するために列を SimID に変更し、表の値を変更して null の AUCroc を正確に 0.50 に設定しました。 得られたのは経験的なp値ですが、サンプル推定の観点から(信頼区間がサンプル推定の観点から見た方法で)それについて調べました。 右クリック Simulate によるランダム化テストでは、null の観点から、AUCroc の帰無仮説の下で jmp にサンプリング分布を生成させ、元の推定値をそれと比較しました。 どちらも正確ではありませんが、最終的に微妙に異なる結果が得られるため、両方を理解することをお勧めします。

 

ただし、最大の違いは、各アプローチが採用する統計的観点の概念的な違いではなく、ブートストラップ バリアントのヌルとして 0.50 を指定することです。 ブートストラップ テーブルを使用して、帰無仮説の値を無作為化テストから得た帰無値より下の値 (0.57079) に設定するとどうなるか疑問に思われるかもしれません。undefined

 

私のように、ランダム性のランダム性が確実であるという信者であれば、同じ null に対してブートストラップされたサンプルから生成された経験的な p 値が、実際のランダム化テストとかなり似ていることを期待する必要があります。 結局のところ、彼らは概念的に同じものを異なる観点から見積もっているのではないでしょうか?undefined

p = 0.0192 です。 ランダム性への信頼が支持されました。:)

 

これがいくらか役立つことを願っています!

 

 

@ジュリアン

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

おすすめの記事

No recommendations found