こんにちは。ほしのはやしです。
Rを使ったデータ分析で欠損値(NA)があると、「とりあえず平均値や中央値で埋めておけばいい」と考えがちです。
たしかに、これらの手法はコードも簡単で、tidyverseを使えば数行で実装できます。
補完の基礎について以下のページで解説しました。



しかし、とくに生物学・医学の研究分野では、安易なNA補完が統計的な歪みや誤解を生み、重大な結論の誤りにつながることがあります。
本記事では、具体例を交えて平均値・中央値での補完が“危険”なケースをご紹介したいと思います。
例1:CRP(C反応性蛋白)などの炎症マーカー
背景: CRPは炎症の強さを反映するマーカーで、感染症や悪性腫瘍などで急上昇する。
なぜ平均補完がダメ?
・値の分布が極端に右に偏っている(多くは正常値だが、一部が非常に高い)。
・平均値で補完すると、非現実的に高い値で埋められてしまう
代替案としては、中央値補完をする、もしくは「疾患の有無」などでグループ別に補完することです。
# 例えば、感染群と非感染群で分けて中央値補完
data %>%
group_by(infection_status) %>%
mutate(crp = if_else(is.na(crp), median(crp, na.rm = TRUE), crp))
例2:臨床試験での体重・BMIの欠損
背景: 一部の患者は重症で測定不能(例:集中治療室で臥床)、あるいは観察から脱落。
なぜ平均・中央値補完がダメ?
・欠損がランダムではなく、「重症な患者に偏って」発生している可能性が高い(= MNAR: Missing Not At Random)
・平均で埋めると「重症患者も普通の患者と同じような体重」とみなしてしまい、治療効果や予後解析が歪む。
代替案としては、補完せずに除外したり(バイアスに注意)、miceパッケージを用いた多重代入法(Multiple imputation)を行う方法があります。
library(mice)
imp <- mice(data, method = "pmm", m = 5) # Predictive mean matching
completed_data <- complete(imp)

mice使うやつってイメージしにくいのだ



めっちゃ簡単にいうと、「NAに1つの適当な値を入れるだけじゃ偏るから、5つくらいの”ありそうな値”を作って、それぞれで分析したあとに結果をまとめる!」って感じやで!
例3:発現データ(RNA-seqなど)での欠損
背景: 遺伝子発現データでは、検出感度の限界で一部の遺伝子が0またはNAになる。
なぜ平均補完がダメ?
・欠損の原因は技術的な理由(検出限界)であり、値が本当に「平均的」かどうかわからない。
・平均で補完すると、非発現の遺伝子を「ちょっとだけ発現している」ことにしてしまう。
代替案としては、補完せず0として扱ったり、検出限界値(Limit of Detection, LOD)の半分を代入したりする方法があります。この場合は補完値を0, LOD/2, LODと3種類変えて結果が変わらないことを証明することがあります。
もちろん、欠損をもつ遺伝子を解析対象から除外する方法も一つです(その条件下での検査の精度が担保されないときなど)。
まとめ
本記事では、補完方法を選ぶときに考慮すべきポイントについて解説しました。
検討ポイント | 例 | 補完方法候補 |
---|---|---|
分布が極端に偏っている | CRP、BNPなどのマーカー | 中央値、層別中央値 |
欠損がランダムでない | 重症例の体重、ICU患者のBMI | 多重代入、除外も検討 |
欠損が技術的な理由 | 遺伝子発現データ | 0, LOD/2で補完、または除外 |
欠損値の処理については、分野によってやり方がある程度決まっていたりするので、既報の論文の手法を踏襲するのも一つですね!
皆様のお役に立てたなら幸いです。
コメント