診療録から解析用データを作ると、収縮期血圧には「128.4」、症状の重症度には「軽度」、血液型には「A」といった値が並びます。どれも1列の変数ですが、値同士の関係は同じではありません。たとえば、重症度には順番がある一方、血液型のAとBに大小関係はなく、血圧の1mmHg差には量としての意味があります。この区別が曖昧なまま数値へ置き換えると、計算は通っても、その平均や差が研究目的に答えないことがあります。
尺度は値に許される比較を表す
Stevens(1946)は測定尺度を名義・順序・間隔・比率に分類し、尺度ごとに意味を保つ変換と統計操作を整理しました。この記事では医学研究のデータ整理で迷いやすい形に合わせ、カテゴリ間に順番がない名義変数、順番だけがある順序変数、数値の差を量として扱う連続変数に焦点を絞ります。
見分ける手掛かりは、データが数字で保存されているかどうかではありません。血液型をA=1、B=2、AB=3、O=4と入力しても、1から4への差がA型からO型への一定量の増加を表すことにはなりません。一方、収縮期血圧128.4mmHgは小数を含む数値で、130.4mmHgとの差2.0mmHgを量の差として扱えます。
観測値$x_i$を解析用の値$z_i$へ変換する関係を、次のように置きます。
$$z_i=g(x_i)\tag{1}$$
式(1)は、対象者$i$の観測値$x_i$を規則$g$で別の値$z_i$へ写すことを表します。変換後の計算に意味があるかは、$g$が元の変数で意味のある関係を保っているかで決まります。
ただし、尺度名だけから解析手法が一意に決まると考えるのも単純すぎます。VellemanとWilkinson(1993)は、尺度の類型だけで統計手法を制限する考え方を批判しています。研究目的、値の分布、測定の仕方、解析モデルまで見たうえで選ぶ必要があります。
連続変数は差の大きさを保つ
収縮期血圧、HbA1c、LDLコレステロールのように、値の差を量として読める測定値は連続変数として扱う候補です。理論上は区間内の任意の値を取り得ますが、実データでは測定機器や記録単位によって小数第1位などへ丸められます。
例えば、128.4mmHgと129.9mmHgはどちらも130mmHg未満ですが、元の値には1.5mmHgの差があります。平均値と標準偏差は分布の中心と散らばりを表し、中央値と四分位範囲は外れた値の影響を受けにくい要約です。どちらを報告するかは「連続変数なので平均値」と機械的に決めず、分布の形と研究で比較したい量に合わせます。
よくある誤解は、臨床上分かりやすい境界値があれば、連続値を二値化しても解析上の不利益は小さいというものです。二値化すると同じ側に入った値同士の差が消え、境界のすぐ下とすぐ上だけが別群になります。Roystonら(2006)は、連続予測変数の二値化が検出力の低下や残余交絡などにつながり得ると論じています。
そのため、臨床的・制度的に定義された分類自体が研究目的でない限り、解析を簡単にするためだけの二値化は適切ではありません。連続量として保持した解析を中心に据える方が、値とアウトカムの関係を捨てずに扱えます。
順序変数は順番と間隔を分ける
症状を「なし・軽度・中等度・重度」と記録した場合、重症度の方向は定まっています。しかし、なしから軽度への変化と、中等度から重度への変化が同じ大きさだという情報までは含まれません。順番は比較できますが、隣接カテゴリの間隔は測定から与えられていない、というのが順序変数の要点です。
ここに0、1、2、3を割り当てると平均スコアを計算できますが、その値は等間隔という追加仮定に依存します。順番を保ったまま0、1、3、7へ置き換えてもカテゴリの順位は変わりません。それでも平均は動くため、数値コードをそのまま連続変数として扱う場合には、その間隔に実質的な根拠があるかを説明する必要があります。
実務では、単一のLikert型項目と、複数項目を合計した尺度を同じものとして扱わないことも大切です。SullivanとArtino(2013)は、この区別を置いたうえで要約と解析を論じています。単一項目ならカテゴリ別の人数と割合、中央値などが解釈しやすく、複数項目の合計点では尺度の構成や分布も判断材料になります。
また、ForrestとAndersen(1986)が1982年の医学雑誌12誌を調べた報告では、順序尺度を用いた175報の少なくとも70%で、より強い尺度を仮定する統計手法が使われていました。この数値は個々の解析が直ちに誤りだったことを意味しませんが、順序カテゴリへ置いた数字を無条件に量とみなす問題が医学研究で繰り返されてきたことは分かります。
名義変数の番号には大小がない
A、B、AB、Oという血液型は、異なるカテゴリを識別する名義変数です。各カテゴリの人数や割合、最頻カテゴリは意味を持ちますが、AからBへの増加や、ABがAの3倍という解釈はもちろん成立しません。疾患の有無や治療群も、値の順番を定義していなければ名義変数に当たります。
この点について、カテゴリを数値で保存すること自体を避ける必要はありません。私なら、解析時に名義変数として明示的に扱われているか、基準カテゴリが研究目的に合っているかを確認します。危ないのは保存形式ではなく、ラベルにすぎない数字へ量の意味を読み込むことです。
240例で符号化の影響を確かめる
ランダムに生成した240例のデータセットに、収縮期血圧、4段階の症状重症度、4種類の血液型を持たせました。収縮期血圧の平均値は131.38mmHg、標準偏差は15.47mmHgで、観測値は192種類でした。使用したのはbase Rと、解析結果を書き出すjsonliteパッケージです。
set.seed(42)
sample_size <- 240L
systolic_bp <- round(rnorm(sample_size, mean = 132, sd = 16), digits = 1)
severity_levels <- c("なし", "軽度", "中等度", "重度")
symptom_severity <- ordered(
sample(severity_levels, size = sample_size, replace = TRUE,
prob = c(0.22, 0.36, 0.29, 0.13)),
levels = severity_levels
)
blood_type_levels <- c("A", "B", "AB", "O")
blood_type <- factor(sample(blood_type_levels, size = sample_size,
replace = TRUE, prob = c(0.40, 0.20, 0.10, 0.30)))
同じ順序カテゴリへ等間隔の0、1、2、3を置くと平均スコアは1.2833でしたが、順番を保った0、1、3、7では2.0292になりました。血液型もA=1、B=2、AB=3、O=4なら平均コードは2.2875で、A=4、B=1、AB=3、O=2へ付け替えると2.8583です。
severity_equal <- c("なし" = 0, "軽度" = 1, "中等度" = 2, "重度" = 3)
severity_unequal <- c("なし" = 0, "軽度" = 1, "中等度" = 3, "重度" = 7)
blood_codes_1 <- c(A = 1, B = 2, AB = 3, O = 4)
blood_codes_2 <- c(A = 4, B = 1, AB = 3, O = 2)
c(mean(unname(severity_equal[as.character(symptom_severity)])),
mean(unname(severity_unequal[as.character(symptom_severity)])))
c(mean(unname(blood_codes_1[as.character(blood_type)])),
mean(unname(blood_codes_2[as.character(blood_type)])))
#> [1] 1.283333 2.029167
#> [1] 2.287500 2.858333
読み方は、症状の構成も血液型の構成も変えていないのに、置いた数値の間隔やラベルだけで平均が動いた、となります。読み違えやすいのは、差の0.7458や0.5708を症状または血液型の効果と受け取ることです。この解析では群間効果を生成も推定もしておらず、コード平均の差に医学的な意味はありません。
一方、収縮期血圧を事前に固定した130mmHgで二値化すると、130mmHg未満は111例、130mmHg以上は129例でした。192種類あった観測値が2種類へ減った様子を図1に描いています。
bp_cutoff <- 130
bp_high <- systolic_bp >= bp_cutoff
png("continuous-to-binary.png", width = 1100, height = 688, res = 200)
par(mfrow = c(2, 1), mar = c(4, 4, 2, 1))
stripchart(systolic_bp, method = "jitter", pch = 16, cex = 0.55,
xlab = "Systolic blood pressure (mmHg)", main = "Continuous values")
abline(v = bp_cutoff, lty = 2, col = "#C44E52")
plot(jitter(as.integer(bp_high), amount = 0.08), seq_len(sample_size),
pch = 16, cex = 0.55, xlim = c(-0.3, 1.3), xaxt = "n", yaxt = "n",
xlab = "Category after dichotomization", ylab = "", main = "Binary values")
axis(1, at = c(0, 1), labels = c("Below 130", "130 or above"))
dev.off()

図の赤い破線は130mmHgの境界です。この解析では境界をデータから選んでいないため、最適な閾値を探索した場合の偏りは評価していません。確認できるのは、同じ側の値の差が失われ、連続量とアウトカムの関係を表す情報が粗くなる方向だけです。
研究目的から要約と解析を選ぶ
同じ変数でも、研究目的によって扱いが変わることがあります。収縮期血圧そのものの変化量を推定したい研究では連続値が中心ですが、事前に定義された基準への該当割合が主要な研究目的なら、その二値分類にも意味があります。分類の名前から手法を選ぶのではなく、何を比較し、どの量を報告したいかとの対応が必要です。
そこで論文の方法には、変数名だけでなく測定単位、カテゴリの定義と順序、要約方法、解析モデルでの扱いを記載します。順序変数へ数値スコアを置くなら間隔の根拠を説明し、連続変数を分類するなら境界値を定めた根拠と時点も明らかにします。結果表では人数と割合、平均値と標準偏差、中央値と四分位範囲を、変数の性質と分布に合わせて使い分けます。
前提条件や推定したい量を確認せず、数値コードや有意差だけから結論を出す進め方は適切ではありません。尺度は解析ソフトの設定項目ではなく、観測値にどの比較を認めるかという研究上の約束だからです。
値の意味を保ったまま解析へ進む
式(1)の関係を確認するとき、列が数値型か文字型かだけでは足りません。値に順番があるか、隣り合う値の差に量としての意味があるか、カテゴリへの分類自体が研究目的かまで分かれば、連続・順序・名義の区別は解析方針へつながります。
解析結果を読む場面でも同じです。平均値が計算できたという事実は、その平均に解釈可能な意味があることを保証しません。変数が持つ関係を保つ符号化と要約を選び、失われる情報がある場合は、その損失を研究目的と照らして説明できる形にしておくことが大切です。
参考文献
- Stevens SS. On the Theory of Scales of Measurement. Science. 1946;103(2684):677-680.
- Velleman PF, Wilkinson L. Nominal, Ordinal, Interval, and Ratio Typologies Are Misleading. The American Statistician. 1993;47(1):65-72.
- Forrest M, Andersen B. Ordinal scale and statistics in medical research. Br Med J (Clin Res Ed). 1986;292(6519):537-538.
- Sullivan GM, Artino AR Jr. Analyzing and Interpreting Data From Likert-Type Scales. J Grad Med Educ. 2013;5(4):541-542.
- Royston P, Altman DG, Sauerbrei W. Dichotomizing Continuous Predictors in Multiple Regression: A Bad Idea. Stat Med. 2006;25(1):127-141.


