草薙の研究ログ

英語の先生をやってます。

オッズ比からテトラコリック相関係数への近似変換

テトラコリック相関係数でメタ分析したいときに,先行研究がオッズ比で報告してたりするからどうするんだって話があるそうな。もちろんクロス集計があればいいのだけど,それがないときはどうするか。オッズ比からテトラコリック相関係数の近似値を求める方法があるそうだ(Bornett, 2007)。

Pearson(父)方式ってやつは,

  approx.tetrar1<-function(OR){
  r<-cos(pi/(1+OR^(1/2)))
  r
  }

こんな感じで,

Digby(1983)ってのは

  approx.tetrar2<-function(OR){
  r<-(OR^(3/4)-1)/(OR^(3/4)+1)
  r
  }


だそうだ。大体一緒の値とるね。

seq(-1000,1000,.1)->x
plot(approx.tetrar1(x),approx.tetrar2(x),pch=20,col=4)
abline(0,1)


f:id:kusanagik:20160427144401p:plain


じゃあ,ええとこんなことをしてチェックしてみよう。

#パッケージの準備
library(MASS)
library(psych)

#r = .50になるようなデータの発生
dat<-mvrnorm(100,mu=c(0.5,0.5),Sigma=matrix(c(.025,.0125,.0125,.025),2,2),empirical=T)
cor(dat)

#丸めて2値につぶしてしまう
dat2<-round(dat)

#それをクロス集計表に変える
dt<-table(dat2[,1],dat2[,2])

#テトラコリックをもとめる
tetrachoric(table(dat2[,1],dat2[,2]))

#オッズ比の関数を作る
OR<-function(x){
(x[1,1]/x[1,2]) / (x[2,1]/x[2,2])
}

#オッズ比を求める
ordt<-OR(dt)

#そのオッズ比を入れてやる
approx.tetrar1(ordt)
approx.tetrar2(ordt)


まあ,テトラコリック相関係数が正しいとは言わないけど,近似できているといえそうな。

信号検出理論のd'はオッズ比にも(あくまでも近似的にだけど)変換できるし,そこからテトラコリック相関係数にも変換できるし,頑張ればまあYuleとかφ係数とかにもできるのよのね。2 by 2,恐るべし。