R/OTCMethodFunctions.R
summary.OTC.Rd
# S3 method for class 'OTC'
summary(object, ...)
summary.OTC returns an object of class "summary.OTC", a list containing:
character string specifying the name of the group testing algorithm.
matrix detailing the optimal testing configuration from object. For hierarchical testing, this includes the group sizes for each stage of testing. For array testing, this includes the array dimension (row/column size) and the array size (the total number of individuals in the array).
matrix detailing the expected number of tests and expected number of tests per individual from object.
matrix detailing the overall accuracy measures for the algorithm, including the pooling sensitivity, pooling specificity, pooling positive predictive value, and pooling negative predictive value for the algorithm from object. Further details are found in the 'Details' section.
This function produces a summary list for objects of class
"OTC" returned by OTC1
or OTC2
.
It formats the optimal testing configuration, expected number of tests,
expected number of tests per individual, and accuracy measures.
A summary of the results from OTC1
includes results for all
objective functions specified by the user.
The OTC component of the result gives the optimal testing configuration, which may include the group sizes for each stage of a hierarchical testing algorithm or the row/column size and array size for an array testing algorithm. The Tests component of the result gives the expected number of tests and the expected number of tests per individual for the algorithm.
The Accuracy component gives the overall accuracy measures for the
algorithm. Accuracy measures included are the pooling sensitivity, pooling
specificity, pooling positive predictive value, and pooling negative
predictive value. These values are weighted averages of the corresponding
individual accuracy measures for all individuals in the algorithm.
Expressions for these averages are provided in the Supplementary Material
for Hitt et al. (2019). For more information, see the 'Details' section for
the OTC1
or OTC2
function.
# Find the optimal testing configuration for
# non-informative two-stage hierarchical testing.
res1 <- OTC1(algorithm = "D2", p = 0.01, Se = 0.99, Sp = 0.99,
group.sz = 2:100, obj.fn = c("ET", "MAR", "GR1"),
weights = matrix(data = c(1,1), nrow = 1, ncol = 2))
#> Initial Group Size = 2
#> Initial Group Size = 3
#> Initial Group Size = 4
#> Initial Group Size = 5
#> Initial Group Size = 6
#> Initial Group Size = 7
#> Initial Group Size = 8
#> Initial Group Size = 9
#> Initial Group Size = 10
#> Initial Group Size = 11
#> Initial Group Size = 12
#> Initial Group Size = 13
#> Initial Group Size = 14
#> Initial Group Size = 15
#> Initial Group Size = 16
#> Initial Group Size = 17
#> Initial Group Size = 18
#> Initial Group Size = 19
#> Initial Group Size = 20
#> Initial Group Size = 21
#> Initial Group Size = 22
#> Initial Group Size = 23
#> Initial Group Size = 24
#> Initial Group Size = 25
#> Initial Group Size = 26
#> Initial Group Size = 27
#> Initial Group Size = 28
#> Initial Group Size = 29
#> Initial Group Size = 30
#> Initial Group Size = 31
#> Initial Group Size = 32
#> Initial Group Size = 33
#> Initial Group Size = 34
#> Initial Group Size = 35
#> Initial Group Size = 36
#> Initial Group Size = 37
#> Initial Group Size = 38
#> Initial Group Size = 39
#> Initial Group Size = 40
#> Initial Group Size = 41
#> Initial Group Size = 42
#> Initial Group Size = 43
#> Initial Group Size = 44
#> Initial Group Size = 45
#> Initial Group Size = 46
#> Initial Group Size = 47
#> Initial Group Size = 48
#> Initial Group Size = 49
#> Initial Group Size = 50
#> Initial Group Size = 51
#> Initial Group Size = 52
#> Initial Group Size = 53
#> Initial Group Size = 54
#> Initial Group Size = 55
#> Initial Group Size = 56
#> Initial Group Size = 57
#> Initial Group Size = 58
#> Initial Group Size = 59
#> Initial Group Size = 60
#> Initial Group Size = 61
#> Initial Group Size = 62
#> Initial Group Size = 63
#> Initial Group Size = 64
#> Initial Group Size = 65
#> Initial Group Size = 66
#> Initial Group Size = 67
#> Initial Group Size = 68
#> Initial Group Size = 69
#> Initial Group Size = 70
#> Initial Group Size = 71
#> Initial Group Size = 72
#> Initial Group Size = 73
#> Initial Group Size = 74
#> Initial Group Size = 75
#> Initial Group Size = 76
#> Initial Group Size = 77
#> Initial Group Size = 78
#> Initial Group Size = 79
#> Initial Group Size = 80
#> Initial Group Size = 81
#> Initial Group Size = 82
#> Initial Group Size = 83
#> Initial Group Size = 84
#> Initial Group Size = 85
#> Initial Group Size = 86
#> Initial Group Size = 87
#> Initial Group Size = 88
#> Initial Group Size = 89
#> Initial Group Size = 90
#> Initial Group Size = 91
#> Initial Group Size = 92
#> Initial Group Size = 93
#> Initial Group Size = 94
#> Initial Group Size = 95
#> Initial Group Size = 96
#> Initial Group Size = 97
#> Initial Group Size = 98
#> Initial Group Size = 99
#> Initial Group Size = 100
#>
#> Number of minutes running: 0
#>
summary(res1)
#>
#> Algorithm: Non-informative two-stage hierarchical testing
#>
#> Optimal testing configuration:
#> Stage 1
#> ET 11
#> MAR 11
#> GR1 11
#>
#> Expected number of tests:
#> E(T) Value
#> ET 2.24 0.2035
#> MAR 2.24 0.2037
#> GR1 2.24 0.2047
#>
#> E(T) denotes the expected number of tests.
#> Value denotes the objective function value per individual.
#>
#> Overall accuracy of the algorithm:
#> PSe PSp PPPV PNPV
#> ET 0.9801 0.9990 0.9052 0.9998
#> MAR 0.9801 0.9990 0.9052 0.9998
#> GR1 0.9801 0.9990 0.9052 0.9998
#>
#> PSe denotes the pooling sensitivity.
#> PSp denotes the pooling specificity.
#> PPPV denotes the pooling positive predictive value.
#> PNPV denotes the pooling negative predictive value.
# Find the optimal testing configuration for
# informative three-stage hierarchical testing
res2 <- OTC1(algorithm = "ID3", p = 0.025,
Se = c(0.95, 0.95, 0.99), Sp = c(0.96, 0.96, 0.98),
group.sz = 3:10, obj.fn = c("ET", "MAR"), alpha = 2)
#> Initial Group Size = 3
#> Initial Group Size = 4
#> Initial Group Size = 5
#> Initial Group Size = 6
#> Initial Group Size = 7
#> Initial Group Size = 8
#> Initial Group Size = 9
#> Initial Group Size = 10
#>
#> Number of minutes running: 0
#>
summary(res2)
#>
#> Algorithm: Informative three-stage hierarchical testing
#>
#> Optimal testing configuration:
#> Stage 1 Stage 2
#> ET 10 5,3,2
#> MAR 10 5,3,2
#>
#> Expected number of tests:
#> E(T) Value
#> ET 2.49 0.2488
#> MAR 2.49 0.2497
#>
#> E(T) denotes the expected number of tests.
#> Value denotes the objective function value per individual.
#>
#> Overall accuracy of the algorithm:
#> PSe PSp PPPV PNPV
#> ET 0.8935 0.9989 0.9548 0.9973
#> MAR 0.8935 0.9989 0.9548 0.9973
#>
#> PSe denotes the pooling sensitivity.
#> PSp denotes the pooling specificity.
#> PPPV denotes the pooling positive predictive value.
#> PNPV denotes the pooling negative predictive value.
# Find the optimal testing configuration for
# informative array testing without master pooling.
res3 <- OTC1(algorithm = "IA2", p = 0.05, alpha = 2,
Se = 0.90, Sp = 0.90, group.sz = 2:15,
obj.fn = "ET")
#> Row/Column Size = 2, Array Size = 4
#> Row/Column Size = 3, Array Size = 9
#> Row/Column Size = 4, Array Size = 16
#> Row/Column Size = 5, Array Size = 25
#> Row/Column Size = 6, Array Size = 36
#> Row/Column Size = 7, Array Size = 49
#> Row/Column Size = 8, Array Size = 64
#> Row/Column Size = 9, Array Size = 81
#> Row/Column Size = 10, Array Size = 100
#> Row/Column Size = 11, Array Size = 121
#> Row/Column Size = 12, Array Size = 144
#> Row/Column Size = 13, Array Size = 169
#> Using simulation
#> Row/Column Size = 14, Array Size = 196
#> Using simulation
#> Row/Column Size = 15, Array Size = 225
#>
#> Number of minutes running: 0.1
#>
summary(res3)
#>
#> Algorithm: Informative array testing without master pooling
#>
#> Optimal testing configuration:
#> Row/column size Array size
#> ET 11 121
#>
#> Expected number of tests:
#> E(T) Value
#> ET 45.78 0.3784
#>
#> E(T) denotes the expected number of tests.
#> Value denotes the objective function value per individual.
#>
#> Overall accuracy of the algorithm:
#> PSe PSp PPPV PNPV
#> ET 0.7295 0.9836 0.7004 0.9857
#>
#> PSe denotes the pooling sensitivity.
#> PSp denotes the pooling specificity.
#> PPPV denotes the pooling positive predictive value.
#> PNPV denotes the pooling negative predictive value.
# Find the optimal testing configuraiton for
# informative two-stage hierarchical testing.
Se <- matrix(data = c(rep(0.95, 2), rep(0.99, 2)),
nrow = 2, ncol = 2, byrow = FALSE)
Sp <- matrix(data = c(rep(0.96, 2), rep(0.98, 2)),
nrow = 2, ncol = 2, byrow = FALSE)
res4 <- OTC2(algorithm = "ID2",
alpha = c(18.25, 0.75, 0.75, 0.25),
Se = Se, Sp = Sp, group.sz = 8)
#> Block Size = 8
#>
#> Number of minutes running: 0
#>
summary(res4)
#>
#> Algorithm: Informative two-stage hierarchical testing
#>
#> Optimal testing configuration:
#> Block size Group sizes
#> ET 8 4,4
#>
#> Expected number of tests:
#> E(T) Value
#> ET 5.47 0.6844
#>
#> E(T) denotes the expected number of tests.
#> Value denotes the objective function value per individual.
#>
#> Overall accuracy of the algorithm:
#> PSe PSp PPPV PNPV
#> 1 0.9737 0.9495 0.4759 0.9987
#> 2 0.9610 0.9197 0.5550 0.9956
#>
#> PSe denotes the pooling sensitivity.
#> PSp denotes the pooling specificity.
#> PPPV denotes the pooling positive predictive value.
#> PNPV denotes the pooling negative predictive value.
# Find the optimal testing configuration for
# non-informative three-stage hierarchical testing.
Se <- matrix(data = c(rep(0.95, 6)), nrow = 2, ncol = 3)
Sp <- matrix(data = c(rep(0.99, 6)), nrow = 2, ncol = 3)
res5 <- OTC2(algorithm = "D3",
p.vec = c(0.95, 0.0275, 0.0175, 0.005),
Se = Se, Sp = Sp, group.sz = 5:12)
#> Initial Group Size = 5
#> Initial Group Size = 6
#> Initial Group Size = 7
#> Initial Group Size = 8
#> Initial Group Size = 9
#> Initial Group Size = 10
#> Initial Group Size = 11
#> Initial Group Size = 12
#>
#> Number of minutes running: 0.04
#>
summary(res5)
#>
#> Algorithm: Non-informative three-stage hierarchical testing
#>
#> Optimal testing configuration:
#> Stage 1 Stage 2
#> ET 9 3,3,3
#>
#> Expected number of tests:
#> E(T) Value
#> ET 3.33 0.3695
#>
#> E(T) denotes the expected number of tests.
#> Value denotes the objective function value per individual.
#>
#> Overall accuracy of the algorithm:
#> PSe PSp PPPV PNPV
#> 1 0.8793 0.9989 0.9643 0.9960
#> 2 0.8875 0.9988 0.9456 0.9974
#>
#> PSe denotes the pooling sensitivity.
#> PSp denotes the pooling specificity.
#> PPPV denotes the pooling positive predictive value.
#> PNPV denotes the pooling negative predictive value.
# Find the optimal testing configuration for
# non-informative array testing with master pooling.
res6 <- OTC2(algorithm = "A2M", p.vec = c(0.90, 0.04, 0.04, 0.02),
Se = rep(0.99, 2), Sp = rep(0.99, 2), group.sz = 2:12)
#> Row/Column Size = 2, Array Size = 4
#> Row/Column Size = 3, Array Size = 9
#> Row/Column Size = 4, Array Size = 16
#> Row/Column Size = 5, Array Size = 25
#> Row/Column Size = 6, Array Size = 36
#> Row/Column Size = 7, Array Size = 49
#> Row/Column Size = 8, Array Size = 64
#> Row/Column Size = 9, Array Size = 81
#> Row/Column Size = 10, Array Size = 100
#> Row/Column Size = 11, Array Size = 121
#> Row/Column Size = 12, Array Size = 144
#>
#> Number of minutes running: 0
#>
summary(res6)
#>
#> Algorithm: Non-informative array testing with master pooling
#>
#> Optimal testing configuration:
#> Row/column size Array size
#> ET 8 64
#>
#> Expected number of tests:
#> E(T) Value
#> ET 35.94 0.5615
#>
#> E(T) denotes the expected number of tests.
#> Value denotes the objective function value per individual.
#>
#> Overall accuracy of the algorithm:
#> PSe PSp PPPV PNPV
#> 1 0.9785 0.9975 0.9612 0.9986
#> 2 0.9785 0.9975 0.9612 0.9986
#>
#> PSe denotes the pooling sensitivity.
#> PSp denotes the pooling specificity.
#> PPPV denotes the pooling positive predictive value.
#> PNPV denotes the pooling negative predictive value.