こんにちは、すきとほる疫学徒です。
本日は、私が大学院時代に医療大規模データベース研究のマスターから教わった、医療大規模DB研究の心得を紹介したいと思います。
マスターは30代ながらに既に医療大規模DB研究を100本以上出版しているマスターオブマスターです!
医療大規模DB研究界隈のヨーダといっても過言でないでしょう。
思い返せば大学院時代にマスターヨーダの指導を受けられたことが、私が疫学専門家になる上で最も幸運なイベントの一つでした。
心得① 一つひとつのセルを見るくらいの気持ちでデータを観察しろ
極論を言えば、医療大規模DB研究では、何らかの解析を行いさえすれば、何らかの結果がでます。
「少しでも早く論文化し、業績をあげたい」とはやる心が、データを扱う上で最も大切なステップをもショートカットさせてしまいそうになります。
研究に必要なデータをカットしてもらい、手元に届いた後にまずやるべきことは何か?
変数を作ること?
対象集団を絞り込むこと?
違いますよね。
まず最初にやるべきは、データをじっくりと観察することです。
「データはともだち こわくないよ!」
データをじっくりと観察し、データとの仲良し度をあげていけば、データの方から自然と私たちに語りかけてきてくれるようになる
わけはないと思いますが。
それでもデータの観察は、医療大規模DB研究をする上で最も大切であり、そして時に見落とされがちなステップではないでしょうか?
まず、解析に使おうと考えている変数をリストアップし、それぞれの変数がどのようにコーディングされているのか、欠損はどれくらいあるのか、変数同士の欠損に何か関連はないだろか、分布はどのようになっているだろう、グラフで描くとどう見えるだろうかと眺めてゆく。
そして、使おうとしている医療大規模DBは、私たちが曝露に対して置いている仮説、アウトカムに対して置いている仮説、そして使用する統計手法に対して置いている仮説に対して耐えうるものだろうか?と、仮説との適合度を吟味していく。
そうして長いながい仮説検証の坂を登ってようやく、結果を出すための解析に着手できるというわけですね。
「一つひとつのセルを見るくらいの気持ちでデータを観察しろ」というのは、結果を出そうとはやる私の心を諫め、解析に至るまでの仮説検証の重要性を教えてくれた、マスターからの一言でした。
心得② 自分の書いたCodeを信じるな
医療大規模DB研究において、コーディングエラーというのは致命的なミスをもたらします。
例えば、「とある薬剤Aへの曝露によって入院後30日以内死亡のリスクが軽減されるか?」というリサーチクエスチョンで研究を行ったとしましょう。
この時、
本当は
薬剤A曝露 = 1/非曝露=0とすべきところを、反対にコーディングしてしまっていたらどうなるでしょうか?
同じく、
30日以内死亡あり=1/死亡なし=0とすべきところは、反対にコーディングしてしまっていたらどうですか?
もちろん、結果は真逆になりますよね?
例えば、薬剤A曝露の30日以内死亡に対するオッズ比が1.5 (95%CI 1.2-1.8)という結果がでたとしましょう。
研究者は「ふむ、どうやら薬剤A曝露は30日以内死亡のリスクを上げるらしいな。これは危険だから、臨床の医師に注意喚起するような論文を書かねば」と考えるかもしれません。
そうして、その論文を読んだ臨床の医師は、「うわ、こんな論文出てるのか!もう薬剤Aは使わないでおこう」と考えるかもしれませんね(実際は、生物学的妥当性や先行研究との一致ども加味しながら論文の考察を展開するため、このように得られた結果=真と単純に判断されることはありませんが)。
しかしながら、実際には研究者は薬剤A曝露の定義を誤って逆にコーディングしてしまっていました。
つまり、真の結果は真逆、薬剤A曝露は30日以内死亡のリスクを低下させるというものだったのです。
もし、論文投稿時にデータとコードを提供しているか、それかコードのダブルチェックが投稿者側に義務付けられていれば、この間違いに気づけたかもしれません。
しかしながら、現状の投稿規程で上記を義務付けているJournalは少なく(推奨はしていますが、データが第三者に提供できないなどの理由があれば、パス可能)、論文が一度研究者の手を離れてしまえば、もうコーディングエラーに気づく手立ては存在しません。
恐ろしいですよね。
Rにおいて曝露やアウトカムの定義づけは、以下のようなコードで簡単にできてしまいます。
df <- df %>%
mutate(exposure_c = case_when(exposure == 1 ~ "Yes",
exposure == 0 ~ "No"))
少しでも早く投稿しようとはやる心に駆り立てられ、もしくは共著者との面談に間に合わせようと徹夜でふらふらになりながら作業していたとしたら。
上のコードで1と0を入力し間違える、もしくは”Yes”と”No”を入力し間違える、これだけで出てくる結果は真逆になってしまいます。
もちろん、コーディングにおけるエラーはこれだけではありません。
私たちが書いているコード、その上から下まで全ての行に、ミスコーディングのリスクがあると思った方が良いと私は考えています。
例えば、
多変量解析に年齢カテゴリーを入れるはずが、”age_c”ではなく、カテゴリー化する前の”age”を入れてしまった。
例えば、
包含・除外基準に従って対象集団を形成する際に、age≧50とすべきところを、age>50としてしまっていた。
例えば、
在院日数の計算で、(退院日 – 入院日 + 1)とすべきところを、(退院日 – 入院日)としてしまった。
など。
ここでは挙げきれないほどのコーディングエラーのリスクが、あちこちに潜んでいます。
だから、「自分の書いたCodeを信じるな」と、マスターは仰っておりました。
「変数を加工した際には、正しく加工できるかどうか、必ずオリジナルの変数と比較しろ」
「絶対にCodeを書いた際の意図は忘れるから、研究ノートをとるか、スクリプト内にコメントを入れろ」
「可能な限り、自分より解析ツールの操作に長けている人にコードをダブルチェックしてもらえ」
マスターは執拗なまでに繰り返し、私に教えてくれていました。
マスター自身も、すさまじい執着で自分のコードをダブルチェックしており、時として「そこまでやる必要あるの?コスパ悪くない?」と私も思ってしまったこともありましたが、それもこれも全て、医療大規模DB解析においては、簡単なコードエラーが致命的なミスを引き起こすということを、マスター自身が誰よりも分かっていたからなのだと思います。
私自身も、論文の投稿を急いでいる時などは「あー、もう解析結果でたから、これで固定してさっさと考察書いちゃいたい!」と何度も思ってきたのですが、その度にマスターの「自分の書いたCodeを信じるな」という戒めを思い出し、ぐっと堪えてCodeをダブルチェックするようにしています。
心得③ 好き勝手解析するな、必ず仮説を敷け
医療大規模DB研究では、データが既に手元にあります。
データがあれば、好き勝手に解析ができます。
しかしながら、因果推論においては何も考えずに解析をしまくり、自分の欲しい結果だけをピックアップして報告するというのは言わずもがなご法度です。
解析の数を増やせば増やすほど、検定の多重性の問題が起こりやすくなります。
つまり、「本当は関係がないのに、誤って関係ありとしてしまう」偽陽性が発生しやすくなるということですね。
しかしながら、研究者が行った解析の全てを論文で報告していなければ、読者はとある結果を得るために背後で行われた解析の全体像など知る由もありません。
だから、もし医療大規模DB研究という研究分野においては、もし研究者が「当初予定していた解析で望ましい結果が出なかったから、とりあえず片っ端からサブグループ解析したり、変数入れ替えたりしていたら、いくつかそれっぽい結果が出た。これをメインの解析にして、他の解析はやらなかったことにしよう。論文のイントロと考察も、このメイン解析をサポートするものに書き換えよう」なんていうふうに、事後的に論文の内容を操作してしまうということができてしまうわけですね。
サイエンスのかけらもない、極めて非倫理的な行為だと思います。
しかしながら、研究者としては「業績を出したい、そのためには綺麗なストーリーを組めるような解析結果が欲しい」という気持ちが湧くのもわからなくもありません。
そんな時に、医療大規模DB研究という、解析の過程がブラックボックスになりやすい環境にいれば、「予定していなかったけど、この変数を削除しても、許されるんじゃないか?後付けだけど、まぁ科学的な妥当性な説明ができないわけでもないし、これなら恣意的な結果の選択にはなら…な…い…よな?」という気持ちが湧いてきてしまうかもしれません。
だからこそ、「好き勝手解析するな、必ず仮説を敷け」という確固たる姿勢が必要になるわけですね。
事前に仮説を敷き、その仮説に則った解析を行い、そして結果の内容に関わらず、粛々と出てきた結果に則って考察を展開する。
そもそも、結果の内容によっては論文の価値が落ちてしまう(と感じる)ような研究テーマを選んでいる時点で、研究準備時点でのクリティークが足りていなかったのだと思います(私自身に向けて言っております)。
「有意でも有意じゃなくても勝負できるリサーチクエスチョンを考えろ」、これもまたマスターから教えられたことでした。
心得④ 絶対にオリジナルデータはいじるな
医療大規模DB研究において、オリジナルデータは命の次に大切なものです(比喩です)。
オリジナルデータから患者や変数を削除してしまった場合、もう2度と戻ってこないと思った方が良いでしょう。
実際には私たちがいじるオリジナルデータとは、あくまでも大元のデータサーバーから切り出してこられたデータですので、データサーバーに戻れば再び同じデータセットを入手することは可能です。
しかしながら、そんなことを何度もやっていてはデータの抽出者の方に迷惑をかけることになります。
ですので医療大規模DB研究においては、オリジナルデータは絶対にいじらない、これは鉄則ですね。
抽出して頂いたデータを受け取った後にまずやるべきことは、そのデータのコピーを取り、通常はいじらないフォルダにBackupを作ることです。
心得⑤ リサーチクエスチョンは100個考えて、研究になるのは1個くらい
医療大規模DB研究において、研究者が最も独創性を出せるのはリサーチクエスチョンです。
他のタイプの研究であれば、リサーチクエスチョン以外にも研究の価値を発揮できるポイントはあります。
介入研究であれば、介入という行為そのもの
一次データ収集を行う観察研究であれば、収集したデータそのもの
などですね。
しかしながら医療大規模DB研究においては介入は行われませんし、データへのアクセスをもつ者であれば誰でも利用することができ、解析だって同じコードを走らせれば同じ結果が得られます。
そのため、医療大規模DBを使う研究者において最も腕が問われるのは、創造したリサーチクエスチョンの独創性となるわけですね。
また先ほども述べましたが、医療大規模DB研究においては「Codeを走らせれば何らかの結果が出てきてしまう」という恐ろしさがあると述べました。
データが既に手元にあるわけですから、何らかの解析を行い、その結果に対して(妥当性が低くとも)何らかの考察を行い、形としての論文を仕上げるということはできてしまうわけですね。
しかしながら、仮に形の上では論文のようなものが仕上がったとしても、リサーチクエスチョン自体に面白みがなければ、行っている解析が妥当でなければ、展開している考察に筋が通っていなければ、その論文はアクセプトされることなく、リジェクトの海を漂うことになるでしょう(私自身が何度も経験しました…)。
だからこそ、思いつきのリサーチクエスチョンで安易に研究を始めてはならないのです(自分に向かって言っております…)。
リサーチクエスチョンを思いついては潰し、また思いついては潰し。
その過程を何度も繰り返し、ようやく独創性という意味でも、妥当性という意味でも、チャレンジする価値のあるリサーチクエスチョンが生まれるのだと、マスターから教えてもらいました。
終わりに
いかがでしたでしょうか?
なんだか偉そうな書き方になってしまった気がしますが、これらは何よりも私が私自身に日々言い聞かせている心得になります。
私も心が強い人間ではないので、気を抜くとついつい楽な方へと流れてしまいそうになり…
・自分の書いたCodeを信じるな
・好き勝手解析するな、必ず仮説を敷け
・絶対にオリジナルデータはいじるな
・リサーチクエスチョンは100個考えて、研究になるのは1個くらい
医療大規模データベースに関してはこちらの記事もあわせてご覧ください。
こんにちは、すきとほる疫学徒です。 2018年のGPSP省令の改正により医療大規模データベースを製造販売後調査に使用できるようになりました。 これ以降、日本の製薬企業における医療大規模データベース(医療DB研究)への[…]
すきとほる疫学徒からのお願い
本ブログは、全ての記事をフリーで公開しており、「対価を払ってやってもいいよ」と思ってくださった方のみに、その方が相応しいと思っただけの対価をお支払い頂けるPay What You Want方式を採用しています。
教育に投資できる方だけがさらに知識を身につけ、そうでない方との格差が開いていくという状況は、容認されるべきでないと考えているからです(そもそも私程度の記事によって知識の格差が広がると考えていることが、恥ずかしながら思い込みではあるのですが)。
ですので「勉強になった!」、「次も読みたい!」と本ブログに価値を感じてくださった場合のみ、ご本人の状況が許す限りにおいて、以下のボタンをクリックし、ご自身が感じた価値に見合うだけの寄付を頂戴できますと幸いです。
もちろん価値を感じなかった方、また学生さんなど金銭的に厳しい状況にある方からのご寄付は一切不要です。