オッズ比 Last modified: Jan 07, 2007
目的
オッズ比とその信頼限界を求める。
R では,fisher.test 関数で,オッズ比(超幾何分布による最尤推定値)と 95% 信頼限界を求めることができる。
また,vcd ライブラリーにも oddsratio 関数が用意されている(各セルの数値に必ず 0.5 が加えられる。log=FALSE 引数をつけ,summary 関数を適用すること)。
使用法
odds.ratio(a, b, c, d, correct=FALSE)
引数
| 所見(結果)あり | 所見(結果)なし |
対象群(要因あり) | a | b |
対照群(要因なし) | c | d |
correct 各セルに 0.5 を加える(a, b, c, d のどれかが 0 のときには自動的に 0.5 を加える)
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/odds_ratio.R", encoding="euc-jp")
# オッズ比を計算する
odds.ratio <- function( a, b, c, d, # 4 つのセルの観察値
correct=FALSE) # 補正をするとき TRUE にする
{
cl <- function(x)
{
or*exp(c(1, -1)*qnorm(x)*sqrt(1/a+1/b+1/c+1/d))
}
if (correct || a*b*c*d == 0) { # a,b,c,d のいずれかが 0 のときには必ず補正する
a <- a+0.5
b <- b+0.5
c <- c+0.5
d <- d+0.5
}
or <- a*d/(b*c)
conf <- rbind(cl90=cl(0.05), cl95=cl(0.025), cl99=cl(0.005), cl999=cl(0.0005))
conf <- data.frame(conf)
colnames(conf) <- paste(c("下側","上側"), "信頼限界値", sep="")
rownames(conf) <- paste(c(90, 95, 99, 99.9), "%信頼区間", sep="")
list(or=or, conf=conf)
}
使用例
> odds.ratio(3, 5, 6, 8)
$or # オッズ比
[1] 0.8
$conf
下側信頼限界値 上側信頼限界値
90%信頼区間 0.17957613 3.563948
95%信頼区間 0.13488007 4.744956
99%信頼区間 0.07709193 8.301777
99.9%信頼区間 0.04027949 15.888980
> odds.ratio(3, 5, 6, 8, correct=TRUE) # 0.5 を加える
$or
[1] 0.8321678
$conf
下側信頼限界値 上側信頼限界値
90%信頼区間 0.20235212 3.422269
95%信頼区間 0.15433409 4.487040
99%信頼区間 0.09089284 7.618899
99.9%信頼区間 0.04916982 14.083909
# 2×2 分割表を以下のように定義する
> x <- matrix(c(3, 5, 6, 8), byrow=TRUE, nc=2)
> x
[,1] [,2]
[1,] 3 5
[2,] 6 8
# 作りつけの関数 fisher.test による推定
> fisher.test(x)
Fisher's Exact Test for Count Data
data: x
p-value = 1
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.08839317 6.37801297 # かなり広い信頼区間になる
sample estimates:
odds ratio
0.8081216
# 作りつけの関数 oddsratio による推定
> library(vcd) # vcd ライブラリーを使うために必須
> oddsratio(x, log=FALSE)
[1] 0.8
直前のページへ戻る E-mail to Shigenobu AOKI