MENU

R で相関係数のメタアナリシスを行う方法

相関係数を統合したい場合はどうやるか?

R での方法。

>>もう統計で悩むのは終わりにしませんか? 

↑期間・数量限定で無料プレゼント中!

目次

個々の研究の相関係数と95%信頼区間の準備

使うデータは以下の通り。

r が相関係数。

n がサンプルサイズ。

r <- c(0.307,-0.01,0.300,0.119,0.194,0.248)
n <- c(107,1524,154,6165,4138,1559)

z がFisherの分散安定化変換後の相関係数。

Hyperbolic arc-tangent 関数 atanh() を使うと簡単に変換できる。

z に変換した後の標準誤差は $ \sqrt{\frac{1}{n – 3}} $ になる。

zl, zu は z の95%信頼区間下限と上限。

rl, ru は zl, zuを逆変換した(元の世界に戻した)値。

z <- atanh(r)
se <- sqrt(1/(n-3))
Za <- qnorm(1-0.05/2)
zl <- z-Za*se
zu <- z+Za*se
rl <- (exp(2*zl)-1)/(exp(2*zl)+1)
ru <- (exp(2*zu)-1)/(exp(2*zu)+1)

Fisherの分散安定化変換の逆変換はtanh()

Hyperbolic arc-tangentの逆は、hyperbolic tangent。

なので、rl, ru の計算式はtanh()で置き換えられる。

以降はtanh()を使う。

以下のように、シンプルなスクリプトで書ける。

> (exp(2*zl)-1)/(exp(2*zl)+1)
[1]  0.12439197 -0.06018300  0.14890459  0.09431717  0.16450217  0.20082642
>  tanh(zl)
[1]  0.12439197 -0.06018300  0.14890459  0.09431717  0.16450217  0.20082642

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

個々の研究の相関係数と95%信頼区間をグラフにする

個々の研究をグラフにするには以下の通り。

# ----- individual graph -----
k <- length(n)
id <- k:1
plot(r, id, ylim=c(-4, k+1), pch=" ", xlim=c(-1,1), yaxt="n",
ylab="Citation", xlab="Correlation coefficients")
title(" Correlation coefficient model ")
symbols(r, id, squares=sqrt(n-3), add=T, inches=0.25)
abline(v=0)
for (i in 1:k){
j <- k-i+1
x <- c(rl[i], ru[i])
y <- c(j, j)
lines(x, y, type="l")
text(-0.5, i, j)
}

グラフはこんな風に出力される。

固定効果で相関係数を統合する

$ w_i = n_i – 3 $ で重みづけ平均を取ると統合相関係数の推定値(Fisherの分散安定化変換後)。

tanh()で戻すと求める点推定値になる。

# ----- fixed effects -----
w <- n-3
sw <- sum(w)
varz <- sum(w*z)/sw
varr <- tanh(varz)
varrl <- tanh(varz-Za*sqrt(1/sw))
varru <- tanh(varz+Za*sqrt(1/sw))
q1 <- sum(w*(z-varz)^2)
df1 <- k-1
pval1 <- 1-pchisq(q1, df1)
q2 <- varz^2*sw
df2 <- 1
pval2 <- 1-pchisq(q2, df2)

変量効果で相関係数を統合する

Dersimonian-Lairdの方法の方法で統合する。

# ----- random effects -----
tau2 <- (q1-(k-1))/(sw-sum(w*w)/sw)
tau2 <- max(0, tau2)
wx <- 1/(tau2+se*se)
swx <- sum(wx)
varzd <- sum(wx*z)/swx
varrd <- tanh(varzd)
varrdl <- tanh(varzd-Za*sqrt(1/swx))
varrdu <- tanh(varzd+Za*sqrt(1/swx))
qx2 <- varzd^2*swx
pvalx2 <- 1-pchisq(qx2, df2)

固定効果と変量効果の統合値をグラフに書き入れる

固定効果(グラフ中はCombined: fixed)と変量効果(グラフ中はCombined: random)をグラフに書き入れる。

# ----- graph -----
x <- c(varrl, varru)
y <- c(-1, -1)
lines(x, y, type="b")
x <- c(varrdl, varrdu)
y <- c(-2, -2)
lines(x, y, type="b")
abline(v=c(varr, varrd), lty=2)
text(-0.5, -1, "Combined: fixed")
text(-0.5, -2, "Combined: random")

グラフはこんな感じになる。

制限付き最尤推定量を用いた方法(REML)で相関係数を統合する

Restricted Maximum Likelihood estimator(REML)を適用した方法。

以下のスクリプトで繰り返し収束計算を行い解を求める。

$ \hat{\tau}^2 $ の初期値にはDerSimonian-Lairdの方法で求めた値を用いる。

# ----- REML method -----
intau <- tau2
tau <- intau
#
nrep <- 10
newt <- 1:nrep
for (i in 1:nrep){
wb <- 1/(tau+se*se)
zmb <- sum(wb*z)/sum(wb)
qf <- k/(k-1)*(z-zmb)^2-se*se
dkx <- (-1*sum(z*wb*wb)+zmb*sum(wb*wb))/sum(wb)
qf2 <- -2*k/(k-1)*(z-zmb)*dkx
h <- sum(wb*wb*(qf-tau))
dh <- sum(-2*wb*wb*wb*(qf-tau)+wb*wb*(qf2-1))
newt[i] <- tau - h/dh
rel <- abs((newt[i]-tau)/tau)
tau <- newt[i]
}
wg <- 1/(tau+se*se)
swg <- sum(wg)
zRM <- sum(z*wg)/swg
rRM <- tanh(zRM)
rRMl <- tanh(zRM-Za*sqrt(1/swg))
rRMu <- tanh(zRM+Za*sqrt(1/swg))
qx2RM <- zRM^2*swg
pvalx2RM <- 1-pchisq(qx2RM, df2)
tau2 <- tau

REMLの結果をグラフに書き入れる

# ----- REML graph -----
x <- c(rRMl, rRMu)
y <- c(-3, -3)
lines(x, y, type="b")
abline(v=rRM, lty=2)
text(-0.5, -3, "Combined: REML")

グラフはこちら。95%信頼区間は若干広くなるが、統計学的有意ではあった。

結果の数値を並べて比べてみる。

点推定値は固定効果→DerSimonian-Lairdの方法→REMLとだんだんに大きくなり、95%信頼区間もだんだん広くなっていった。

最終的に、統計学的有意($ P_{REML} = 0.0003 $)

> ## Fixed effects
> list(round(c(rFE=varr, LL=varrl, UL=varru, Q1=q1, df1=df1, p1=pval1, Q2=q2, df2=df2, p2=pval2),4))
[[1]]
rFE       LL       UL       Q1      df1       p1       Q2      df2       p2
0.1463   0.1298   0.1627  76.8331   5.0000   0.0000 295.8090   1.0000   0.0000
>
> ## Random effects
> list(round(c(rDL=varrd, LL=varrdl, UL=varrdu, Q2DL=qx2, df2=df2, p2DL=pvalx2, "tau^2"=intau),4))
[[1]]
rDL      LL      UL    Q2DL     df2    p2DL   tau^2
0.1741  0.0966  0.2496 19.0392  1.0000  0.0000  0.0078
>
> ## REML
> list(round(c(rRM=rRM, LL=rRMl, UL=rRMu, Q2RM=qx2RM, df2=df2, p2RM=pvalx2RM, "tau^2"=tau2),4))
[[1]]
rRM      LL      UL    Q2RM     df2    p2RM   tau^2
0.1800  0.0831  0.2735 13.0604  1.0000  0.0003  0.0130

まとめ

相関係数の統合を R でやってみた。

相関係数にFisherの分散安定化変換をほどこして、n – 3 を重みにして重みづけ平均を取るのが中核だ。

相関係数が関心事の研究を統合するときにはこの方法が使える。

関連記事

漸近分散法によるオッズ比の統合

引用書籍

ネタ本はこちら

4.2 相関係数

メタ・アナリシス入門―エビデンスの統合をめざす統計手法 (医学統計学シリーズ)

新版はこちら

新版 メタ・アナリシス入門 ─エビデンスの統合をめざす統計手法─ (医学統計学シリーズ)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメントする

目次