第4章は統計を扱います。

第4章ではt検定から始まり色々な種類の統計やp値や信頼性の考え方などを紹介してきました。

そして内容は後半の多変量解析に入り、前回は多変量解析を行う上で大切な考え方を紹介しました。

【4-17】「先にデータを取って後で統計」がなぜ危険なのか?どうすればいいのか?を多変量解析、相関・因果関係、交絡を使って解説してみる


そしてもう1つ重要な考え方があります。それは洞察(因果関係)を見たいのか?それとも予測がしたいのか?です。

これは統計学と機械学習の違いにも通じる話になります。

1.使うデータ

ここでも前回の記事と同じデータを使います。

架空のデータです。

library(tidyverse)
set.seed(25) v1 <- rnorm(100,87,13) v2 <- rnorm(100,63,10.5) v <- c(v1,v2) a1 <- as.integer(rnorm(100,35,5)) a2 <- as.integer(rnorm(100,55,5)) age <- c(a1,a2) sex <- c(sample(c(0,1),size = 100, prob = c(0.7,0.3),replace = TRUE),sample(c(1,0),size = 100, prob = c(0.7,0.3),replace = TRUE)) t1 <- as.integer(rnorm(100,120,20)) t2 <- as.integer(rnorm(100,70,20)) time <- c(t1,t2) df <- data.frame(v,time,age,sex) df

スクリーンショット 2020-07-15 13.51.21

v:歩行速度、1分間に歩いた距離(m)とします。

time:片脚立位の時間(s)

age:年齢

sex:性別(0:男性,1:女性)

これをみて片脚立位の時間が長くなれば歩行速度が上がると考えていいかどうかとします。




2.多変量解析はどういう仕組みか?

スクリーンショット 2020-07-17 14.34.46

スクリーンショット 2020-07-17 14.27.48



まず多変量解析(ここでは重回帰分析)は左辺(y)にアウトカム、右辺に要因(x)をおいた式となります。yとxには色々呼び方がありますが同じ意味です。

そして数学的なテクニックを使い(最小二乗法や最尤法)を使い係数を求めます。

コードと解釈の仕方は次の記事で紹介します。

fit <- lm(v ~ time + age + sex)
summary(fit)

スクリーンショット 2020-07-17 14.47.59

色々見るところはあるのですが、とりあえず黄色に注目します。

Estimateというのが係数(β)になります。(Intercept)は切片です。

1分で歩いた距離 = 0.03×片脚立位時間(秒)+ -0.84×年齢(歳) + 0.42(女性であれば) + 108.33

ロジスティック回帰もそうですが、やっていることは係数を求めているということです。


3.重回帰分析とロジスティック回帰の使い分け方

重回帰分析とロジスティック回帰の使い分けはアウトカムを見ます。

重回帰分析:アウトカムが連続した数値になっている
ロジスティック回帰:アウトカムが「自立・非自立」といった2択になっている


ちなみにアウトカムが3択以上のある場合は自分の知りたいことにあわせて2択にしてしまったほうがいいです。
3択以上の解析は複雑になります。


4.xを見たいのか?yを見たいのか?

じつはこの数式には2つの見方があります。それはxを見たいのか?yを見たいのか?です。


洞察(因果関係)に興味がある=xに興味がある

まずxを見るときの視点を説明します。

上の式を再掲します
1分で歩いた距離(m) = 0.03×片脚立位時間(秒)+ -0.84×年齢(歳) + 0.42(女性であれば) + 108.33

この式は右辺に片脚立位時間、年齢、性別という3つの変数があります。

ここで年齢と女性でないという条件で片脚立位の時間が1秒増えるとどうなるでしょうか?

答えは歩行距離が0.03m増えるということになります。

逆に片脚立位・女性でない条件で年齢が1つ増えれば歩行距離は-0.84m減ります

こうやって係数を見ることで他の条件は同じだとして知りたい要因が1つ値が変わるとアウトカムはどう変化するのかを見ることができます。そういう意味ではyの値自体には大して意味がありません。


ここで前回の記事の交絡因子が関係します。

【4-17】「先にデータを取って後で統計」がなぜ危険なのか?どうすればいいのか?を多変量解析、相関・因果関係、交絡を使って解説してみる

因果関係(効果があるかどうか)を考える時はどれだけ重要な交絡因子が取り除けているかが説得力に繋がります。そのためにはどの因子が大事な交絡因子なのかを考える必要がありますが、それはその分野の知識によって決まります。
スクリーンショット 2020-07-17 15.10.39


よって大事なことは右辺には興味がある要因と交絡因子をできるだけ入れることが大切です。

そして知りたい要因は介入が可能であるものが基本となります。
例えば知りたい要因を年齢にしてしまうと、もし有意差が出たとしても年齢を変えることはできません。

なぜここを強調するかというと統計の手法には変数選択という自動的に変数を削除することができるオプションがあるからです。

医療統計でいちばん有名なのはステップワイズ法です。
(下図はEZRの重回帰分析の設定画面)
スクリーンショット 2020-07-17 15.20.46

交絡因子の影響を除きたいのに交絡因子自体を計算から除いてしまうとそれは本当にこの研究でいいたかったことなのか?となってしまいます。

そのためxに興味があるときは変数選択は基本行いません(強制投入といいます)。

*ただ本によっては意見が違ったりします。理学療法の研究ではステップワイズが使われていることも多く、もしかしたら査読で「ステップワイズを」と言われる可能性はあるかもしれません。その雑誌に合わせることも必要なのかもしれませんし、生物統計家のご意見も伺ってみたいところです。

以下の2サイトではステップワイズはよくないという記事になります。







予測に興味がある=yに興味がある。

次にy(左辺)を見るときの視点を紹介します。

上の式を再掲します
1分で歩いた距離(m) = 0.03×片脚立位時間(秒)+ -0.84×年齢(歳) + 0.42(女性であれば) + 108.33

これは片脚立位時間、年齢、性別がわかれば左辺の1分間で歩いた距離を予測することができるということになります。

スクリーンショット 2020-07-17 17.02.35

つまり右辺はどれだけいい予測になる因子を集められるかが大切になります。
そのため交絡因子がどうかや介入が可能かどうかは重要な問題ではありません。
ただ、勘違いしやすいのですが因子が多ければいいモデルになるわけではありません
先程と違い精度に貢献しない因子を外すこともします。

そして予測に興味がある場合に大切なのはモデルを作ることより作ったモデルが新しいデータでも通用するかを試すことで信頼性が増すということです。

これは今回のデータのみに当てはまりがよく、未知のデータでは通用しないという過学習という問題が起こっている可能性があるからです。モデルを作っただけでは過学習が起こっているかどうか判断できません。今回のモデルで使わなかったデータで予測がどれくらい的中するか再検証する必要があります。誤差だったり精度・感度・特異度はこういった再検証に用いられます。



加えて医療統計ではあまりみられませんが、取ったデータから新たな変数を作ることも可能です。

例えばアウトカムを歩行距離として、下肢の左右各関節で疼痛(VAS)を測っていたとします。ただ痛いところは人それぞれですし、変数が多くなりすぎるので変数をまとめたいとします。
  • 各関節の最大のVASを採用する
  • 各関節の平均点を採用する
  • VAS5を超えた関節の数を採用する
  • 他の点数とかけ合わせた新たな変数を作る
他にも色々あるかもしれません。そうやって精度の高い予測を作ることになります。
こういった作業は特徴量エンジニアリングといい、機械学習のテクニックになります。

ただし解釈の難しい因子を作ってしまうと解釈(説明可能性)が難しくなります
上の例だと痛い関節の数はイメージが付きますが、疼痛×筋力みたいな数値はその数値にどういった意味があるのか?と聞かれても「予数値で臨床的な意味は・・・だけど予測の精度が上がる数値」となってしまします。

精度を追求するか説明可能性を追求するかはトレードオフな関係ではありますが、医療現場では説明可能性がある因子を使った方が作った方が使ってくれやすいという印象があります。理由を説明しにくいモデルは「ホントにー?」と胡散臭く思われる可能性があります。

まずは説明しやすいモデル、その後に需要があれば難しいモデルに挑戦するような考えがいいかと思います。


5.因果関係でも予測でも入れないほうがいい変数がある

ただ因果関係・予測どちらにも言えることですが入れないほうがいい因子があります。それは多重共線性が関係します。

数ある因子同士の中で相関係数が高すぎるものが混じっていると多重共線性が発生し結果が不安定にあるという特徴があります。正確な表現ではありませんが、計算の過程で◯÷0みたいな変なことが起こってしまうイメージです。

そのため独立変数同士で相関行列を求め、相関係数が高いものがあるかを調べたりVIFというものを確認したりします。

もし多重共線性が見つかれば相関が高い因子のうちのどちらかを省くか、合成した新しい変数を採用するかになります。

相関行列の求め方は【4-16】Rで相関行列を作成するGGally, cor, clrrplot, corrr関数を紹介しますで紹介しています。



6.まとめ

重回帰分析やロジスティック回帰という回帰分析は計算方法やコードの書き方は同じでも医療統計として使う場面と機械学習として使う場面があります。知りたい要因の因果関係に興味があるのか?アウトカムの予測に興味があるのかで集めるデータや解析や検証の行い方に違いが出てきます。


知りたい要因の因果関係に興味がある→医療統計的な考え方
スクリーンショット 2020-07-17 15.10.39
→データを取り始める前に重要な交絡因子が無いかを十分に検討する
→選択バイアス、情報バイアスもできるだけ入らないよう注意する
→多重共線性がないか確認し、あれば対処する
→分析の結果から考察する


アウトカムの予測に興味がある→機械学習的な考え方
スクリーンショット 2020-07-17 17.02.35
→データを取り始める前に予測に重要な要因は何かを検討する
→多重共線性を調べる
→データを予測作成用のデータと検証用のデータに分ける
→予測作成用のデータでモデルを作る。できたモデルの精度を確認する
→検証用のデータで精度を再検証する
(モデルを作成しただけだと実は本当の精度はわからない)


医療統計ではほとんど前者になることが多い、もしくはどっちつかずになっていることが多い印象ですが、どちらに興味があるかが意識できると多変量解析の勘所が上がるのではないかなと思います。


前回・今回と長くなってしまいましたが、次は重回帰分析の実際について紹介します!