状況
臨床研究で統計解析をするとき、自分の時間が一番削られるのはコーディングの部分だった。Rなら多少慣れているが、Pythonのpandas/statsmodelsになると、ライブラリの書き方を毎回調べながら進める羽目になる。
解析の設計はできている。何と何を比較するか、どんなアウトカムを見るか、そこは自分の仕事だ。でも「t検定のコード」「ロジスティック回帰でオッズ比と95%信頼区間を出すコード」「KM曲線のテンプレ」、そのあたりを毎回ゼロから書く意味はない。
このあたりをClaudeに渡すと、かなりの精度で動くコードを返してくる。
やったこと
プロンプトに渡す情報を定型化した。変数の型と解析内容をきちんと記述するのがポイントで、ここを雑にするとコードの変数名がずれたり、連続変数をカテゴリカルとして扱われたりする。
実際に使っているプロンプトのテンプレはこれ。
以下のデータ解析を行いたいので、Pythonコード(pandas, scipy, statsmodelsなどを使用)を作成してください。
# データの説明
- データフレーム名: df
- サンプル数: [n]例
- 変数一覧:
- [変数名1]: [型(連続変数/カテゴリカル)] - [説明]
- [変数名2]: [型] - [説明]
- [変数名3]: [型] - [説明]
- [アウトカム変数]: [型] - [説明]
# 解析内容
1. 記述統計: [患者背景テーブル(Table 1)の作成 / 基本統計量]
2. 群間比較: [比較する群の変数名] で層別化し、以下を比較
- 連続変数: [t検定 / Mann-Whitney U検定 / 対応のあるt検定]
- カテゴリカル変数: [カイ二乗検定 / Fisherの正確検定]
3. 主解析: [ロジスティック回帰 / Cox比例ハザード / 線形回帰 / 生存分析]
- 目的変数: [変数名]
- 説明変数: [変数名のリスト]
- 調整変数: [変数名のリスト]
4. 可視化: [Kaplan-Meier曲線 / Forest plot / ROC曲線 / 散布図]
# 出力要件
- コードにはコメントを日本語で付けてください
- 結果の解釈を各解析の後に記載してください
- p値は小数点以下3桁まで表示
- 95%信頼区間を含めること
- 論文のTable/Figureとして使える形式で出力
変数の型の指定は必ずやる。「age: 連続変数」「sex: カテゴリカル(0=男性, 1=女性)」まで書く。これを省くと、コードの中でdtypeの扱いが曖昧になる。
加えて、df.head(5) の出力を貼り付けると精度が上がる。実際の列名・データ型をClaudeが確認できるので、変数名のtypoや型の誤認識が減る。
生成されたコードはJupyter Notebookで1セクションずつ実行し、出力を確認しながら進める。一度に全部走らせると、エラーが出たときに原因を特定しにくくなる。
効いたところ
- コード作成の時間が体感で6〜7割減った。特にTable 1(記述統計)の
tableoneパッケージを使った出力は、自分でゼロから書くと30分かかっていたものが数分で得られる - Forest plotやROC曲線のテンプレが流用できるようになった。論文のFigureとして使える見た目のコードがそのまま出てくる
reason列に相当するコメントがコードに埋め込まれるため、数ヶ月後に読み返したときに何をやっているか分かりやすい- 欠損値処理のパターン(
dropna()か多重代入法か)を事前に指定すれば、その方針で一貫したコードが生成される
限界・気をつけていること
ここがいちばん大事な部分だと思っている。
- 統計手法の選択はAIに委ねない: 「連続変数の2群比較」と入力するとAIはt検定を返すことが多いが、正規性の検定やサンプルサイズによってはMann-Whitney U検定が適切なこともある。手法の判断は自分でする
- p値と効果量の解釈は人間の仕事: コードが正しく動いて
p<0.05が出ても、その数字が臨床的に意味があるかどうかは別の問い。「統計的有意」と「臨床的に意味あり」は違う。ここをAIに書かせると危ない - データは必ずローカルで匿名化してからコードを書かせる: プロンプトに渡す段階で、患者IDや氏名が含まれていないことを確認する。
df.head(5)を貼る場合も同様。コードを書かせる前に匿名化処理を済ませる - 多重検定補正を意識的に指示する: 複数の群間比較を一度に依頼すると、補正なしのコードが返ってくることがある。Bonferroni補正やBH法が必要な場面では明示的に指示する
- 生成コードはそのまま実行しない: 変数名・ファイルパス・型定義を自分のデータに合わせて確認してから走らせる。このステップは省略できない
横展開
同じパターンで、ROC曲線の閾値探索、サブグループ解析のForest plot、感度分析のためのbootstrappingコードなど、「構造が決まっていてコードが面倒な作業」はどれも使える。
論文のリビジョンで「査読者からこの解析を追加してほしいと言われた」という場面でも、短時間でコードを得られるのは助かっている。ただし追加解析の妥当性、その解析をすることが論文の主張に沿っているかどうか、は自分で判断する必要がある。Claudeはコードを書けるが、研究デザインの整合性は見ない。