このバイナリ予測問題にどのように取り組むべきですか?


9

次の形式のデータセットがあります。

がんの予測がんなし

二元的転帰がん/がんなしがあります。データセット内のすべての医師は、すべての患者を診察し、患者ががんであるかどうかについて独立した判断を下しています。医師は、自分の診断が正しいことを5のうちの信頼レベルで示し、括弧内に信頼レベルが表示されます。

このデータセットから適切な予測を取得するために、さまざまな方法を試しました。

医師の信頼水準を無視して、医師全体の平均をとることは、私にとってはかなりうまくいきます。上の表では、患者1と患者2に対して正しい診断が得られますが、患者3が癌であると誤って言っているはずです。

2人の医師を無作為に抽出する方法も試しました。2人の医師が互いに同意しない場合は、どちらがより自信がある医師に決定票が投じられます。この方法は、多くの医師に相談する必要がないという点で経済的ですが、エラー率もかなり高くなります。

私は2人の医師をランダムに選択する関連する方法を試しました。彼らが互いに同意しない場合は、さらに2人の医師をランダムに選択します。1つの診断が少なくとも2つの「投票」で進んでいる場合、その診断を支持して解決します。そうでない場合は、より多くの医師をサンプリングし続けます。この方法はかなり経済的で、あまりミスをしません。

もっと洗練されたやり方が足りないと感じて仕方がありません。たとえば、データセットをトレーニングセットとテストセットに分割し、診断を組み合わせるための最適な方法を考え出して、それらの重みがテストセットでどのように機能するかを確認できる方法があるかどうか疑問に思います。1つの可能性は、試験セットで間違いを犯し続けた医師の体重を減らし、おそらく自信を持って行われた診断の体重を増やすことのできるある種の方法です(信頼度はこのデータセットの正確さと相関します)。

私はこの一般的な説明に一致するさまざまなデータセットを持っているので、サンプルサイズは異なり、すべてのデータセットが医師/患者に関連しているわけではありません。ただし、この特定のデータセットには40人の医師がおり、それぞれ108人の患者を診察しています。

編集:これは、 @ jeremy-milesの回答を読んで得られた重みの一部へのリンクです。

  1. 重み付けされていない結果は最初の列にあります。実際、このデータセットでは、最大の信頼値は4でした。これは先ほど間違って言った5ではありません。したがって、@ jeremy-milesのアプローチに従うと、どの患者も加重されていない最も高いスコアは7になります。つまり、文字通りすべての医師が、その患者ががんであるという信頼レベル4を主張しました。患者が得ることができる最低の加重されていないスコアは0です。これは、すべての医師がその患者に癌がなかったことを信頼レベル4で主張したことを意味します。

  2. α=KK1(1σxi2σT2)Kσxi2σT2α=40401(18.7915200.7112)=0.9807

  3. 合計アイテム相関による重み付け。すべてのアイテムの相関関係をすべて計算し、相関関係のサイズに比例して各医師に重みを付けます。

  4. 回帰係数による重み付け。

私がまだ確信が持てないことの1つは、どの方法が他の方法よりも「優れている」かを言う方法です。以前は、パーススキルスコアなどの計算を行っていました。これは、バイナリ予測とバイナリ結果があるインスタンスに適しています。しかし、今では0から1ではなく0から7の範囲の予測があります。すべての加重スコア> 3.50から1、およびすべての加重スコア<3.50から0に変換する必要がありますか?


それNo Cancer (3)Cancer (2)そうですか?それはあなたの問題を少し簡単にするでしょう。
ウェイン

1
再:データ構造。ほとんどの場合、さまざまな列にさまざまな変数(患者が癌にかかっているかどうか、評価にどれだけ自信があるか)を指定する方が適切です。「がんなし(3)」のようにそれらを組み合わせると、選択肢が大幅に制限されます。
rolando2 2016

最大の自信を持って、がんの予測からデータ範囲を@Wayne Cancer (4)最大自信を持っていない癌の予測にNo Cancer (4)。我々はそれを言うことができないNo Cancer (3)Cancer (2)同じですが、私たちはそこに連続であり、この連続体の中間点であると言うことができるCancer (1)No Cancer (1)
user1205901-Monica

@ rolando2アドバイスありがとうございます。私は自分のデータファイルの内容を並べ替えて、分離されました。
user1205901-Monica

1
しきい値は調整可能なパラメーターであるため、適切なカットオフは評価基準によって異なります。私はあなたの測定基準に不慣れだったので、私はそれをグーグル化しました、そして実際には最初のヒットはあなたに関連しているかもしれません: 最大のパーススキルスコア(2007)に関するメモ
GeoMatt22

回答:


7

最初に、医師が互いに同意するかどうかを確認します。モデルをオーバーフィットするため、50人の医師を個別に分析することはできません-たまたま1人の医師が見栄えがします。

自信と診断を組み合わせて10ポイントのスケールにしてみてください。医師が患者に癌はないと確信していて、彼らが非常に自信がある場合、それは0です。医師が癌を持っていると確信していて、彼らが非常に自信がある場合、それは9です。医師がそうでないと医師が言った場合、自信がない、それは5などです

予測しようとするときは、何らかの回帰分析を行いますが、これらの変数の因果的な順序について考えると、逆になります。患者が癌にかかっているかどうかが診断の原因である場合、結果は診断です。

行は患者で、列は医師である必要があります。これで、心理測定で一般的な状況になりました(そのため、タグを追加しました)。

次に、スコア間の関係を確認します。各患者には平均スコアと各医師からのスコアがあります。平均スコアはすべての医師のスコアと正に相関していますか?そうでない場合、その医師はおそらく信頼できません(これは項目全体の相関と呼ばれます)。場合によっては、合計スコア(または平均スコア)から1人の医師を削除し、その医師が他のすべての医師の平均と相関するかどうかを確認します。これは、修正されたアイテムの合計相関です。

クロンバッハのアルファ(クラス内相関の形式)と、各ドクターなしのアルファを計算できます。医師を追加するとアルファは常に上昇するはずです。そのため、医師を削除するとアルファが上昇する場合、その医師の評価は疑わしいものです(これは、修正された項目と合計の相関関係と何も異なることを示していないことがよくあります)。

Rを使用する場合、この種の機能は、alpha関数を使用して、psychパッケージで利用できます。Stataを使用する場合、コマンドはアルファ版で、SASではproc corr、SPSSではスケールと信頼性が低くなります。

次に、各医師からの平均スコアまたは加重平均(相関によって重み付け)としてスコアを計算し、そのスコアが真の診断を予測できるかどうかを確認できます。

または、その段階をスキップして、診断に関する各医師のスコアを個別に回帰し、回帰パラメーターを重みとして処理することもできます。

お気軽にご質問ください。本が必要な場合は、ストライナーとノーマンの「健康測定スケール」が好きです。

-編集:OPの追加情報に基づいています。

うわー、それはクロンバッハのアルファの一体です。私がこれほど高いと思ったのは、間違いがあったときだけです。

次に、ロジスティック回帰を実行して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
とても良い。そして、あなたの推論が許すように、一部の医師は、傾向を裏打ちしながら独自の洞察を提供することによってアルファを悪化させる可能性があります。
rolando2 2016

@ jeremy-milesこの回答、およびそれに関する質問への親切な提案に感謝します。私はあなたの提案を実装しようとし、OPを編集して結果の一部を投稿しました。私が不思議に思っている主なことは、投稿を正しく解釈したかどうか、および特定の集計方法が他の方法よりも結果を予測するのに優れていることを示すために必要なことです。
user1205901-Monica

データを投稿していただきありがとうございます。後で見ていきます。(どのソフトウェアを使用していますか?)
Jeremy Miles

@JeremyMilesこの編集を投稿していただきありがとうございます!私はMATLABを使用していますが、Rについて十分な知識があるので、シフトアップして代わりに使用します。既にRコードを投稿しているからです。SPSSでクロンバッハのアルファを計算しました。Rから異なる値を取得しますか?
user1205901-モニカ

1
はい、それは私が考えていたものです。したがって、医師ごとに体重が異なります。
Jeremy Miles

2

すぐに使える2つの提案:

  1. ロジスティック回帰の損失関数に重みを使用すると、患者がP = 1の癌にかかっていることを非常に確信している医師が2倍の影響を得ることができ、P = 0.75の癌にかかっていると言う医師もいます。確率を重みに適切に変換することを忘れないでください。
  2. しばしば無視されるモデルのファミリーは、ランク付けモデルです。ランカー内には3つの大きなグループがあります。入力ごとに、リストごと、ポイントごと、ペアごとのランキングです。あなたはあなたのケースでポイントワイズランキングを使用できるように思えます。

確率を重みに適切に変換する方法を提案できますか?私はこの概念をグーグルで試しましたが、これを行う方法に関する明確なアドバイスは見つかりませんでした。
user1205901-2016年

レッツ: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.2の0.1倍になります(0.1-> 0.8および0.2-> 0.6)。医師が確信が持てない場合(P〜0.5)、観察は損失にはほとんど影響しません。彼が使用するどのモデルでも、ほとんどのモデルでサポートされている損失関数へのコストベクトルの追加をサポートする必要があります。これが良いかどうかはわかりませんが、試すのは簡単なことのようです。最初にメトリックを指定する必要があります。損失関数は、彼が最大化したいメトリックに合わせてさらに調整できます。
Ricardo Cruz

2

(これは私の専門分野ではないので、Jeremy Miles回答の方が信頼できるかもしれません。)

ここに一つのアイデアがあります。

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

dijci

p[c]1Nici

p[dj|c]idijciici
jci

p[dj|c,wj]idijwijciiwijci
wij0dij

w[0,1]

p[dw]=dw(1d)1w
d=0

0^0=10^0=NaNw(0,1)k{1K}w=k/(K+1)


@Wayneによるコメントの文脈では:あなたが言うならNo Cancer (3) = Cancer (2)、これはを使用した私の重み付けモデルと一致していますw[k]=kK25=135No Cancer (3) = Cancer (3)w[k]=kK+136=136

p[dj|c,wj]idijwijciiwijci

dδ[0,1]d{0,1}δi=wi(di=1)+(1wi)(di=0)δ=[0.8,0.4,0.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/

この研究では、医師が同じ患者を同じ情報で少なくとも2回診断する必要もあります。

この調査は、次の2つの方法のいずれかで実施できます。単純ながん/がんなしの評価を使用して、医師間および各医師による合意を決定できます。理想的には、彼らはまた、同じレベルの信頼度で診断できる必要があります。次に、完全な10ポイントのスケールを使用して、各医師間の合意をテストできます。(誰もが癌(5)は同じ評価であり、癌(1)は同じ評価ではないことに同意する必要があります&c。)

リンクされたWebサイトでの計算は、テストに使用しているすべてのプラットフォームで簡単に実行できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.