医用統計学入門

統計学の概念とよく使われる手法の解説


 

検定の考え方

 

実例

  1. 10 円玉を 10 回投げたら,表が 1 回しか出なかった
  2. 表が出過ぎる,裏が出過ぎるという確率を計算してみる fig
  3. 両方合わせて,0.022
  4. こういうことは「起こりにくいこと」であろう
  5. しかし「実際に起こった」
  6. どのように考えたらよいだろうか
  7. もし,表が 10 回に 1 回くらいしか出ない 10 円玉だったら,
        ↓
    こんなことは「よく起きること」なのだ
    fig
 

検定の流れ

  1. 仮説をたてる
  2. 仮説のもとで,ある指標が得られる確率を求める
  3. その確率がある基準より小さい場合には,
        ↓
    仮説が間違えていると結論する
  4. そうでない場合には,仮説を受け入れる
 

帰無仮説・対立仮説

 

数学の「証明」との違い

 

片側検定と両側検定

  片側検定は,有意になりやすい
    ↓
  片側検定にする?
    ↓
  通常は,両側検定を行う
 

検定法の選択

 

検定統計量

 

P値(有意確率)

 

第一種の過誤(αエラー)

帰無仮説が正しいときに,帰無仮説が誤りであるとして棄却するという誤り

fig
 

有意水準の設定

     ↓
  両者の要求を満たすには,研究者側で有意水準を固定してしまうのは問題
     ↓
 

検定による意思決定

この決定は,確率的なものであるから,間違うこともある
 

第二種の過誤(βエラー)

帰無仮説が誤っているにもかかわらず,帰無仮説を棄却できないという誤り

 

検出力(1−β)

対立仮説が正しいときに,帰無仮説を棄却して対立仮説を採択できる確率(β=4α 程度が望ましい?)

 

まとめると
 検定の結果
帰無仮説を棄却できない 帰無仮説を棄却する
真実 帰無仮説が正しい 正しい決定 あわてん坊のエラー
α
帰無仮説は誤り ボンヤリ者のエラー
β
正しい決定
1−β

 

注意すべきこと

  なぜこんなことが起きるのか?
 

検定結果の取り扱い
 検定の結果
統計学的に有意だった 統計学的に有意でなかった
実質的な意味がある 得られた知見を堂々と発表する もう少しデータを蓄積する
データの精度を上げる
実質的な意味がない 検定は不要だった 検定は不要だった

 

代表的な検定

 

検定のマニュアル

 

独立性の検定

 

カイ二乗検定

> chisq.test(matrix(c(16,12,15,9,12,5,11,2,36,20,24,1),nrow=4)) Pearson's Chi-squared test data: matrix(c(16, 12, 15, 9, 12, 5, 11, 2, 36, 20, 24, 1), nrow = 4) X-squared = 13.7134, df = 6, p-value = 0.03301 Warning message: Chi-squared approximation may be incorrect in: chisq.test(matrix(c(16, 12, 15, 9, 12, 5, 11, 2, 36, 20, 24, > chisq.test(matrix(c(40,10,20,60),nrow=2),correct=FALSE) Pearson's Chi-squared test data: matrix(c(40, 10, 20, 60), nrow = 2) X-squared = 37.4524, df = 1, p-value = 9.367e-10
 

フィッシャーの正確検定

> fisher.test(matrix(c(4,1,2,6),nrow=2)) Fisher's Exact Test for Count Data data: matrix(c(4, 1, 2, 6), nrow = 2) p-value = 0.1026 alternative hypothesis: true odds ratio is not equal to 1 95 percent confidence interval: 0.5364938 682.2665965 sample estimates: odds ratio 9.47099 > fisher.test(matrix(c(16,12,15,9,12,5,11,2,36,20,24,1),nrow=4)) Fisher's Exact Test for Count Data data: matrix(c(16, 12, 15, 9, 12, 5, 11, 2, 36, 20, 24, 1), nrow = 4) p-value = 0.03447 alternative hypothesis: two.sided
 

2 個の代表値の差の検定

 

代表値とは

など,位置の母数
 

対応のあるデータとは

 

平均値の差の検定

いわゆる t 検定

 

代表値の差の検定


 

生存率解析

 

方法

> group <- c(1, 1, 2, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1) > event <- c(1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0) > time <- c(2, 20, 5, 1, 3, 17, 2, 3, 15, 14, 12, 13, 11, 11, 10, 8, 8, 3, 7, 3, 6, 2, 5, 4, 2, 3, 1, 3, 2, 1) > a.group <- group == 1 > km.surv(time[a.group], event[a.group]) i time truncate p P SE [1,] 1 1 1 1.0000000 1.0000000 NA [2,] 2 2 0 0.9333333 0.9333333 0.06440612 [3,] 3 2 0 0.9285714 0.8666667 0.08777075 [4,] 4 2 1 1.0000000 0.8666667 NA [5,] 5 3 1 1.0000000 0.8666667 NA [6,] 6 3 1 1.0000000 0.8666667 NA [7,] 7 3 1 1.0000000 0.8666667 NA [8,] 8 5 1 1.0000000 0.8666667 NA [9,] 9 6 1 1.0000000 0.8666667 NA [10,] 10 7 0 0.8571429 0.7428571 0.13710884 [11,] 11 11 1 1.0000000 0.7428571 NA [12,] 12 11 1 1.0000000 0.7428571 NA [13,] 13 13 0 0.7500000 0.5571429 0.19089707 [14,] 14 15 1 1.0000000 0.5571429 NA [15,] 15 17 1 1.0000000 0.5571429 NA [16,] 16 20 1 1.0000000 0.5571429 NA > library(survival) > dat <- Surv(time[a.group], event[a.group]) > res <- survfit(dat) > res Call: survfit(formula = dat) n events rmean se(rmean) median 0.95LCL 0.95UCL 16.00 4.00 14.69 2.14 Inf 13.00 Inf > summary(res) Call: survfit(formula = dat) time n.risk n.event survival std.err lower 95% CI upper 95% CI 2 15 2 0.867 0.0878 0.711 1 7 7 1 0.743 0.1371 0.517 1 13 4 1 0.557 0.1909 0.285 1 > plot(res) fig
 

生存率の検定

 

Cox の比例ハザードモデル

時間に関係なく,二群のハザード比(瞬間死亡率の比)が一定であると仮定したモデル

> library(eha) > dat <- data.frame(time = c(4, 3, 1, 1, 2, 2, 3), status = c(1, 1, 1, 0, 1, 1, 0), x = c(0, 2, 1, 1, 1, 0, 0), sex = c(0, 0, 0, 0, 1, 1, 1)) > coxreg(Surv(time, status) ~ x + strata(sex), data = dat) Call: coxreg(formula = Surv(time, status) ~ x + strata(sex), data = dat) Covariate Mean Coef Rel.Risk L-R p Wald p x 0.625 0.802 2.231 0.329 Events 5 Total time at risk 16 Max. log. likelihood -3.3277 LR test statistic 1.09 Degrees of freedom 1 Overall p-value 0.297117
上の結果の解釈
 

クラスター分析

 

クラスター分析の手順

  1. 第一段階
     データの一つ一つが要素1個を持つクラスターと仮定し,クラスター間の距離を計算
  2. 第二段階
     距離の最も近いクラスターを併合し,併合後の距離を再計算
  3. 第三段階
     最終的にクラスターが一個になるまで繰り返す
 

クラスター分析の手法
ウォード法 最も明確なクラスターを作る
最近隣法 分類感度は低い
最遠隣法 分類感度は高い
メディアン法 最近隣法と最遠隣法の折衷
メディアン法
重心法
距離の逆転が生じることがある
可変法 パラメータの設定による

> data <- matrix(c( + 10.2, 6.3, + 1.7, 7.8, + 0.6, 0.1, + 3.0, 2.5, + 2.1, 0.0, + 7.7, 2.2, + 3.2, 8.6, + 4.9, 7.2, + 9.1, 0.6, + 6.7, 0.8, + 9.9, 5.9, + 3.8, 0.9, + 5.5, 6.0, + 2.6, 1.0, + 2.0, 4.0 + ), byrow=TRUE, nc=2) > plot(data) > text(data, offset=0.2,pos=4) > plot(hclust(dist(data), "average"), hang=-1) fig fig
 

k-means 法

  1. K 個の初期クラスタの中心を決める
  2. すべてのデータを最も近いクラスター(の中心)に分類
  3. 新たにできたクラスタの重心を,クラスの中心にする
  4. クラスタの中心が同じでなければ,2 番目の手順に戻る
> library(mva) Warning message: package 'mva' has been merged into 'stats' (R.1.9.0 から) > x <- matrix(c( + -0.639, -0.242, + 1.320, 0.519, + 0.775, -1.996, + 0.126, 0.728, + 1.117, 1.576, + -1.809, 0.595, + -0.016, -0.871, + -0.319, -0.280, + -1.438, 0.583, + -0.233, 0.905 + ), byrow=TRUE, ncol=2) > result <- kmeans(x, 3) > result $cluster [1] 3 1 3 1 1 2 3 3 2 1 $centers [,1] [,2] 1 0.58250 0.93200 2 -1.62350 0.58900 3 -0.04975 -0.84725 $withinss [1] 2.3306790 0.0688925 3.1093535 $size [1] 4 2 4 > plot(x, xlim=c(-2,2), ylim=c(-2,2)) > text(x[,1], x[,2], result$cluster, pos=4, offset=0.5)
 

URL など