R logo

COVID19による在宅勤務継続中……

自宅の顕微鏡でコツコツ見てきたデータを元に、ある病理分布のステージングを作ったのですが、

オンラインミーティングで、

「そのステージングの信頼性を示す統計が必要。」

と言われました(そりゃそうだ)。

 

文献を漁ると、マクネマー検定(McNemar's test)とロジスティック回帰(Logistic regression)の組み合わせで示せるっぽい……

つまり、領域Aでは+だけれども領域Bでは-という違いが有意差を持ってでているかどうか。

有意差がなければ同じステージにいれ、有意差があれば次のステージ、というイメージ。

 

というわけでR備忘録。

McNemar検定

トライ内容

ある領域A2病変+/-で、次の領域Bで病変+/-...と段階的にMcNemar's testをしてみる。

領域A 病変+ 病変-
領域B, 病変+ a b a + b
領域B, 病変- c d c + d
a + c b + d N

Rで計算

計算は、Rの標準パッケージで。

> x <- matrix(c(a, b, c, d), ncol=2, byrow=T)
> mcnemar.test(x, correct=F)

※各記述の意味

  • a,b,c,dは上の表の各項目の数値を入れる。
  • matrix: 行列を作りますよ。
  • nrow: 行の指定。
  • ncol: 列の指定。
  • byrow=T: 要素を上の行から順に左から右へ埋める場合。

 

もしくは、

>mcnemar.test(matrix(c(a, b, c, d), 2, 2), correct=FALSE) #連続性の補正をしない場合

>mcnemar.test(matrix(c(a, b, c, d), 2, 2) #連続性の補正をする場合

>binom.test(c(c, b)) #二項検定による正確な有意確率

 

※correct=Fを引数に与える事で、連続性の補正を抑制できる。

Yatesの連続補正を行うかどうかは、判断がややこしいようですが、わかりやすい指標として

  • b+c/2 <= 5の場合:補正あり
  • b+c/2 > 5の場合:補正なし

というのがありました1

実際に補正あり/なしで検討してみる、てゆーのもありみたいです。

 

※生データのテーブルで作業

データ例(ファイル名:staging)

No. regionA regionB
1 Yes No
2 Yes Yes
3 No Yes
4 No No
5 Yes No
6 No Yes

入力例:

上記テーブルをコピーして、

> staging<-read.table("clipboard", header=TRUE)

> .Table<-xtabs(~regionA+regionB,data=staging,subset=)

> .Table

出力例:

regionB
resionA No Yes
No 1 2
Yes 2 1

ここで標準パッケージのMcNemar.testを使う。

入力例:

mcnemar.test(.Table,correct=FALSE)

出力例:

McNemar's Chi-squared test

data: .Table
McNemar's chi-squared = 0, df = 1, p-value = 1

オッズ比と95%信頼区間も

オッズ比と95%信頼区間も求めたい場合。

まず、eact2x2パッケージをインストールし、ライブラリとして読み込む。

> install.packages("exact2x2")
> library(exact2x2)

その後で、

> mcnemar.exact(matrix(a,b,c,d), nrow=2))

例えば、下記のようなデータだった場合、

regionB
resionA Yes No
Yes 51 0
No 10 0

> mcnemar.exact(matrix(51,10,0,0), nrow=2))

出力例:

Exact McNemar test (with central confidence intervals)

data: matrix(c(51, 10, 0, 0), nrow = 2)
b = 0, c = 10, p-value = 0.001953
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.0000000 0.4461255
sample estimates:
odds ratio
0

 

コマンドを一気に作る方法(我流)

まだ R に慣れていないので、今はこの方法で。

もう少し勉強したら、for 構文などで作れるようになりたい……

1.Excelデータで解析したいデータの行を一気にコピー

2.WordにTextのみペースト

3.Ctrl+H(置換)→ オプション(M)

  • 検索する文字列(N):あいまい検索のチェックを外した状態で、下の”特殊文字(E)を開き、タブ記号(T)を選択
  • 置換後の文字列(I):,

で、タブをカンマに置換。

4."mcnemar.exact(matrix(" と "), nrow=2))" を前後にコピペしていく。

(置換できる場合は置換機能を使う。今回は無理。)

References

  1. 兵庫大学健康科学部健康システム学科「健康統計の基礎・健康統計学」HP <http://hs-www.hyogo-dai.ac.jp/~kawano/HStat/?plugin=cssj&page=2009%2F13th%2FMcNemar_Test>
  2. 統計解析 R-Tips 66.カテゴリデータの検定 <http://cse.naro.affrc.go.jp/takezawa/r-tips/r/66.html>
  3. 奥村晴彦HP/統計・データ解析/McNemar検定 <https://oku.edu.mie-u.ac.jp/~okumura/stat/mcnemar.html>
  4. 臨床医のためのRコマンダーによる医学統計解析マニュアル<http://rcommanderdeigakutoukeikaiseki.com/McNemer.html>
  5. R基本統計関数マニュアル<https://cran.r-project.org/doc/contrib/manuals-jp/Mase-Rstatman.pdf>
  6. Rによる統計処理<http://aoki2.si.gunma-u.ac.jp/R/index.html>
にほんブログ村 科学ブログ 脳科学へ
にほんブログ村 子育てブログ ワーキングマザー育児へ