The purpose of this developing this R package is to quantify and visualize the misclassification effect on mean/variance of dynamic treatment regimens (DTRs) and power comparasion of two DTRs in the setting of sequential multiple assigned randomized trial (SMART).
This vignette describes the use cases of DTRs for the smart package. Most of the trial settings and calculations are handled by the smartDTR() function, where the arguments and settings follow the terminology described in smartSST() function, and the formulae listed in the manuscript He et al (in preparation).
Based on typical two-stage SMART design, the first stage includes two initial treatments denoted as treatment A1 and A2. After making the responder/non-responder designation based on an intermediate outcome, participants are then re-randomized into one of treatments B1 to B8 in treatment stage II. There are then eight possible DTRs: A1B1B3, A1B1B4, A1B2B3, A1B2B4, A2B5B7, A2B5B8, A2B6B7, and A2B6B8. Therefore each DTR includes outcomes from both responder and non-reponder treatments.
Let mu_BsBt=E(Y│B=s or B=t) represents the expected mean response of the DTRs with corresponding variance sigsq_BsBt.
We run smartDTR for mean/variance/relative bias of DTRs (eg. B1B3, B2B4, B5B7). The calculations needed for one run of smartDTR are for two B-levels and the G1,G0 pairing for each B-level. For example, if we want to calculate the mean of B1B3, we will define Barm=c(1,3), then the first number in the setting of G1 represents B1G1, the second number in the setting of G1 represents B3G1, the first number in the setting of G0 represents the B1G0, and the second number in the setting of G0 represents B3G0.
This example supposed that true responders who were correctly assigned into treatment B1 (B1G1) had a better response than true non-responders who were misclassified to B1 (B1G0), and the true non-responders who were correctly classified to treatment B3 (B3G0) had a better response than true responders who were misclassifed to B3 (B3G1).
‘pran_Barm’ represents the probability that participants are assigned into corresponding Blevel. For example, if pran_Blevel=c(0.5, 0.6) under Barm=c(1,3), then the probability of being assigned to B1 group is 0.5, and the probability of being assigned to B3 is 0.6.
mumat13 <- cbind(G1 = c(30, 20), G0 = c(25, 18))
varmat13 <- cbind(G1 = c(100, 100), G0 = c(100, 100))
dtr13 <- smartDTR(mu_Barm = mumat13, sigsq_Barm = varmat13, Barm = c(1, 3), nsubject = 252,
pG_A1 = 0.8, pran_Barm = c(0.5, 0.6))
dtr13$dtrdat
sens spec n_Barm mu_Barm sigsq_Barm
1 0.5 0.5 69.300 23.87273 124.0747
2 0.5 0.6 69.552 23.72464 124.6923
3 0.5 0.7 69.804 23.57762 125.2620
4 0.5 0.8 70.056 23.43165 125.7849
5 0.5 0.9 70.308 23.28674 126.2619
6 0.5 1.0 70.560 23.14286 126.6939
7 0.6 0.5 68.292 24.66790 125.2403
8 0.6 0.6 68.544 24.51471 126.1027
9 0.6 0.7 68.796 24.36264 126.9125
10 0.6 0.8 69.048 24.21168 127.6705
11 0.6 0.9 69.300 24.06182 128.3780
12 0.6 1.0 69.552 23.91304 129.0359
13 0.7 0.5 67.284 25.48689 125.1187
14 0.7 0.6 67.536 25.32836 126.2504
15 0.7 0.7 67.788 25.17100 127.3239
16 0.7 0.8 68.040 25.01481 128.3405
17 0.7 0.9 68.292 24.85978 129.3014
18 0.7 1.0 68.544 24.70588 130.2076
19 0.8 0.5 66.276 26.33080 123.5902
20 0.8 0.6 66.528 26.16667 125.0177
21 0.8 0.7 66.780 26.00377 126.3811
22 0.8 0.8 67.032 25.84211 127.6818
23 0.8 0.9 67.284 25.68165 128.9211
24 0.8 1.0 67.536 25.52239 130.1002
25 0.9 0.5 65.268 27.20077 120.5234
26 0.9 0.6 65.520 27.03077 122.2760
27 0.9 0.7 65.772 26.86207 123.9580
28 0.9 0.8 66.024 26.69466 125.5709
29 0.9 0.9 66.276 26.52852 127.1161
30 0.9 1.0 66.528 26.36364 128.5950
31 1.0 0.5 64.260 28.09804 115.7747
32 1.0 0.6 64.512 27.92187 117.8845
33 1.0 0.7 64.764 27.74708 119.9166
34 1.0 0.8 65.016 27.57364 121.8725
35 1.0 0.9 65.268 27.40154 123.7538
36 1.0 1.0 65.520 27.23077 125.5621
This is an example of plotting the mean of B1B3 from the above example.
plot.smartDTR(dtr13, metric = "mean", xtype = "spec", mar = c(4, 4, 4, 6), legend.inset = c(-0.2,
0))
plot(dtr13, metric = "mean", relativeBias = TRUE, xtype = "sens", mar = c(4, 4, 4,
6), legend.inset = c(-0.2, 0))
This is an example of plotting the variance of B1B3 from the above example.
plot.smartDTR(dtr13, metric = "variance", xtype = "sens", mar = c(4, 4, 4, 6), legend.inset = c(-0.2,
0))
This is an example of plotting the relative mean and relative variance.
plot.smartDTR(dtr13, metric = "mean", relativeBias = TRUE, xtype = "sens", mar = c(4,
4, 4, 6), legend.inset = c(-0.2, 0))
plot.smartDTR(dtr13, metric = "variance", relativeBias = TRUE, xtype = "sens", mar = c(4,
4, 4, 6), legend.inset = c(-0.2, 0))
To evaluate the power comparison between two DTRs (eg.B1B3 versus B2B4, B1B3 verus B5B7), the calculated results of mean and variance from two DTRs are required. We will use two examples to show the misclassification effects on power based on targeted power of 0.8 (hline=0.8).
The first example shows the power comparison with the same initial treatment regimen A1 (B1B3 versus B2B4). The printed results will include the z-statistics and power under different settings of sensitivity and specificity.
mumat13 <- cbind(G1 = c(30, 35), G0 = c(20, 28))
varmat13 <- cbind(G1 = c(100, 100), G0 = c(100, 100))
# mumat13 <- cbind(G1=c(30,25), G0=c(20,22)) varmat13 <-
# cbind(G1=c(16,16),G0=c(16,16))
dtr13 <- smartDTR(mu_Barm = mumat13, sigsq_Barm = varmat13, Barm = c(1, 3), nsubject = 252,
pG_A1 = 0.8)
plot(dtr13, metric = "mean", xtype = "spec", relativeBias = TRUE)
mumat24 <- cbind(G1 = c(25, 32), G0 = c(18, 23))
varmat24 <- cbind(G1 = c(100, 100), G0 = c(100, 100))
dtr24 <- smartDTR(mu_Barm = mumat24, sigsq_Barm = varmat24, Barm = c(2, 4), nsubject = 252,
pG_A2 = 0.8)
plot(dtr24)
[1] "powerdat" "Barms" "alpha"
# source('../R/powerDTR.R')
plot(pdtr13vs24, mar = c(4, 4, 4, 6), legend.inset = c(-0.2, 0), hline = 0.8)
The second example shows the power comparison with the different initial treatment regimens (A1B1B3 versus A2B5B7).
mumat13 <- cbind(G1 = c(30, 35), G0 = c(20, 10))
varmat13 <- cbind(G1 = c(100, 100), G0 = c(100, 100))
dtr13 <- smartDTR(mu_Barm = mumat13, sigsq_Barm = varmat13, Barm = c(1, 3), nsubject = 252,
pG_A1 = 0.8)
mumat57 <- cbind(G1 = c(29, 32), G0 = c(18, 9))
varmat57 <- cbind(G1 = c(100, 100), G0 = c(100, 100))
dtr57 <- smartDTR(mu_Barm = mumat57, sigsq_Barm = varmat57, Barm = c(5, 7), nsubject = 252,
pG_A2 = 0.6)
pdtr13vs57 <- powerDTR(dtr13, dtr57)
names(pdtr13vs57)
[1] "powerdat" "Barms" "alpha"
## Plot DTR Power
plot(pdtr13vs57, mar = c(4, 4, 4, 6), cex.axis = 0.5, cex.lab = 0.5, legend.inset = c(-0.2,
0), hline = 0.8)