感度と特異度

計算方法

Diease + Diease -
Test + A B
Test - C D
library(caret)
## Loading required package: lattice
## Loading required package: ggplot2

有病率と感度・特異度

PCR検査の感度は60%、特異度は99%程度と言われている。

1万人のうち0.1%にあたる10人が感染しているとする。

Diease + Diease -
Test + 6 100
Test - 4 9890

これを解釈すると以下のようになる。 1万人にPCR検査を行ったところ、106人の陽性者が出た。 このうち、真陽性者は6人、の陽性的中率は、わずかに5.7% となる。

つまり、感度と特異度の解釈は、有病率に大きく影響を受ける。

様々なカットオフ値の感度・特異度

感度・特異度とχ二乗検定

chisq.test(matrix(c(6, 100, 4, 9890), ncol=2, byrow=T))
## Warning in chisq.test(matrix(c(6, 100, 4, 9890), ncol = 2, byrow = T)): Chi-
## squared approximation may be incorrect
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  matrix(c(6, 100, 4, 9890), ncol = 2, byrow = T)
## X-squared = 277.7, df = 1, p-value < 2.2e-16

ROC曲線

  1. x軸を 偽陽性率 (1-特異度)、y軸を感度とする。
  2. 検査値ごとの感度、特異度をプロットする。
  3. 点をつなぐ(これを、Receiver Operator Curve, ROC という)
  4. 全体の面積を1としたときの ROC の下の面積 (Area Under the Curve, AUC) が、0.7以上であればスクリーニングとして適すると判断する。
  5. 以下の方式で、最適なカットオフ値を求める (カッコ内は pROC の print.thres.best.method, OptimalCutpoints での methods, cutpointr の metric)
  • 感度 + (1 - 特異度) が最大の点 (youden, Youden, youden)
  • 左上からの距離が最小の点 (closest.topleft, ROC01, roc01)
  • 感度 \(\times\) 特異度が最大の点 (MaxProdSpSe, prod_sens_spec)
  • その他多数(CRANパッケージ内の説明を参照)

CRAN パッケージ

  • pROC
  • OptimalCutpoints
  • cutpointr
library(OptimalCutpoints)
library(DT)

## data
data("elas")
datatable(elas)

cutpointr

library(cutpointr)
## 
## Attaching package: 'cutpointr'
## The following objects are masked from 'package:caret':
## 
##     precision, recall, sensitivity, specificity
cp <- cutpointr(elas, elas, status, 
                method = maximize_metric, metric = sum_sens_spec)
## Assuming the positive class is 1
## Assuming the positive class has higher x values
summary(cp)
## Method: maximize_metric 
## Predictor: elas 
## Outcome: status 
## Direction: >= 
## 
##     AUC   n n_pos n_neg
##  0.7436 141    96    45
## 
##  optimal_cutpoint sum_sens_spec    acc sensitivity specificity tp fn fp tn
##                37        1.3542 0.6809      0.6875      0.6667 66 30 15 30
## 
## Predictor summary: 
##     Data Min. 5% 1st Qu. Median     Mean 3rd Qu.  95% Max.       SD NAs
##  Overall    5 13      27     39 43.28014   51.00 86.0  163 25.83079   0
##        0    5 10      15     31 29.52222   41.00 52.6   56 14.61862   0
##        1   13 22      32     43 49.72917   60.25 96.5  163 27.43393   0
plot(cp)

OptimalCutpoint

cutpoint <- optimal.cutpoints(X = "elas", status = "status", tag.healthy = 0, methods = "MinValueSe", data = elas, 
  pop.prev = NULL, control = control.cutpoints(valueSe=0.95), ci.fit = TRUE)
## Warning: Sensitivity CI: "Exact" method may not be valid for some values (see Help Manual).
## Warning: Specificity CI: "Exact" method may not be valid for some values (see Help Manual).
## Warning: Positive Predictive Value CI: "Exact" method may not be valid for some values (see Help Manual).
## Warning: Negative Predictive Value CI: "Exact" method may not be valid for some values (see Help Manual).
summary(cutpoint)
## 
## Call:
## optimal.cutpoints.default(X = "elas", status = "status", tag.healthy = 0, 
##     methods = "MinValueSe", data = elas, pop.prev = NULL, control = control.cutpoints(valueSe = 0.95), 
##     ci.fit = TRUE)
## 
## Area under the ROC curve (AUC):  0.744 (0.659, 0.828) 
## 
## CRITERION: MinValueSe
## Number of optimal cutoffs: 1
## 
##                Estimate 95% CI lower limit 95% CI upper limit
## cutoff       22.0000000                  -                  -
## Se            0.9583333         0.89674256          0.9885323
## Sp            0.3777778         0.23767824          0.5345899
## PPV           0.7666667         0.62787806          0.9248939
## NPV           0.8095238         0.61608606          0.8893866
## DLR.Positive  1.5401786         1.22195079          1.9412811
## DLR.Negative  0.1102941         0.03937478          0.3089489
## FP           28.0000000                  -                  -
## FN            4.0000000                  -                  -
plot(cutpoint)

## Press return for next page....

ゴールドスタンダードとスクリーニング

ゴールドスタンダード:

criterion standard (also known as reference standard): test considered to be the diagnostic standard for a particular diseas or condition, used as a basis of conparison for other (usually noninvasive) tests. An outdated term is gold standard, which refers to a time when the monetary system was based on the value of gold. This is no longer the case and the term is obsolete.

現在では、標準基準 (criterion standard)や参照基準(reference standard)という。

AMA Manual of Style 11th ed p. 1031

スクリーニング:

スクリーニングの Wilson 基準(最新版)

  • 検査プログラムは、認識されている必要性に対応しなければならない
  • まず最初に、検査の目的が定められていること
  • 対象となる母集団の定義が定められていること
  • 検査プログラムの有効性に科学的な証拠があること
  • 計画は、周知活動、検査・医療補助・プログラム管理に統一性がなければならない
  • 検査のもつ潜在的なリスクを最小限にするメカニズムを有した高度な品質が保証されていること
  • 計画は、情報に関する権利と守秘性を確保し、自主性を尊重しなければならない
  • 計画は、対象集団の全員が公平にスクリーニングを受ける機会を得られるよう促進すべきである
  • プログラムに対する評価は、事前に計画されていなければならない
  • スクリーニングによって与えられる損失より、得られる利益のほうが勝っていなければならない

サンプルサイズ計算

Bujang, M. A., & Adnan, T. H. (2016). Requirements for minimum sample size for sensitivity and specificity analysis. Journal of clinical and diagnostic research: JCDR, 10(10), YE01.

機械学習

機械学習は、疾患の有無または予測に用いられることも多い。 この場合の判定方法は ROC AUC になる。

Data available

https://www.nature.com/articles/s41523-020-00203-7

OptimalCutpoints 論文。コード、データあり。

  • López RM, Rodríguez ÁMX, Cadarso SCM, & Gude SF (2014). OptimalCutpoints: an R package for selecting optimal cutpoints in diagnostic tests. American Statistical Association. https://doi.org/10.18637/jss.v061.i08