%%{init: {"theme":"base","themeVariables":{"primaryColor":"#EAF2FB","primaryBorderColor":"#2780E3","primaryTextColor":"#212529","lineColor":"#6C757D","secondaryColor":"#EAF7E6","tertiaryColor":"#FFF4E8","fontSize":"13px"},"flowchart":{"nodeSpacing":18,"rankSpacing":24,"padding":6}}}%%
flowchart LR
A["二分类参考状态<br/>定量标记物"] --> B["roc()<br/>完整病例与方向"]
B --> C["describe()<br/>数据核查"]
B --> D["auc()<br/>AUC 与区间"]
D --> E["cutoff()<br/>候选阈值与指标"]
E --> F["plot() / summary()<br/>解释与报告"]
classDef input fill:#EAF2FB,stroke:#2780E3,color:#212529
classDef process fill:#EAF7E6,stroke:#3FB618,color:#212529
classDef output fill:#F4EEFB,stroke:#9954BB,color:#212529
class A input
class B,C,D,E process
class F output
11 ROC 曲线与 cutoff
本文演示如何使用 ivdtools 评价一个定量标记物区分目标状态的能力,并在明确判定方向后查看候选 cutoff。ROC 曲线描述一组阈值下灵敏度与特异度的权衡,AUC 概括整个经验 ROC,cutoff 则对应一个具体决策点,三者回答的问题不同。
ROC 结论以参考状态正确、研究对象具有代表性以及阳性定义正确为前提。ivdtools 当前提供经验 ROC、梯形 AUC、Hanley–McNeil 单曲线标准误和两种样本内 cutoff 准则;不提供部分 AUC、固定灵敏度或特异度下的区间、配对 ROC 检验、cutoff 的重抽样不确定度、样本量设计或外部验证。
函数会根据阳性组和阴性组的标记物均值自动选择 geq 或 leq 方向,没有单独的方向参数。正式分析必须核对自动方向是否符合预设临床含义。样本内“最优” cutoff 具有选择偏倚,不能直接解释为独立人群的验证结果或标准推荐阈值。
单标记物 ROC 工作流为:
代码
library(ivdtools)
library(readr)11.1 主要函数
| 函数 | 主要用途 | 主要结果 |
|---|---|---|
continuous_to_binary() |
按给定阈值把连续参考变量转换为 0/1 | 原数据及新增 <变量>_binary 列 |
roc() |
建立 ROC 对象并确定共同完整病例和方向 | 样本信息、参考编码、标记物值和方向 |
describe() |
描述对象中的原始变量 | 数值摘要和分类频数 |
auc() |
计算经验 ROC、AUC、标准误和 95% CI | auc_list 和 auc_table |
cutoff() |
计算各候选阈值的诊断指标和两个最优准则 | cutoff_table |
plot() |
绘制 ROC 或 cutoff—指标图 | ggplot 图形 |
summary() |
汇总已经执行的分析槽 | ROC 对象摘要 |
11.1.1 连续参考变量转换 continuous_to_binary()
代码
continuous_to_binary(data, cols, cutoff)| 参数 | 说明 |
|---|---|
data |
数据框。 |
cols |
一个或多个需要转换的数值列名。 |
cutoff |
有限数值;长度为 1 时循环用于全部列,否则必须与 cols 等长。 |
对第 \(j\) 个变量使用
\[ B_{ij}=I(X_{ij}\ge c_j). \]
函数保留原列并新增 <变量>_binary。它固定把“等于 cutoff”划入 1,不支持 <= 方向;因此只有当该二分定义已经由方案或外部参考确定时才应使用。不要为了提高 ROC 表现而在同一数据中反复寻找参考变量的二分阈值。
返回保留原列并新增 <变量>_binary 列的数据框。
11.1.2 建立分析对象 roc()
代码
roc(data, cols, reference, id = NULL, positive = NULL)| 参数 | 说明 |
|---|---|
data |
数据框。 |
cols |
一个或多个数值型标记物列名。 |
reference |
单个参考状态列名;可为数值 0/1、二水平因子或二取值字符。 |
id |
可选受试者标识列;仅用于报告重复 ID,不会自动去重。 |
positive |
因子或字符参考列的阳性水平;省略时取排序后的最后一个水平。数值 0/1 省略时以 1 为阳性。 |
roc() 同时要求 reference 和全部 cols 为有限完整值。设完整性指示为
\[ R_i=I(Y_i\text{ 完整})\prod_{j=1}^{p}I(X_{ij}\text{ 有限且完整}), \]
只有 \(R_i=1\) 的受试者进入对象。即使以后只对一个 cols 子集调用 auc(),分析样本仍是建对象时由全部标记物确定的共同完整病例。若希望每个标记物使用各自完整病例,应分别建立对象。
对标记物 \(X_j\),源码比较两组均值:
\[ \bar X_{j,+}\ge\bar X_{j,-}\Rightarrow \widehat Y=I(X_j\ge c)\quad(\texttt{geq}), \]
\[ \bar X_{j,+}<\bar X_{j,-}\Rightarrow \widehat Y=I(X_j\le c)\quad(\texttt{leq}). \]
这是计算方向,不是临床方向验证。一个受极端值影响的组均值可能选择错误方向;必须查看 col_direction 并与方案核对。
主要字段包括 n、n_pos、n_neg、n_total、cols_values、reference_binary、col_direction、print,以及后续逐步写入的 describe、auc_list、auc_table、cutoff_table 和 mlr_results。
返回 roc 类对象,保存共同完整病例、参考状态、标记物值和自动方向,并逐步写入后续分析槽。
11.1.3 描述统计 describe()
返回描述统计数据框;数值列包含样本量、均值、SD、分位数和范围,分类列包含频数和百分比。
代码
describe(x, cols = NULL, digits = 4L)cols=NULL 时描述原数据中除显式 ID 外的所有列,而不只是 ROC 标记物。数值列给出 \(n\)、均值、SD、最小值、四分位数和最大值;因子、字符以及参考列给出频数和百分比。当前实现不会按阳性/阴性分别汇总标记物,因此两组分布差异需另行制表或绘图。
11.1.4 AUC auc()
代码
auc(x, cols = NULL)经验 ROC 在所有不同观测值和两端的 \(\pm\infty\) 阈值上计算,再按假阳性率 \(\mathrm{FPR}=1-\mathrm{Sp}\) 对灵敏度作梯形积分。等价的秩解释为
\[ \widehat A= \frac{1}{n_+n_-} \sum_{i:Y_i=1}\sum_{j:Y_j=0} \left[I(X_i>X_j)+\frac12I(X_i=X_j)\right], \]
其中低值代表阳性时按反向次序理解。AUC 是随机抽取一个阳性和一个阴性时,标记物按所选方向正确排序二者的概率估计;它不等于某 cutoff 下的准确率。
当前标准误采用 Hanley–McNeil 近似。令
\[ Q_1=\frac{\widehat A}{2-\widehat A},\qquad Q_2=\frac{2\widehat A^2}{1+\widehat A}, \]
则
\[ \operatorname{SE}(\widehat A)= \sqrt{\frac{ \widehat A(1-\widehat A) (n_+-1)(Q_1-\widehat A^2) (n_--1)(Q_2-\widehat A^2)} {n_+n_-}}. \]
95% CI 为 \(\widehat A\pm1.96\,\operatorname{SE}(\widehat A)\),并截断到 \([0,1]\)。当 AUC 恰为 0 或 1 时当前实现返回 NA 标准误和区间,而不是精确区间或重抽样区间。
返回更新后的 roc 对象;auc_list 保存各标记物 ROC 点、AUC、标准误和区间,auc_table 为汇总表。
11.1.5 cutoff 分析 cutoff()
代码
cutoff(x, cols = NULL)必须先执行 auc()。对 geq 方向,预测阳性定义为 \(X_i\ge c\);对 leq 方向定义为 \(X_i\le c\)。每个候选阈值计算
\[ \mathrm{Se}=\frac{TP}{TP+FN},\qquad \mathrm{Sp}=\frac{TN}{TN+FP}, \]
\[ \mathrm{PPV}=\frac{TP}{TP+FP},\qquad \mathrm{NPV}=\frac{TN}{TN+FN},\qquad \mathrm{Accuracy}=\frac{TP+TN}{N}. \]
表中的 precision 指 PPV。两种自动选择准则为
\[ J(c)=\mathrm{Se}(c)+\mathrm{Sp}(c)-1 \]
的最大值(Youden),以及
\[ d(c)=\sqrt{[1-\mathrm{Se}(c)]^2+[1-\mathrm{Sp}(c)]^2} \]
的最小值(Corner)。候选集合是实际观测值和两个无穷端点;无穷端点用于补全 ROC,但不会作为报告的最优 cutoff。若多个有限阈值并列,源码按内部阈值顺序选第一个:geq 为从高到低,leq 为从低到高。因此自动结果还包含一个确定性的并列处理规则。
EP24 的手工表通常把 cutoff 写成相邻观测值之间的开区间。ivdtools 把观测值本身作为阈值,且等号归入阳性侧。报告时必须同时给出判定式,例如“结果 \(\ge9.5\) 为阳性”,不能只写 “cutoff 9.5”,也不能把开区间端点和实际判定阈值混为一谈。
返回更新后的 roc 对象;cutoff_table 保存候选阈值、混淆矩阵、诊断指标及两个选择准则的结果。
11.1.6 绘图与汇总 plot()、summary()
代码
plot(x, curves = NULL, cutpoint = NULL,
type = c("roc", "cutoff"))
summary(x)curves=NULL默认选择全部原始标记物;curves="all"选择全部原始标记物和已保存 MLR;也可用字符向量混合指定二者,例如c("x1", "combined")。type="roc"绘制灵敏度对 \(1-\mathrm{Sp}\);选择原始标记物时需要先执行auc()。cutpoint可取"Youden"、"Corner"或"all",且需先执行cutoff();它只标注所选原始标记物。type="cutoff"绘制一个原始标记物的灵敏度和特异度随有限阈值变化,只允许在curves中指定一个原始标记物,暂不支持 MLR 模型概率。summary()只汇总对象中已经执行的分析,不会自动补做describe()、auc()或cutoff()。
plot() 不可见地返回 ggplot 对象;summary() 打印并不可见地返回输入的 roc 对象。
11.2 分析案例
11.2.1 教学数据:单标记物完整流程
代码
roc_dat <- as.data.frame(read_csv(
"./data/011-ROC曲线与cutoff/roc-example.csv",
show_col_types = FALSE
))
head(roc_dat, 6) sid ref x1
1 1 0 7.594080
2 2 0 8.312513
3 3 0 5.885744
4 4 0 5.585100
5 5 0 9.568483
6 6 0 2.364555
代码
roc_fit <- roc(
roc_dat, cols = "x1", reference = "ref", id = "sid"
)
print(roc_fit)
ROC Analysis
Data class: data.frame
Total rows: 100
Complete cases: 100
Reference: ref (binary)
Reference coding: binary (0/1)
Positive / Neg: 50 / 50
Evaluation cols: 1 (x1)
Duplicate IDs: none
Analysis slots:
[ ] Describe
[ ] AUC
[ ] Paired AUC comparison
[ ] Cutoff
[ ] MLR
代码
roc_fit <- describe(roc_fit, cols = c("x1", "ref"))
Descriptive Statistics
Variable n Mean SD Min Q1 Median Q3 Max NA
---------------------------------------------------------------------------
x1 100 9.2576 4.4744 -0.3894 5.8224 8.5472 12.9591 18.7295
ref
Level Count Percent
--------------------------------------
0 50 50.0%
1 50 50.0%
代码
roc_fit <- auc(roc_fit)
AUC Table
Column AUC 95% CI Direction
------------------------------------------------------------
x1 0.9420 [0.8940, 0.9900] geq
本例 AUC 为 0.9420,Hanley–McNeil 95% CI 为 0.8937~0.9903;方向为 geq。这些结果描述当前 100 例教学数据的表观区分能力。
代码
roc_fit <- cutoff(roc_fit)
Optimal Cutoff Analysis
Column: x1
Youden / Corner: cutoff = 8.7617 (sens = 0.9000, spec = 0.9200, Youden = 0.8200)
Full cutoff table:
Cutoff Sens Spec TP FP TN FN Youden
----------------------------------------------------------------------
Inf 0.0000 1.0000 0 0 50 50 0.0000
18.7295 0.0200 1.0000 1 0 50 49 0.0200
18.5675 0.0400 1.0000 2 0 50 48 0.0400
18.2248 0.0600 1.0000 3 0 50 47 0.0600
17.7837 0.0800 1.0000 4 0 50 46 0.0800
16.4453 0.1000 1.0000 5 0 50 45 0.1000
15.8893 0.1200 1.0000 6 0 50 44 0.1200
15.8087 0.1400 1.0000 7 0 50 43 0.1400
15.6058 0.1600 1.0000 8 0 50 42 0.1600
15.5003 0.1800 1.0000 9 0 50 41 0.1800
15.2855 0.2000 1.0000 10 0 50 40 0.2000
15.0168 0.2200 1.0000 11 0 50 39 0.2200
14.8639 0.2400 1.0000 12 0 50 38 0.2400
14.6980 0.2600 1.0000 13 0 50 37 0.2600
14.4757 0.2800 1.0000 14 0 50 36 0.2800
14.4469 0.3000 1.0000 15 0 50 35 0.3000
14.4042 0.3200 1.0000 16 0 50 34 0.3200
14.1952 0.3400 1.0000 17 0 50 33 0.3400
14.1938 0.3600 1.0000 18 0 50 32 0.3600
13.9382 0.3800 1.0000 19 0 50 31 0.3800
13.7845 0.4000 1.0000 20 0 50 30 0.4000
13.3718 0.4200 1.0000 21 0 50 29 0.4200
13.0699 0.4400 1.0000 22 0 50 28 0.4400
12.9970 0.4600 1.0000 23 0 50 27 0.4600
12.9854 0.4800 1.0000 24 0 50 26 0.4800
12.9659 0.5000 1.0000 25 0 50 25 0.5000
12.9569 0.5200 1.0000 26 0 50 24 0.5200
12.7812 0.5400 1.0000 27 0 50 23 0.5400
12.7534 0.5600 1.0000 28 0 50 22 0.5600
12.5227 0.5800 1.0000 29 0 50 21 0.5800
12.3440 0.6000 1.0000 30 0 50 20 0.6000
12.2962 0.6200 1.0000 31 0 50 19 0.6200
12.1394 0.6400 1.0000 32 0 50 18 0.6400
12.1354 0.6600 1.0000 33 0 50 17 0.6600
12.0393 0.6800 1.0000 34 0 50 16 0.6800
11.7418 0.6800 0.9800 34 1 49 16 0.6600
11.6642 0.7000 0.9800 35 1 49 15 0.6800
11.5082 0.7000 0.9600 35 2 48 15 0.6600
11.4038 0.7200 0.9600 36 2 48 14 0.6800
11.2133 0.7400 0.9600 37 2 48 13 0.7000
11.0696 0.7600 0.9600 38 2 48 12 0.7200
10.3902 0.7800 0.9600 39 2 48 11 0.7400
10.1719 0.8000 0.9600 40 2 48 10 0.7600
9.8836 0.8200 0.9600 41 2 48 9 0.7800
9.5685 0.8200 0.9400 41 3 47 9 0.7600
9.3526 0.8400 0.9400 42 3 47 8 0.7800
9.1944 0.8600 0.9400 43 3 47 7 0.8000
9.1032 0.8800 0.9400 44 3 47 6 0.8200
8.8558 0.8800 0.9200 44 4 46 6 0.8000
8.7617 0.9000 0.9200 45 4 46 5 0.8200
8.5538 0.9000 0.9000 45 5 45 5 0.8000
8.5406 0.9000 0.8800 45 6 44 5 0.7800
8.5296 0.9200 0.8800 46 6 44 4 0.8000
8.5259 0.9200 0.8600 46 7 43 4 0.7800
8.3125 0.9200 0.8400 46 8 42 4 0.7600
8.2985 0.9200 0.8200 46 9 41 4 0.7400
7.9078 0.9200 0.8000 46 10 40 4 0.7200
7.8493 0.9200 0.7800 46 11 39 4 0.7000
7.6187 0.9200 0.7600 46 12 38 4 0.6800
7.5941 0.9200 0.7400 46 13 37 4 0.6600
7.5556 0.9200 0.7200 46 14 36 4 0.6400
7.5150 0.9200 0.7000 46 15 35 4 0.6200
7.4355 0.9200 0.6800 46 16 34 4 0.6000
7.1837 0.9200 0.6600 46 17 33 4 0.5800
6.8235 0.9400 0.6600 47 17 33 3 0.6000
6.8029 0.9400 0.6400 47 18 32 3 0.5800
6.7765 0.9400 0.6200 47 19 31 3 0.5600
6.6770 0.9400 0.6000 47 20 30 3 0.5400
6.5446 0.9400 0.5800 47 21 29 3 0.5200
6.5440 0.9600 0.5800 48 21 29 2 0.5400
6.1603 0.9600 0.5600 48 22 28 2 0.5200
6.0665 0.9600 0.5400 48 23 27 2 0.5000
6.0554 0.9600 0.5200 48 24 26 2 0.4800
6.0361 0.9600 0.5000 48 25 25 2 0.4600
5.9000 0.9600 0.4800 48 26 24 2 0.4400
5.8857 0.9600 0.4600 48 27 23 2 0.4200
5.6326 0.9600 0.4400 48 28 22 2 0.4000
5.6281 0.9600 0.4200 48 29 21 2 0.3800
5.5851 0.9600 0.4000 48 30 20 2 0.3600
5.5802 0.9600 0.3800 48 31 19 2 0.3400
5.4514 0.9600 0.3600 48 32 18 2 0.3200
5.3207 0.9600 0.3400 48 33 17 2 0.3000
5.1582 0.9600 0.3200 48 34 16 2 0.2800
5.0599 0.9600 0.3000 48 35 15 2 0.2600
5.0167 0.9600 0.2800 48 36 14 2 0.2400
4.5654 0.9600 0.2600 48 37 13 2 0.2200
3.9706 0.9800 0.2600 49 37 13 1 0.2400
3.9552 0.9800 0.2400 49 38 12 1 0.2200
3.9103 1.0000 0.2400 50 38 12 0 0.2400
3.7719 1.0000 0.2200 50 39 11 0 0.2200
3.5881 1.0000 0.2000 50 40 10 0 0.2000
3.4583 1.0000 0.1800 50 41 9 0 0.1800
3.4422 1.0000 0.1600 50 42 8 0 0.1600
2.9673 1.0000 0.1400 50 43 7 0 0.1400
2.9111 1.0000 0.1200 50 44 6 0 0.1200
2.7698 1.0000 0.1000 50 45 5 0 0.1000
2.5203 1.0000 0.0800 50 46 4 0 0.0800
2.3646 1.0000 0.0600 50 47 3 0 0.0600
2.2596 1.0000 0.0400 50 48 2 0 0.0400
0.4733 1.0000 0.0200 50 49 1 0 0.0200
-0.3894 1.0000 0.0000 50 50 0 0 0.0000
-Inf 1.0000 0.0000 50 50 0 0 0.0000
两种准则均选择 8.76;由于方向为 geq,其含义是 \(x_1\ge8.76\) 判为阳性。当前样本中的灵敏度为 0.90、特异度为 0.92、Youden 指数为 0.82。PPV 和 NPV 还受研究数据中阳性比例影响,不能不经校正直接外推到患病率不同的人群。
代码
plot(roc_fit, cutpoint = "Youden")
代码
plot(roc_fit, curves = "x1", type = "cutoff", cutpoint = "all")
11.2.2 CLSI EP24-A2 示例 1:经验 ROC 与阈值区间
EP24 表 1 给出 8 名受试者、7 个不同测量值;阳性和阴性各 4 例,15.1 ng/mL 有一对跨组并列值。
代码
ep24_example1 <- as.data.frame(read_csv(
"./data/011-ROC曲线与cutoff/std-ep24-example1.csv",
show_col_types = FALSE
))
ep24_example1_fit <- roc(
ep24_example1, cols = "assay",
reference = "status", id = "id"
)
ep24_example1_fit <- auc(ep24_example1_fit)
AUC Table
Column AUC 95% CI Direction
------------------------------------------------------------
assay 0.7812 [0.4390, 1.0000] geq
代码
ep24_example1_fit <- cutoff(ep24_example1_fit)
Optimal Cutoff Analysis
Column: assay
Youden / Corner: cutoff = 9.5000 (sens = 0.7500, spec = 0.7500, Youden = 0.5000)
Full cutoff table:
Cutoff Sens Spec TP FP TN FN Youden
----------------------------------------------------------------------
Inf 0.0000 1.0000 0 0 4 4 0.0000
24.8000 0.2500 1.0000 1 0 4 3 0.2500
15.1000 0.5000 0.7500 2 1 3 2 0.2500
9.5000 0.7500 0.7500 3 1 3 1 0.5000
7.0000 0.7500 0.5000 3 2 2 1 0.2500
6.4000 1.0000 0.5000 4 2 2 0 0.5000
2.1000 1.0000 0.2500 4 3 1 0 0.2500
1.6000 1.0000 0.0000 4 4 0 0 0.0000
-Inf 1.0000 0.0000 4 4 0 0 0.0000
| 标准位置 | 统计量 | 标准结果 | ivdtools结果 |
|---|---|---|---|
| EP24-A2 Example 1 | AUC | 0.78 | 0.7812 |
| EP24-A2 Example 1 | Youden cutoff | NA | 9.5000 |
| EP24-A2 Example 1 | Sensitivity | 0.75 | 0.7500 |
| EP24-A2 Example 1 | Specificity | 0.75 | 0.7500 |
EP24 的表 2 把判定点写在相邻观测值之间,而 ivdtools 用“\(\ge\)”并选择实际观测值 9.5;这是阈值表示方式的差异。
Youden 指数还在 2.1~6.4 区间取得相同最大值;EP24 用这个例子说明最大和与最近左上角可以给出两个 cutoff。当前软件在并列最大 Youden 时按 geq 的降序候选顺序首先取 9.5,于是把该行标为 Youden / Corner。这属于阈值表示和并列处理差异,不是灵敏度、特异度或 AUC 计算错误。
11.2.3 CLSI EP24-A2 附录 D:OxLDL 单曲线 AUC
附录 D 有 50 名受试者,其中诊断阳性 28 例、阴性 22 例。本节仅复核标准公布的 OxLDL 单曲线 AUC、Hanley–McNeil 标准误和正态近似区间。
代码
ep24 <- as.data.frame(read_csv(
"./data/公共/std-ep24-appendix-d.csv",
show_col_types = FALSE
))
ep24_oxldl <- roc(
ep24, cols = "oxldl",
reference = "diagnosis", id = "id"
)
ep24_oxldl <- auc(ep24_oxldl)
AUC Table
Column AUC 95% CI Direction
------------------------------------------------------------
oxldl 0.7995 [0.6777, 0.9213] geq
| 标准位置 | 统计量 | 标准结果 | ivdtools结果 |
|---|---|---|---|
| OxLDL | AUC | 0.800 | 0.799513 |
| OxLDL | SE | 0.062 | 0.062140 |
| OxLDL | CI_lower | 0.680 | 0.677718 |
| OxLDL | CI_upper | 0.920 | 0.921308 |
附录 D 没有给出一个推荐 OxLDL cutoff,因此下列自动选择结果只能作为当前数据的教学派生结果:
代码
ep24_oxldl <- cutoff(ep24_oxldl)
Optimal Cutoff Analysis
Column: oxldl
Youden / Corner: cutoff = 71.0000 (sens = 0.6429, spec = 0.8636, Youden = 0.5065)
Full cutoff table:
Cutoff Sens Spec TP FP TN FN Youden
----------------------------------------------------------------------
Inf 0.0000 1.0000 0 0 22 28 0.0000
143.0000 0.0357 1.0000 1 0 22 27 0.0357
116.0000 0.0714 1.0000 2 0 22 26 0.0714
96.0000 0.1071 1.0000 3 0 22 25 0.1071
95.0000 0.1429 1.0000 4 0 22 24 0.1429
88.0000 0.1786 1.0000 5 0 22 23 0.1786
86.0000 0.2143 1.0000 6 0 22 22 0.2143
83.0000 0.2500 1.0000 7 0 22 21 0.2500
82.0000 0.2857 1.0000 8 0 22 20 0.2857
78.0000 0.3571 1.0000 10 0 22 18 0.3571
77.0000 0.4286 0.9545 12 1 21 16 0.3831
76.0000 0.5357 0.9545 15 1 21 13 0.4903
74.0000 0.5357 0.9091 15 2 20 13 0.4448
73.0000 0.5714 0.8636 16 3 19 12 0.4351
72.0000 0.6071 0.8636 17 3 19 11 0.4708
71.0000 0.6429 0.8636 18 3 19 10 0.5065
70.0000 0.6429 0.8182 18 4 18 10 0.4610
66.0000 0.7143 0.7273 20 6 16 8 0.4416
64.0000 0.7500 0.6818 21 7 15 7 0.4318
63.0000 0.7500 0.6364 21 8 14 7 0.3864
62.0000 0.7500 0.5909 21 9 13 7 0.3409
61.0000 0.7500 0.5455 21 10 12 7 0.2955
60.0000 0.8571 0.5000 24 11 11 4 0.3571
59.0000 0.8571 0.4545 24 12 10 4 0.3117
57.0000 0.8929 0.4545 25 12 10 3 0.3474
54.0000 0.8929 0.3636 25 14 8 3 0.2565
53.0000 0.9286 0.3636 26 14 8 2 0.2922
52.0000 0.9286 0.3182 26 15 7 2 0.2468
51.0000 0.9286 0.2727 26 16 6 2 0.2013
48.0000 0.9286 0.2273 26 17 5 2 0.1558
45.0000 0.9643 0.2273 27 17 5 1 0.1916
44.0000 0.9643 0.1818 27 18 4 1 0.1461
42.0000 0.9643 0.0909 27 20 2 1 0.0552
41.0000 1.0000 0.0909 28 20 2 0 0.0909
37.0000 1.0000 0.0455 28 21 1 0 0.0455
22.0000 1.0000 0.0000 28 22 0 0 0.0000
-Inf 1.0000 0.0000 28 22 0 0 0.0000