ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

多重比較補正に対する考え方 [R]

測定されたデータをもとにして母集団を比較するときには2種類の誤りが生じる可能性があります。

  • 第1種過誤(αエラー):本当は差がないのに「差がある」と判断してしまう誤り
  • 第2種過誤(βエラー):本当は差があるのに「差がない」と判断してしまう誤り

エラーをどの程度まで許容するかは状況によって異なりますが、臨床研究ではαエラーを5%まで許容していることが多いです(有意水準のことです)。

1つの疑問に答えるために仮説検定を複数回行うと、個々の検定でのαエラーは5%未満であっても、全体では5%を超えてしまっていることがあります。これに基づいて結論を下すと、誤った判断をしている確率が想定しているよりも高くなってしまいます。このことは「多重比較の問題」とか「検定の多重性」とか呼ばれたりします。

ここでは多重比較について学んだことを記事にしたいと思います。

多重比較補正方法

例えば、薬剤A, B, Cがあって、これらの薬剤の効果を比較するとします。どの治療が優れているかペアを作って比較する場合、

  • $H_0$:A = B
  • $H_0$:B = C
  • $H_0$:C = A

の3つの帰無仮説について検定することになります。個々の仮説検定におけるαエラーを、individual error rate(IER)とかper comparison error rate(PCER)とか呼んだりするようです。

この3つの検定は「薬剤A, B, Cの効果は全て等しい」という、より大きな仮説を構成しています。同時に考慮されるべき複数の仮説から構成される仮説群を、帰無仮説族(famiy of hypotheses)と呼びます。

帰無仮説族のαエラーを制御するために用いられる方法はいくつか提唱されていますが、「何をαエラーの基準として制御するか」によって大きく2つに分けられます。

以後、下の表*1を使って2つのアプローチで基準にしている指標を説明します。これはm個の仮説検定について、$H_0$の真偽、つまり本当は差がないのか($H_0$が真)、本当は差があるのか($H_0$が偽)なのかと、検定における有意差の有無を表しています。$H_0$が真にもかかわらず、検定で有意差が出てしまったV個の仮説検定については、偽陽性ということになります。

FWERを制御するアプローチ

Family-wise error rate(FWER)は仮説族のうち1つでも偽陽性になってしまう確率 です。表中の文字を使って表すと、次のように書けます。

$$ FWER = P(V \geq1) $$

ちなみに個々の検定でのαエラー(先程IERとかPCERとか呼んだもの)は、

$$ IER = E\left[ \frac{V}{m} \right] $$

と書けます。FWERアプローチの代表であるBonferroni法は、IERをα/mに抑えれば、FWERはα以下になることが保証される性質を利用したものです。Bonferroni法の低い検出力を補うべく開発された方法としては、Holm法、Hochberg法、Hommel法があります。

FDRを制御するアプローチ

False discovery rate(FDR)は、棄却した仮説(有意差があったもの)の中で、棄却が誤っていた(本当は差がなかった)確率 です。 表中の文字を使うと、

$$ FDR = E\left[ \frac{V}{R} \right] $$

となります。臨床の検査で言えば、「検査で陽性と判断したのに実際は病気は存在していなかった割合(= 陽性「非」的中率)」です。

FWER vs FDR

FWERアプローチは「偽陰性が増えても(つまり検出力が落ちても)、偽陽性は避けたい」という手法です。仮説族のうち1つでも誤っていると結論に影響するような場合に用います。

これに対しFDRアプローチは「真の効果を検出する確率を向上させるためなら、多少の偽陽性結果は許容する」という手法です。

例えば有効な薬剤を探すため、まずは可能性のある物質を絞って、次のフェーズで効果を検証したいときはFDRアプローチは良い方法です。この状況だと、スクリーニングで落としてしまうと効果の検証に回らないので、多くの可能性を拾い上げたいからです(ただ、拾い上げすぎると次のフェーズで負担が増えます)。

他にも、複数のエンドポイントを総合的に判断して、どちらが有効な治療か決定したいときは、1つのエンドポイントで偽陽性になったとしても、全体の中の割合が許容できる範囲なら、最終的な決定には影響がないかもしれません。この場合もFDRアプローチの方が有利です。

偽陽性・偽陰性のどちらに重みを置くかは、個々の研究で慎重に判断した方がいいでしょう。

そもそも多重性補正が必要か

複数の仮説検定を実施したからといって、常に多重性の補正が必要な訳ではありません。 今回参考にしたJAMA Guide to Statistics and Methodsによると、仮説検定に基づいて答えを出したいリサーチクエスチョン(RQ)との関係性が重要なようです。すなわち、複数の仮説が1つのRQに対するものであれば補正が必要ですし、複数の仮説が、それぞれ無関係なRQに対するものであれば補正不要です。

また、検証的仮説(=事前に設定された仮説)は最終的に何かの決定を下すための判断材料を提供することが目的なので、補正が必要な状況では補正をすべきです(しかも事前に決めた方法で)。これに対し、事前に仮説を設定していない探索的仮説では必ずしも多重性補正を必要としませんが、統計学的に有意な差が認められた結果について、読者が科学的な重要性を正しく判断できるように配慮すべきです。

A, B, Cの3群を比較するときに、B vs. Cの比較に興味がなければ「2つの仮説(A vs. B, A vs. C)についてのみ補正する」というスタンスでも構いません。ただし、あくまで事前に決めてあることが前提です。結果を見て「3つの対比較を補正すると有意差でないけど2つならギリギリ有意差が出るから」というのはもちろんダメです。

Rで実行する方法

カテゴリー変数の多重比較

以前、カテゴリー変数の多重比較補正について書きました。代表的なFWERアプローチ(Bonferroni法, Holm法, Hochberg法)については、実際にどのような計算がされているかも確認しました。

necostat.hatenablog.jp

使用できる補正方法については、後に登場するp.adjust( )の説明を参照してください(内部でp.adjustが使われているので)。

連続変数の多重比較

A, B, C群に10例ずつ割り当てられて得られたデータx_contを比較する方法を示します。

x_cont <- rnorm(n=30, mean=0, sd=10)
group <- rep(c("A", "B", "C"), 10)

t検定を使う場合は、pairwise.t.test( )を使います。

pairwise.t.test(x=x_cont, g=group, 
                p.adjust.method = "bonferroni",
                pool.sd = FALSE)
  • p.adjust.method:後述のp.adjust( )の説明を参照
  • pool.sd:Welchのt検定を使うときはFALSE, Studentのt検定を使うときはTRUE

出力は次のようになります。

 Pairwise comparisons using t tests with non-pooled SD 

data:  x_cont and group 

  A     B    
B 1.000 -    
C 0.484 0.095

P value adjustment method: bonferroni 

Mann-Whitney U検定を使う場合は、pairwise.wilcox.test( )を使います。

pairwise.wilcox.test(x=x_cont, g=group, 
                     p.adjust.method = "bonferroni")

P値だけを使って多重比較補正する

前述の方法に上手く当てはめられないケースでも、個々の仮説検定のP値が得られていれば補正は可能です。p.adjust( )を使います。

例えば、

p <- runif(n=10, min=0.01, max=0.1)

でランダムに作られたP値

> p
 [1] 0.04351779 0.02973471 0.02640490 0.03786525 0.03460761 0.02104036
 [7] 0.08782673 0.05836001 0.03028355 0.01085827

を、Holm法で補正すると次のようになります。

> p.adjust(p, method = "holm")
 [1] 0.2112392 0.2112392 0.2112392 0.2112392 0.2112392 0.1893633 0.2112392
 [8] 0.2112392 0.2112392 0.1085827

用いることができる補正方法は以下のとおりです(引用文献は?p.adjustで表示されるヘルプを参照ください)。

  • FWERアプローチ:"holm", "hochberg", "hommel", "bonferroni"
  • FDRアプローチ:"BH", "BY", "fdr"(= "BH"と同じ)

おわりに

  • やはりフェアなスタンスで事前に決めておく方が査読対応でもスッキリするように思います。
  • コロナ禍でのペット需要増を反映してか、ペット保険会社の業績が好調なようです。我が家も入ってますが、利用する機会がありませんように。

参考資料

  • Yoav Benjamini and Yosef Hochberg. Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing. Journal of the Royal Statistical Society. Series B (Methodological), 1995, Vol. 57, No. 1 (1995), pp. 289-300

*1:参考資料に挙げたBenjamini(1995)を元に作成しました

回帰モデルの診断・評価(3):多重共線性

この記事では回帰モデルにおける「多重共線性」について学んでみるつもりです。回帰モデルの満たすべき仮定の概要については以下の記事を参考にしてください。

necostat.hatenablog.jp

necostat.hatenablog.jp

多重共線性とは

回帰モデルの説明変数同士に相関があることを「多重共線性(multicollinearity)」と言います。

説明変数  X_1, X_2 が完全に独立であれば、単回帰モデル  Y = \alpha_0 + \alpha_1 X_1 で推定される係数  \alpha_1 と、変数  X_2 を加えたモデル  Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 で推定される係数  \beta_1 は等しくなります。

逆に、説明変数  X_1, X_2 が完全相関(相関係数 r=1)のとき、つまり  X1 = cX_2 と書けるときは、

 
\begin{aligned}
Y &=  \beta_0 + \beta_1 X_1 + \beta_2 X_2\\
&= \beta_0 + (c \beta_1 + \beta_2) X_2 
\end{aligned}

となり、変数  X_2 の係数になる値を与える  \beta_1,  \beta_2の組み合わせが無限に存在することになり、解が得られません。

現実世界は上記の両極端な場合の中間にありますが、相関が強く、後者に近いケースでは係数βの推定誤差がものすごく大きくなるなど、色々問題が起こってきます。

多重共線性を疑う状況

次のような状況では多重共線性が存在する可能性を考えます(もちろん未測定交絡など他の問題が原因かもしれませんが)。

  • 変数を加えたり除いたりしたときに係数βの推定値が大きく変化する
  • 1つの対象者を加えたり除いたりしたときに係数βの推定値が大きく変化する
  • 重要な変数の係数について有意差がない or 信頼区間が非常に広い
  • 先行研究や理論的に考えられる効果の方向と逆の結果になる
  • 2つの変数間の相関係数が非常に高い

分散拡大要因(Variance Inflation Factor, VIF)

変数を下のように変換(correlation transformation)して、線形回帰モデル*1に当てはめて求めた係数を標準化回帰係数と言います。

 
\begin{aligned}
X_{ik} &= \frac{1}{\sqrt{n-1}}\left( \frac{X_{ik} - \bar{X_k}}{s_{X_k}} \right) \\
Y_i &= \frac{1}{\sqrt{n-1}}\left( \frac{Y_i - \bar{Y}}{s_Y} \right)
\end{aligned}

標準化回帰係数の分散が、変換前のデータで推定される回帰係数の分散と比べてどれくらい増大したかを示すのがVIFです。 簡単に言うと、「説明変数間の相関によって、回帰係数の分散がどれくらい増大するか」を示した指標です。

ただ、この説明は何回読んでも頭に残りません。下のように、決定係数*2(= 他の説明変数でどれくらい説明されるか) R2 を使ったVIFの定義の方が分かりやすいです。

 
\begin{aligned}
(VIF)_k &= \frac{1}{1-R_k^2}
\end{aligned}

相関関係がないとき(R2 = 0)は、VIF = 1となり、相関関係が強くなるとVIFは大きくなっていきます。 「多重共線性がある」と判断する目安は VIF > 10と言われています(他にも>5とか>2とか言われたりします)。

変数が2つしかなければ、決定係数は相関係数  r の2乗で計算できるので、下のようになります。

  • r = 0.9 → VIF ≒ 5.3
  • r = 0.95 → VIF ≒ 10.3
  • r = 0.99 → VIF ≒ 50.3

変数が3つ以上になると手計算では難しくなりますので統計ソフトを使いましょう。

vif( )を使ってVIFを計算する

まずmitcarsデータで下のようにモデルを当てはめます。

fit <- lm(mpg ~ disp + hp + drat, data = mtcars)

carパッケージのvif( )に当てはめたモデルを渡します。

library(car)
vif(fit)
    disp       hp     drat 
4.621988 2.868264 2.166843 

一般的に目安とされるVIF>10となっている変数はないので、問題となる多重共線性はないと判断していいと思います。

ロジスティック回帰モデルのように、アウトカムが連続変数ではなく線形回帰モデルが当てはめられない場合はどう計算したらいいでしょうか。VIFは説明変数の相関だけで計算されるので、アウトカム変数の型は関係ありません。 なので、アウトカムを適当において、lm( )で線形回帰モデルを当てはめて、vif( )でVIFを計算すればOKです。

対処法

同じようなものを測っている変数がモデルに含まれる場合はVIFが大きくなる可能性があります。

最も簡単な対処法としては、相関の強い変数のどちらかを除外したり、統合して1つにまとめたりする方法でしょう。 変数選択アルゴリズム(Ridge法, LASSO法)を使って変数を減らす方法を紹介しているのも見かけますが、個人的には予測因子の候補も多すぎるケース以外ではあまり選択肢として考えていません。 そもそも予測が目的の回帰モデルであれば、少しでも予測に役に立つ変数は加えたらいいのでVIFを問題にすることはないです。

臨床研究では、一見似たような変数に思えても異なった側面を測定していることが多く、多少の多重共線性があっても問題になることはないと言う人もいます。実際、相関係数が0.9を超えていない場合や、係数の信頼区間が解釈に影響するほど広くないなら、VIFを見るまでしなくていいかもしれません。また、調整目的で入れた変数のVIFが高かったとしても、興味ある要因のVIFが高くないなら気にしなくて良いという意見もあります。

おわりに

  • 「気にしなくて良い」という意見をみかけると、ついついそちらになびいてしまう悪いクセがあります。

参考資料

statisticalhorizons.com

www.statalist.org

*1:ただし切片項は含まない

*2:寄与率ともいいます

回帰モデルの診断・評価(2):線形性

この記事では回帰モデルが満たすべき前提条件のうち、「線形性」について評価する方法について学んでみるつもりです。回帰モデルの満たすべき仮定の概要については以下の記事を参考にしてください。

necostat.hatenablog.jp

線形性(linearity)の仮定とは

線形性とは、

  •  f(x_1 + x_2) = f(x_1) + f(x_2)(→ 2つの数値の和を入力したときの出力は、それぞれの値を入力したときの出力の和になる)
  •  f(ax) = af(x)(→ 入力をa倍にすると、出力もa倍になる)

という性質のことです。

回帰モデルでは、アウトカムYに対する各説明変数Xの影響が「直線の式」、つまり

 
\begin{aligned}
Y_i &=  \beta_0 + \beta_1 X_{1i} + \beta_2 X_{2i} + error
\end{aligned}

のようになっていることです。 「直線の式」と表現しましたが、Xの1次式である必要はありません。例えば、

 
\begin{aligned}
Y_i &=  \beta_0 + \beta_1 X_{i}^2 + error \\
Y_i &=  \beta_0 + \beta_1 \sqrt{X_{i}} + error \\
Y_i &=  \beta_0 + \beta_1 \log{X_{i}} + error \\
\end{aligned}

のように、べき乗・平方根・対数のような変換があったとしても、 変換後のXを新しい変数  t_i と置き換えてしまえば、全て下のようになります。

 
\begin{aligned}
Y_i &=  \beta_0 + \beta_1 t_i + error \\
\end{aligned}

変換したらOKだったらどんなモデルも線形モデルになりそうですが、下のモデルは非線形モデルです。

 
\begin{aligned}
Y_i &=  \beta_0 +  X_{i}^{\beta_1} + error \\
\end{aligned}

他にも、加算的であるべき2つの変数の効果に交互作用があると線形性を満たしません。

個人的には説明変数Xに注目するよりも、係数βに注目する*1方が「線形性の仮定」が理解しやすいのではないかと思っています。

Component + Residual Plot(C+R plot)

別名 partial residual plotとも呼ばれます。Partial residual(PR)は次のように定義されます(ここで説明変数は  X_1,  X_2 の2つだと思ってください)。

 
\begin{aligned}
PR_i &=  e_i +  \beta_1 X_{1i} \\
\end{aligned}

ここで、 e_i は全ての説明変数を使った線形回帰モデルの残差です。

真の関係性が

 
\begin{aligned}
Y_i &=  \alpha_0 + f(X_{1i}) + \alpha_2 X_{2i} + \varepsilon_i
\end{aligned}

であるとすると、

 
\begin{aligned}
PR_i &=  e_i +  \beta_1 X_{1i} \\
&= Y_i - \hat{Y}_i +  \beta_1 X_{1i} \\
&= \{\alpha_0 + f(X_{1i}) + \alpha_2 X_{2i} + \varepsilon_i \} - \{\beta_0 + \beta_1 X_{1i} + \beta_2 X_{2i}\} +  \beta_1 X_{1i} \\
&= (\alpha_0 - \beta_0) + (\alpha_2 - \beta_2)X_{2i} + f(X_{1i}) + \varepsilon_i \\
&\simeq f(X_{1i}) + \varepsilon_i
\end{aligned}

最後の式は  \alpha_0 \simeq \beta_0,  \alpha_1 \simeq \beta_1 から導かれます。もし X_2 について線形性から大きくかけ離れていたとしても、 \alpha_j \beta_j はそれほど大きくは違わないだろう、ということだそうです(多分)。

変数  X_1 に対して PR_iをプロットしたものがC+R plotで、 X_1 について線形性が成り立っていればプロットは直線になります。

crPlots( )を使ってC+R plotを描く

まず、irisデータで線形回帰モデルを当てはめます。

fit <- lm(Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width,
          data = iris)

carパッケージを読み込んで、当てはめたモデルをcrPlots( )に渡します。

library(car)
crPlots(fit)

青い点線がそれぞれの変数の係数βを傾きとした直線、ピンクの実線が実際のプロットを局所回帰した曲線です。プロットを見ると、いずれの変数に対しても線形性が仮定できそうです。

Added-Variable Plot(AV plot)

Partial regression plotとも呼ばれるようです。変数  X_1 についてのAV plotは、次の2つをx軸, y軸にとってプロットしたものです。

  • y軸:アウトカム  Y X_1 を除いた変数で回帰したときの残差  e(Y | X_2)
  • x軸:説明変数  X_1 X_1 を除いた変数で回帰したときの残差  e(X_1 | X_2)

このプロットの傾きが0(= 水平)であれば、「他の変数が含まれている状態では変数  X_1 によって追加される情報はない」ということになります。プロットの様子(曲がり具合)からどのように変数変換したらいいかを判断することに使いたくなりますが、あくまで「この変数を追加して意味があるか」が分かるだけで、線形性については判断できないとのこと。(なので厳密には線形性の評価方法とは言えないようです。)

avPlots( )を使ってAV plotを描く

同じくcarパッケージに含まれているavPlots( )に当てはめたモデルを渡します。

avPlots(fit)

いずれの変数についてもプロットが水平ではないので、モデルに含めて意味がありそうです。

おわりに

  • GLMにも拡張できるそうです。
  • 2匹目の保護猫を迎えてちょうど1年になりました。当初は先住猫と色々あって、本当にお迎えしてよかったのか悩みましたが、そのことも今となってはいい思い出です。

参考資料

  • Applied linear statistical models(5th edition)
    • AV plotについては多く説明されていますが、C+R plotは参考文献を参照という記載のみでした。
  • Regression Graphics: Added-Variable and Component+Residual Plots As Implemented in the car and effects packages for R
    • CANSSI Statistical Software Conference 2022でのレクチャースライドでしょうか。最初に読みました。大変分かりやすかったです。
  • Fox J, Weisberg S. Visualizing Fit and Lack of Fit in Complex Regression Models with Predictor Effect Plots and Partial Residuals. J. Stat. Soft. 2018;87(9):1-27.
  • R.Dennis Cook. Exploring Partial Residual Plots, Technometrics. 1993; 35:4, 351-362
    • Partial residual plotについては、まずこれを読むと全体像が見えやすいかもしれません。
  • R.Dennis Cook. Added-variable plots and curvature in linear regression. Technometrics. 1996; 38:3, 275-278

*1:それぞれのβで偏微分したらどうなるか

回帰モデルの診断・評価(1):正規性・等分散性・外れ値・独立性

Rothman先生のModern Epidemiology(4th edition)の拾い読みシリーズとして"Chapter 21:Regression Analysis Part II: Model Fitting and Assessment" をまとめようと思ったんですが、もう少し統計学寄りの内容を勉強しようと思い、Applied linear statistical models(5th edition)を拾い読みしました。

この記事では回帰モデルの診断・評価の話だけを扱っています。回帰モデルの選定については下のリンクを参照のこと。

necostat.hatenablog.jp

線形回帰モデルの前提条件

「アウトカムである連続変数Yを説明変数Xで回帰する」という比較的シンプルな線形回帰モデルを数式で考えてみます(ちょっとクドイ書き方かも)。下の式で  i i 番目の対象者であることを示す添字です。

 
\begin{aligned}
E [Y_i | X=X_i ] &= \beta_0 + \beta_1 X_i \\
Y_i &= E [Y_i | X=X_i ]+ \varepsilon_i \\
\varepsilon_i &\sim Normal(0, \sigma^2) \\
\varepsilon_i &\perp \varepsilon_j
\end{aligned}

1番目の式は、アウトカムYの平均値と説明変数Xの関係性を表しています。変数Xが与えられたときに期待されるYの平均値(条件付き期待値)はXの1次式、つまり直線関係になっています。 線形回帰モデルというくらいだから直線でないとダメかというとそんなことはなく、別に2次式だろうが、対数変換されていようが構いません。

線形性とは

  • 2つの数値の和を入力したときの出力は、それぞれの値を入力したときの出力の和になる( f(x_1 + x_2) = f(x_1) + f(x_2)
  • 入力をa倍にすると、出力もa倍になる( f(ax) = af(x)

という性質のことで、これを満たしていると「入力に対してどんな出力が得られるか」が理解しやすくなります。

「係数βについて線形独立である」*1(ベクトルとか行列を習ったときに出てきた用語で、「軸」の方向が平行になっていないこと)という言い方もできると思います。モデル式の右辺が変数Xの多項式になることもありうるので、変数Xではなく係数βに注目した説明の方が昔の私には分かりやすかったです。

2番目の式にあるように、実際に観察されるアウトカムYは説明変数Xと係数βで完全に決まるわけではありません。偶然誤差(random error)  \varepsilon_i がノイズとして加わって測定されます。

3番目の式は、この偶然誤差が中心が0の正規分布に従っていると仮定していることを示しています。誤差  \varepsilon_i の平均は0なので、アウトカムの期待値(平均値)  E[Y_i] は  \beta_0 + \beta_1 X_i となるように想定したモデルであると言えます。 偶然誤差  \varepsilon_i のバラつき具合は分散  \sigma ^2 で与えられ、 \sigma ^2 が大きいほどアウトカムの期待値  E[Y_i] からのズレが大きくなりえることになります。そして、各対象者における誤差の分散は等しいことが仮定されます。

4番目の式にある " \perp " は、垂直に交わる記号として見覚えがあるかもしれません。ここでは「無関係である・独立である」ことを示しています。つまり、このモデルでは各対象者の誤差同士には関連がないことが仮定されています。

前提条件をまとめてみます。

  • 線形性(linearity):係数βが互いに線形独立である
  • 正規性(normality):誤差が正規分布に従う
  • 等分散性(homoscedasticity):誤差の分散が一定である
  • 独立性(independence):誤差が互いに独立である

次からは、誤差についての条件(2-4番目)について評価する方法を見ていきましょう。

残差とは

変数Yの真の値が分からないと誤差(error)がいくらなのか分かりません。そこで、観測値と予測値の差、残差(residual)に注目します(残差 = 観測値 - 予測値)。 モデルが前提条件を満たしていれば、残差は誤差の満たすべき条件を満たしているはずだからです。

ggfortifyパッケージで残差プロットを描いてみる

Rでお馴染みのirisデータを使って残差分析の方法をいくつか見てみましょう。次の回帰モデルについて評価してみます。

fit <- lm(Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width,
          data = iris)

当てはめたモデルを、ggfortifyパッケージのautoplot( )に渡します(実はplot( )に渡すだけでもいいんですが、一度に見栄え良く作図してくれるのでこうしてます)。

library(ggfortify)
autoplot(fit, which=1:6, label.size = 3)
  • which:表示したいプロットの番号。残差に関するプロットは1〜6まで。
  • label.size:グラフ内のラベルの大きさ

ちなみに上記に加え、指定したグループ毎に色を塗り分けることもできます。

autoplot(fit, which=1:6, label.size = 3,
         data = iris,
         colour = "Species")

正規性

誤差が正規分布に従うと仮定しているので、残差も大まかに言って正規分布に従っていなければなりません。

正規分布かどうか大まかに確認する方法の1つはヒストグラム(あるいは密度プロット)です。単峰・左右対称な分布ならOKです。

視覚的に確認するもう1つの方法は、Q-Qプロット(quantile-quantile plot)と呼ばれるものです(グラフ(2))。

Q-Qプロットは2つの分布の中で同じ分位数(パーセンタイル値など)をプロットしたもので、両者の分布が類似していればプロットは直線上に並びます。 例えば下の図はそれぞれ、x軸方向・y軸方向にある2つの分布について5つの分位点(1, 25, 50, 75, 99パーセンタイル)の交点をプロットしたものです。

左側は2つとも正規分布の場合です。5つの分位点の相対的な間隔は両分布でだいたい同じようになっているので、それらの交点はだいたい直線上に並んでいます。 これに対して、右側は正規分布からは程遠い分布と正規分布を比較しています。こうなると分位点の相対的な間隔が全然違うので、プロットは直線上に並びません。

等分散性

アウトカムYが大きくなるにつれて誤差も大きくなってしまう状況はしばしば遭遇します。そのため、予測値が変化しても誤差が一定かどうかを確認します。

グラフ(1)は、横軸にYの予測値を、縦軸に残差を取ったグラフです。予測値が変化しても残差の中央(青線)が0付近にあって、上下の広がり具合が一定なら等分散性を満たしていると解釈します。

グラフ(3)は、縦軸を残差の代わりにバラツキ具合で補正した残差*2の絶対値の平方根をとったものです。青線は平均的な残差の大きさを示していて、これが水平なら残差の大きさは一定と言えます。

残差をこのように変換すると残差の中央の傾向はわからなくなりますが、残差そのものの上下の広がりを見るよりもバラつきの変化が分かりやすくなります(多分)。

対処法

等分散の仮定を満たしていなくても係数の点推定値に影響はないが、その推定誤差が変わってきてしまいます。対処法としては、

  • 反復再重み付け最小二乗法(Iteratively Reweighted Least Squares, IRLS):通常どおり推定した残差をもとに、各対象者への重み付けを計算し、それを使って再度残差を計算し、またそれをもとに重み付けを更新し...という方法
  • 一般化推定方程式(Generalized Estimating Equations, GEE):IRLSを発展させ、対象者間で誤差の相関関係を考慮した方法

などがあります。

外れ値

先程挙げた前提条件に「外れ値」に関することは出てこないんですが、残差分析で作成される残りのプロットの理解には「外れ値」の説明が必要なのでここでまとめてみます(広い意味で正規性の評価と言えなくもないのかな?)。

まず グラフ(5),(6)に登場する Leverage(レバレッジ)は「てこ」という意味で、説明変数Xについての中心(= 平均)からの距離を表しています。説明変数が複数あっても、それらを統合した1つの値が用いられます。

グラフ(5)はleverageに対して、残差の大きさをプロットしたものです。Leverageによらず残差の大きさは一定でないといけないので、等分散性を評価することができます。

Leverageが単に変数の中心からの距離を表していたのに対し、Cook's distance予測値に対するその対象者の影響力を表しています。その対象者を抜いて予測した値が、元の予測値からどれくらい変化するかを示しています。

残差が大きい対象者はモデルがうまく当てはまっていない部分だと言えるので、モデル推定への影響力が強い対象者と言えます。また、中心からの距離が遠ければ、少しの残差であっても全体への影響が大きくなります(「てこ」という表現がよく分かります)。

グラフ(4)を見ると、影響力の強い対象者(= Cook's distanceが大きい)がどれなのかが分かります。

グラフ(5)と合わせてグラフ(6)を見ると、それぞれの対象者の影響力が残差から来るのか、あるいは中心からの距離に起因するのかが分かります(多分そういう使い方じゃないかと...)。

対処法

外れ値の原因が、明らかに測定・入力ミスと分かってれば修正・除外してもいいですが、収集後には原因が分からなくなってしまうので除外は推奨されていません。

「外れ値は悪」として除外することを考えるよりも、次のようなモデルの修正点を示唆してくれていると考える方がいいでしょう。

  • 重要な変数が無視されていないか
  • 高次項の追加やべき乗・平方根・指数・対数などの変換は必要か
  • 交互作用を考慮すべきか
  • アウトカムの分布として想定する確率分布は適切か

独立性

予測値やレバレッジの変化に対して、残差が特定の傾向を示さないことを確認します。 追加で下のコードでグラフ(1)-(6)には登場しないプロットを別作成します。

plot(residuals(fit), type="l")

単にデータの並んでいる順に、その残差をプロットして線で繋いだだけです。特定の傾向が見られなければOKです。データの並びが収集した順になっていると、次第に残差が大きくなる(小さくなる)などの傾向が見られる可能性があります。

おわりに

  • Applied linear statistical modelsでは他に、線形性や多重共線性の評価についても書かれているので、また別の記事でまとめてみたいです。
  • 猫にもサンタが来てました。エサ用に加工したカツオの切り身に我を忘れてました。

参考資料

www.sthda.com

  • 書き終わってから見つけました。「8. 回帰の診断方法」で自作関数を使ったキレイなプロットと、各前提条件の評価に使う検定方法がまとめて紹介されています。

htsuda.net

*1:「線型」という書き方の方が多いかもしれません

*2:Standardizedとあるが正確にはStudentizedだろうか...

Rothman拾い読み:回帰モデルの選定

Rothman先生のModern Epidemiology(4th edition)をパラパラめくって拾い読みしたメモです。 今回は回帰についてということで、 "Chapter 20:Regression Analysis Part I: Model Specification"を参考にしています。

この記事では回帰モデルの選定(specification)の概要だけにして、回帰モデルの評価の話はまた別の機会に。

回帰(regression)とは

Rothmanを引用すると、

A regression of a variable Y on another variable, say an exposure X, is a function that describes how some feature of the distribution of Y changes across population subgroups defined by values of X.

とある。つまり、「ある変数Yの分布の様子が、変数Xの状態で定義される集団内のサブグループごとで、どんなふうに変わるのか」を示した関数(function)が回帰であるとのこと。

ここで、回帰関数(regression function)とは「母集団において、変数Xがある値であるときに変数Yの代表値(多くの場合は平均値)がどんな値になるか」を示したもの。 関数(function)と言われると何やら数式をイメージしてしまうが、「Xの値を決めるとYの値が1つに決まる」というのが関数なので、必ずしも方程式で表される必要はない。 例えば、母集団において年齢が50歳の人のアウトカムの平均値は、実際に50歳の人全員のアウトカムを調べて平均を取ったら求まるので、方程式で関係性を定める必要がない。 母集団における真の関係性を指したもので、基本的にはノンパラメトリック(=パラメータや方程式に依存しない)であり、概念的なものである。

これに対して回帰モデル(regression model)とは、研究者が研究疑問に答えるために真の回帰関数を近似して選定した関数。回帰モデルは真の関係性を簡略化しているので、大なり小なり不正確であることは避けられないが、簡略化のお陰で事象の理解が助けられる。

下は両者の違いをイラストにしたものです。

回帰モデルを使った解析は、層別解析と比べて同時に多くの変数を扱うことができる反面、強い仮定を必要とするという欠点がある。

回帰モデリング(regression modeling)の工程

解析のために回帰モデルを作る過程を、回帰モデリング(regression modeling)と呼ぶ。回帰モデリングには以下の工程がある。

1. モデル選定(model specification)

モデルの大枠となる形を決める過程。Rothmanでは例として、「地球の公転軌道を正円とみなすか、楕円とみなすか」が書かれていた。楕円の方がより正確ではあるが、推定すべきパラメータが増えて複雑になる。また一般的に言って、複雑なモデルを使った予測の方が、シンプルなモデルによる予測よりも不安定になりやすい。

臨床研究においては、アウトカムにどのような確率分布を想定するかとか、どんな変数を含めるか、交互作用・高次項はどうするか、などを決める過程。得られたデータから選ぶのではなく、その研究テーマの専門家が知見を元に選ぶべきとされる。

2. モデル当てはめ(model fitting)

データをもとにして、設定したモデルに含まれているパラメータの最適な推定値を求める過程。最小二乗法(least square estimation)とか、最尤法(maximum likelihood)とか、擬似尤度(quasi-likelihood)を使って推定する。

3. モデル評価(model assessment)

モデルの当てはまり具合を診断・評価する工程。モデル診断がどの程度必要かは、モデルの用途(目的)による。要因によるリスク増加を要約したいだけの場合もあれば、共変量が与えられた条件下でアウトカムを予測したい場合もあり、後者の方がより詳細な評価を要する。

4. モデル選択(model selection)

モデル同士を比較して、どの共変量を含めるべきか、含めるとしたらどうやって含めるべきか(カテゴリー化・多項化)、どのリンク関数を使うべきか、などを選ぶ過程。統計的有意性に基づいて選ぶ方法は推奨されない。たとえ完全でなくても、因果モデルに関する先行知見が役に立つ。

用語のハナシ

前述の説明の中で登場したXは、説明変数(explanatory variable)、独立変数(independent variable)、予測因子(predictor)、共変量(covariates)などと呼ばれる。Yは応答変数(outcome variable)、従属変数(dependent variable)などと呼ばれる。"Independent/dependent" という用語が最も一般的らしいが、回帰モデルの中での "independent/dependent" と、因果関係の文脈での "Independent/dependent" が一致していないケースもある。

共変量を複数に増やしたモデルは "multiple regression" あるいは "multivariable regression" と呼ぶのに対し、複数のアウトカム変数を同時に扱うモデルは "multivariate regression" と呼ばれる。

このお話は前にまとめました。

necostat.hatenablog.jp

おわりに

  • 読んだ量の割に内容が薄くなってしまっています。ひとえにまとめる力が無いせいです。
  • クリスマスツリーを出しましたが、猫草と勘違いしてむしりまくってます。

参考資料

Rothman拾い読み:研究デザインの型

Rothman先生のModern Epidemiology(4th edition)をパラパラめくって拾い読みしたメモです。 今回は "Chapter 6:Epidemiologic Study Design With Validity and Efficiency Considerations" から、研究デザインの型について。

Chapter 6では研究デザインの型について基本的なことが書かれています。この記事ではそれぞれのデザインの定義を説明(ときに引用)するだけにして、もう少し突っ込んだ内容(Chapter 7-11)はまた別の機会に。

実験的デザイン

一般的には、実験とはコントロールされた環境において、ある種の操作・条件変更が被観察体においてどんな効果をもたらすかをみるもの。 疫学は人を対象としているので、「実験」と言っても細胞や動物を使った実験に比べて制約がたくさんあり、一般的な意味での「実験」は行えない。 MEでは疫学における実験を次のように定義している。

For epidemiologists, however, the word experiment usually implies that the investigator implements one or more specific interventions to two or more subsets of participants in the study.

つまり、疫学における実験(疫学実験*1, epidemiologic experiment)とは、複数のグループに別々の介入を割り当てること。比べる必要があるので2つ以上のグループが必要。 ランダム化されたものだけを実験と呼んで、ランダム化以外の方法で実験と同じ状況を再現しようとするものを擬似実験(quasi-experiment)と呼ぶことがある。 下は実験の代表である臨床試験のイラストです。

疫学実験には、次の3つのタイプがある。

臨床試験(clinical trial)

MEによると臨床試験とは、

A clinical trial is an experiment with patients as subjects. The goal of most clinical trials is either to evaluate a potential cure for a disease or to find a preventive of disease sequelae such as death, disability, or a decline in the quality of life.

つまり、患者を対象とした疫学実験のこと。病気の治療方法を評価したり、死亡・障害・QOL低下を予防する方法を探したりするために行われる。

MEではこれに続いて、割り付け(ランダム化)、インフォームドコンセント、盲検化とプラセボ、アドヒアランス不良とIntention-to-treat(ITT)解析、結果の一般化可能性などの説明がある。

野外試験(field trial), 実用試験(pragmatic trial)

MEでは次のように説明されている。

Field trials differ from clinical trials in that their subjects are not defined by the presence of disease or by presentation for clinical care; instead, the focus is on the initial occurrence of disease.

つまり、野外試験*2では、対象を患者や医療機関を受診した人に限らない。 臨床試験は効率の都合上、アウトカムを発生する可能性が高いハイリスクな人を選んで行われるが、一般化可能性を高めるためにもっと広い範囲の人を対象として行われるもの。

地域介入試験(community intervention trial)

MEの説明は次のとおり。

The community intervention trial is an extension of the field trial that involves intervention on a community-wide basis.

つまり、個人ではなく集団(コミュニティ)を対象として介入が行われるもの。集団の中の小さいグループに対してランダムに介入を割り付ける試験をクラスターランダム化試験(cluster-randomized trial)と呼ぶ。

非実験的デザイン

因果効果の推定のためには実験的デザインが理想的だが、倫理的な制約のため非実験的デザインを取らざるを得ない。

コホート研究(cohort study)

集団を要因の有無で群分けするが、研究者が割り当てるわけではない。 単にアウトカムの発生を観察し、要因別に評価するだけ。

ケースコントロール研究(case-control study)

集団をアウトカムの有無によって群分けする。まずは罹患者(=ケース)を集め、もともとはその人たちと同じ集団に属していたであろう非罹患者をサンプリングしてくる。罹患者・非罹患者のそれぞれにおいて、過去に遡って要因への曝露を測定する。

コホート研究と違って、サンプリングという過程が追加される。サンプリングによって集団全体を評価しなくてよくなるので効率的になるが、新たなバイアスを生む。

横断研究(cross-sectional study)

コホート研究、ケースコントロール研究では時間の流れがあったが、横断研究はある時点における要因・アウトカムの存在の関連をみる。

問題点としては、

  • 要因とアウトカムの時間的順序が分からない
  • 要因の有無によって疾病の発生は変わらなくても罹病期間が変わる場合、要因と疾病発生に関連が生じやすくなる(length-biased sampling)

生態学的研究(ecological study)

観察単位が個人ではなくグループのもの。 下のイラストにあるように、個人レベルでの関連と集団レベルでの関連は一致するとは限らない。

前向き(prospective), 後向き(retrospective)

色々な使われ方があるとのこと。

用法1:コホート研究・ケースコントロール研究

  • 前向き = コホート研究
  • 後向き = ケースコントロール

この使い方は今はほとんどないだろう。

用法2:研究実施期間を基準にした定義

  • 前向き = 患者の観察期間が研究開始よりも後
  • 後向き = 患者の観察期間が研究開始よりも前

同じ研究の中で前向き・後向きが混在することになる。

用法3:要因とアウトカムの測定タイミングに基づいた定義

  • 前向き = アウトカムが判明する前に要因の測定が行われる
  • 後向き = アウトカムが判明した後に要因の測定が行われる

用法3は、アウトカムが判明してから要因を測定することに起因するバイアスに注意を払うために有用だが、全ての要因が同じタイミングで測定される訳ではないので同じ対象者の中でも前向き・後向きが混在しうる。

MEでは、いっそのこと「前向き・後向き」を使うのをやめて、データ収集について詳細に書くだけにとどめる方がいいのではないかと言っている。

おわりに

  • 前向き・後向きはもう書くのやめようかと思います。
  • お風呂から上がると、猫がビショビショのバスマットの上でくつろぎながら待ってます。気持ち悪くないんでしょうか。

参考資料

*1:一般的にイメージされる実験と区別するために勝手に訳しました

*2:この訳でいいのか...

Rothman拾い読み:交互作用と効果修飾

Rothman先生のModern Epidemiology(4th edition)をパラパラめくって拾い読みしたメモです。 今回は "Chapter 5:Measures of Effect and Measures of Association" , "Chapter 12:Confounding and the Interpretation of Interaction", "Chapter 26:Analysis of Interaction" から、効果修飾(effect modification)と交互作用(interaction)について。

まずはイラストの説明から。
アウトカムに効果を与える要因A, Bがあるとして、それぞれの効果が2-3番目の棒の塗られた部分で表されています。。要因A, Bを同時に与えたときの効果は、それらを足し合わせたものよりも矢印分だけ大きくなっているので、それぞれの要因を単独で与えたときの効果の和と異なっているという状況を表しています。

この状態は、「2つの要因が相互に影響しあっている(交互作用がある)」と表現されたり、「一方の要因の効果は、他方の要因Bの状態によって修飾されて一定ではない(効果が修飾されている)」と表現されたりするので、両者の区別をしておこうという記事です。

交互作用(interaction)とは

ME, Chapter 26の冒頭では次のように書かれている。

It is common for the effect of one exposure on an outcome to depend in some way on the presence or absence of another exposure. When this is the case, we say that there is interaction between the two exposures.

つまり交互作用(interaction)とは、要因の効果が他の要因の有無に依存する状態のこと。「効果修飾と交互作用の違い」を理解できなくて悩んでましたが、ここではあくまで解析モデルの観点から「交互作用とは何か」を述べているだけだと理解することにしました。乱暴に言えば「回帰モデルに交互作用項を追加して、係数がどうなるか見る」という点においては効果修飾も同じだろうということ。

交互作用を検討する目的としては、

  • 治療効果が高いサブグループや、介入が有害となるサブグループを同定したい
  • 複数の要因の影響を考えることでメカニズムを解明したい
  • 単にモデルの当てはまりがよくなるから

などがあるとのこと。

交互作用があるかどうかは効果の指標に依存する

加法的交互作用(additive interaction):
差を使った効果指標(絶対効果指標)で見られる交互作用。プラスの作用ならsuper-additive, マイナスの作用ならsub-additiveと表現。

乗法的交互作用(multiplicative interaction):
比を使った効果指標(相対効果指標)で見られる交互作用。プラスの作用ならsuper-multiplicative, マイナスの作用ならsub-multiplicativeと表現。

効果指標修飾と因果交互作用

効果指標修飾(effect-measure modification)とは、要因の効果が層ごとのことなっていて、均一でない(heterogeneous)こと。冒頭のイラストで言えば、要因Bがあるときとないときで、要因Aの効果が変化していると捉えることができる。要因Bは要因Aの効果修飾因子(effect modifier)と呼ばれる。

前述のとおり、用いられる効果の指標によって修飾の有無・方向・程度が変わりうるので、効果修飾ではなく効果指標修飾(effect-measure modification)と呼ぶ方が正確。

交絡調整の観点から言うと、主たる要因Aの交絡が調整されてさえいれば、要因Bによって分けた各層の中では要因Aとアウトカムの関係を適切に捉えられている。

これに対し、2つの要因の効果の両方に興味がある場合は、要因Bについての交絡も調整されていないといけない。この場合は「効果指標修飾」から区別して、因果交互作用(causal interaction)と呼ぶことがある。

効果修飾と交互作用は解析モデルの点では同じだが、そのモデルに含める因子を考える段階では上記の違いがある。交互作用の前にわざわざ「因果の」とつけたのは、効果修飾と違うスタンスであることを明確にするため、と考えました。これについては、ME, Chapter 26の以下の記載にもとづいています。

When we control for confounding for both factors, we might refer to this as “causal interaction” in distinction from mere “effect heterogeneity” mentioned above.

おわりに

  • 2つの要因への興味が対等か、主従があるかという違いは、交絡として何を調整するかに関係してくる。

参考資料