二択で迷ったらアグレッシブな方を選べ

本ブログのコンセプトは 「外科系臨床医に臨床研究について知ってもらう」です。自分で勉強したことを備忘録として気ままに書いていますので、情報の真偽については責任を負いかねます。また専門性が高い方にとっては内容が浅い点、分量が多くて読み辛い点もご了承くださいませ。

カテゴリ:型別資料(予測モデル) > 内的検証

Keele大学の予測モデルの講義で学んだこと、その5です。あと6講義もあるのか…本日は手術日ですが手術が入らなかったので、救急対応がなければ割と時間とれます。明日までの課題はいくつかありますが、自分を追い込むためにもまず講義の復習。ハンドアウトみるだけより直接講義聴き直した方が勉強になるので、オンデマンド配信の間にしっかり聴き直して復習しておかないと。あくまで自分用なので、新しく学んだことや、復習になったことだけかいつまんで記載する点(とあやしい点も)ご容赦くださいませ。次は内的検証とshrinkage。

<まずはじめに>
・開発したモデルは手元にあるdataにoverfitしている(optimistic)
 - とくにstepwise selectionすれば(単変量事前選抜はもっとやばい)
 - ので、他のセッティングでは使えない
・平均への回帰を目指す
 - 予測のshrinkageもしくpenalization
内的検証はabsolutely essential
 - ちゃんとしてるのは稀だけど…

<内的検証>
Split sample validation
 - データをtrainingとtestingに分ける
 - ランダムに、時点の前後で、地理的に…
 - データ=精度なので、よほど十分なdata(EPV >100)がない限り非推奨
 - いいvalidationを得るために恣意的にsplitできるし…
 - かわりにre-sampling methodsを

k-fold Cross-varidation
 - 開発は全てのdataを使って行う
 - データを例えば10に区切り、9で開発1で検証、を繰り返す
 - 得られた性能の平均が、開発したモデルの外的性能の目安に
 - 10-foldがよい模様

Bootstrapping 
 - Cross-varidationもいいけど、もうちょっとよい
 - dataからリサンプリングして同サイズのdataを作成する
 - 具体的なやり方は昔の記事ご参照
 - 回数は例えば1000回 *点推定値で200、信頼区間で1000回と耳にしたことあり
 - 興味のある全ての性能尺度に対し行う
 - dataが大きければoptimismは小さい
・Bootstrappingでmodel instabilityがわかる
 - 構成する因子や非線形のモデリングの妥当さ
・多重補完とBootstrappingを組み合わせる場合
 -  dataに多重補完してからBootstrapping
 - Bootstrappingしてから、各BSに多重補完
 - 後者がよさそうだが、結論はまだ出ていないので、現状以下を提案

 ① まずbootstrappingでBSを抽出
 ② 各BSに多重補完してモデル開発(因子選択するならそれも含めて)、
   結果を統合し1つのBMを完成し、BPを算出
 ③ BMを多重補完したOSに適応し、結果を統合しTPを算出
 ④ BP - TP = Optimism
 ⑤ ①ー④を繰り返して④の要約値を算出

<モデルのOptimism調整>
・算出したOptimismを用いてUniform shrinkage(re-calibration)を行う
 - 開発したモデルの回帰係数に均一のshrinkage factor (S)をかける
 - S = optimism-adjusted calibration slope *Sは1未満になるので、shrinkage
 - 切片 α も再計算される(CITLも改善される)
・Heuristic shrinkage factor = (model χ^2 - df) / model χ^2 を用いる方法も
・Optimismを調整したmodelがfinal model 

【コメント】
講義5つ目はやっとある程度知識があったのでそう苦労せず聴くことができました。Optimismの話は点推定値だけで、信頼区間までは踏み込んでなかったのは意外。Uniform shrinkageを使ったre-calibrationには感動しました。あと相当面倒だけど、多重補完×Bootstrappingもやらなきゃいけないんですね…以前私がやった「因子選択→モデル開発→スコアリングシステム開発」のように複雑なアルゴリズムだと全く対応できない涙。スコアリングシステムを作る場合は、兎に角いいスコアリングシステム作りたい!という願いからは迂回してしまいますが、まずはベースとなる予測モデルをしっかり作り込んで、そこからオマケ程度にスコアリングシステムに落とし込むようにしないと、最新の手法は使えないようです。でも、それよりなにより材料となるdataがちゃんとしてないと、どれだけいい解析しても無駄です。解析を勉強すればするほど、dataの質の重要さが身に染みてきました。ソコは臨床研究で一番無視されている気がする…にしても、自腹で8万で英語の講義聴いて必死で復習するって、なんでこんなことになってしまったのか自分でも意味不明…

先日(今更)読んだTRIPODの説明のなかで、とくに重要と思われるInternal Validationについて細読しておきます(FREEでダウンロードできるBOX Fです)。

【はじめに】
・予測モデルを作る際には、とくに以下の場合にoptimismが問題
  - イベント数に比して予測因子候補が多い(サンプルサイズが小さい)
  - 変数選択を行っている(結局サンプルサイズが小さい)
  -  連続値のカテゴライズ
・なのでoptimismを割り引いた性能評価(Internal validation)が必要
・Apparent performance(AP)
  - 開発データセットを用いて評価された性能
  - サンプルサイズが小さいとoptimistic
  - サンプルサイズが大きければoptimismは消える

【Split-sample Validation】
・データセットを開発と検証にわける
・ありふれた方法だが、弱点がある
 - 開発に使うサンプルサイズが小さくなる
 - 検証データも結局開発データと似る
 - 結局サンプルサイズが小さいと結果が安定しない
・開発:検証の至適割合がわからない
・サンプルサイズが大きければ使用可
 - その場合は時間や場所で分けるべき

【Cross-validation】
・Split-sample validationの改良
・データセットを例えばランダムに10分割
 - うち9サブデータを開発に用い、1サブデータを検証に用いる
 - これを10回繰り返した平均をとる

【Bootstrap Validation】
・データすべてを開発に用いることができる
 - 同時に最終モデルまでのoptimismを定量化できる
 - 回帰係数やAPを補正し、検証研究での性能低下を防ぐ
・手順は以下
 1.全データを使ってモデルを作り、APを算出
 2.Bootstrap Sample(BS)を導出
 3.BSを使って1を再現しモデルを作る(BM)
   BSにおけるBMの性能(BP)を算出
   もとデータにおけるBMの性能(Test Performance:TP)を算出
 4.Optimismを算出(BP-TP)
 5.2ー4を最低100回繰り返す
 6.5.の平均を算出し、APからひく
・すべての手順を再現しない不適切なCVやBVが行われている
 - Optimisticな性能評価が報告されてしまっている
・他のバイアスも性能を過大評価

【コメント】
うーん耳が痛いなかなか厳しい内容…単純なステップワイズでロジスティックモデル作るだけならOptimismの計算は何とかできますけど、複雑な工程組み合わせたら素人にプログラム書くのは無理です…現状を正直に報告するしかない。てかInternal Validationちゃんとやった予測モデル脊椎領域でみたことないけど、私がモグリなだけでしょうか…Internal validationは検証じゃなく開発!ってのもピンとくる研究者どのくらいいるんだろう。予測モデルだしてる研究者で、TRIPODの説明論文読んでる人どのくらいいるんだろう。脊椎領域のガラパゴス感半端ない…やばいっす…知らない方が幸せだったかも…

はじめて多施設を訪問してデータ収集した臨床予測モデル(CPM)研究の解析を進めています。CPM妥当性の記事でご紹介したとおり、予測モデルは開発したあと妥当性の検証が必須。全然関係ない集団で外的妥当性を検証するのがBestですが、それだけで1つの研究にしてもいいくらいタイヘン。実際のところは手元のサンプルを分けて内的妥当性を検証するSplit validationが手の届く範囲で最善でしょう。しかし本研究ではサンプルサイズが400前後と小さいため(それでも収集に100時間要しましたが涙)、Bootstrap Validationを試みることに。Split validationよりいいとの噂もあるし、できると大分解析の幅が広がるはず。下に貼り付けている「黄色い本」を勉強した内容を、備忘録も兼ねてちょっとまとめてみます。

Bootstrap varidationでは、Bootstrap法で仮想サンプルを作成し、そのサンプルを使ってモデルの開発と性能評価を繰り返し、要約し、最終的にOptimism-Corrected Performance(OCP)を算出します。その具体的な手順は

1.まずもとサンプル(S)を用いてCPMを開発し、開発したCPMのSにおける性能(Apparent performance: AP)を算出する。
2.Bootstrap法でBootstrap sample(BS)を作成する。
3.BSを用いて、1.と全く同じ方法で新たなCPM(BCPM)を開発する。BCPMのBSにおける性能(Bootstrap performance: BP)を算出する。
4.BCPMのSにおける性能(Test performance: TP)を算出する。
5.Optimism(O)=BP-TPを算出する。
6.1-4を十分(200回以上)繰り返し、Oの精確な要約値を算出する。
7.OCP=AP-Oを算出する。
 
のようです。OCPはOptimismを考慮した分、APよりずっと保守的で妥当な数値になると。これは頑張るしかありません。実は3まではもうSTATAでコード書けたのですが、4.が難しい…「STATAでもちゃんとできる」というハナシも耳にしたので、今からネット渉猟しつつ、試行錯誤してみます。こんなん解析の専門家がやってくれるなら無駄な時間使わなくていいのに…臨床医がしなきゃいけない日本の研究環境、どうかしてるぜ怒

CPM研究のバイブル「黄色い本」です。

先日臨床予測モデルの総説の記事で「別記事にします」と触れた内容をまとめます。臨床予測モデル(CPM)の研究はモデルの開発→性能評価→妥当性検証までがセットになっていて、総説内でも「どれだけ優れたCPMでも、妥当性が検証されていなければただの仮説」と指摘されるとおり、妥当性の検証(ホントに使えるか)は必須のようです。

 ①Apparent performance(みかけ上の性能)
 ~開発コホートにおける性能
〇追加ですることがない
✕ちょっと楽観的すぎる

 ②Split-sample validation
 ~データセットを開発と検証にわける
〇開発と異なる集団での検証 
✕開発に用いる数が減る
 大きなサンプルサイズが必要
 開発と検証の集団が似ている
   ←時期や場所で分けるとより良い

 ③Cross-validation
 ~データセットを例えば10に分割し、9を開発1を検証にまわす
  これを10回繰り返し結果を統合する
〇データを有効利用できる
 1回のみのSplit-sampleよりバイアス小
✕Caliblation含め正確に性能評価できない可能性

 ④Bootstrap validation
 ~データセットから複数の仮想データセットを作成
  各仮想データセットに基づいた性能を、実際の性能と比較
  比較を100単位で繰り返し、楽観性を是正した推定を行う
〇もっともバイアスが小さい推定
✕複雑で計算量が多い

【コメント】
一見②が一番気合入っていて、良い気がしていました。でもこの記事によると、④が一番よさそうとの論調。脳が足りない可能性は否めませんが、ちょっと頑張ってみますか。私が取り組んでいるCPMはサンプルサイズが400ほどなので、②はそもそも厳しいですし。日本語の教科書できないかなぁ...解析方法とか英語で読むの敷居が高すぎる…って、頑張ったら何とかできた!!あってるのかいささか不安ですが…

このページのトップヘ