The search through the space of \(b_1\) (corresponds to \(b_1\) in paper) and \(b_0\) (corresponds to \(b_0\) in paper) is greedy initially. Then refinements to the boundary are made by adjusting the boundaries by the step-size. It is entirely possible that the step-size is so small that a maximum number of iterations can be reached. Depending on how close \(p_0\) and \(p_1\) are the memory usage can grow significantly. The process is computationally intensive being dominated by a recursion deep in the search.
glrSearch(p, alpha, beta, stepSize = 0.5, tol = 1e-7,
startB1 = log(1/beta), startB0 = log(1/alpha),
maxIter = 25, gridIt = FALSE, nGrid = 5, verbose = FALSE)
The vector of \(p_0\) and \(p_1\), with \(p_0 < p_1\)
A value for type I error \(\alpha\) between 0 and 1 typically 0.05 which is the default value
A value for type II error (\(\beta\)) between 0 and 1 typically below .2, default 0.10
A value to use for moving the boundaries during the search, 0.5 default seems to work.
A value that is used for deciding when to terminate the search. A euclidean metric is used. Default 1e-7.
A starting value for the futility boundary, default is log of reciprocal type I error
A starting value for the rejection boundary, default is log of reciprocal type II error
A maximum number of iterations to be used for the search. This allows for a bailout if the step size is too small.
A logical value indicating if a grid of values should be evaluated once the boundaries are bracketed in the search.
The number of grid points to use, default 5
A logical flag indicating if you want verbose output during search. Useful for situations where the code gets confused.
The explored values of the futility boundary \(b_1\) (corresponds to the boundary \(b_1\) in the appendix of reference)
The explored values of the rejection boundary \(b_0\) (corresponds to the boundary \(b_0\) in the appendix of reference)
The estimated \(\alpha\) and \(\beta\) values corresponding to the explored boundaries (a 2-column matrix); first column is \(\alpha\), second is \(\beta\)
The constant values of the log likelihoods under \(p_0\), \(p_1\) and the estimate probability of terminating at that step. The first two, are, in turn, lists of length \(n\) where \(n\) is the maximum number of adverse events that might be needed for the test. The last element is a matrix of 2 columns, specifying the probability of terminating at each value of \(n\)
a matrix (nGrid x nGrid) of \(\alpha\) values
corresponding to the combinations of boundaries \(b\) and \(a\)
(which are the row and column names of the matrix). This is computed
only if gridIt=TRUE
a matrix (nGrid x nGrid) of \(\beta\) values
corresponding to the combinations of boundaries \(b\) and \(a\)
(which are the row and column names of the matrix). This is computed
only if gridIt=TRUE
the vector of \(b_1\) (or equivalently \(b_1\)) values
used in the grid, computed only if gridIt=TRUE
the vector of \(b_0\) (or equivalently \(b_0\)) values
used in the grid, computed only if gridIt=TRUE
The number of iterations actually used
One should not use this code without a basic understanding of the Shih, Lai, Heyse and Chen paper cited below, particularly the section on the pre-licensure vaccine trials.
As the search can be computationally intensive, the program needs to use some variables internally by reference, particularly large tables that stay constant.
In our experiments, starting off with the default step size has usually worked, but in other cases the step size and the maximum number of iterations may need to be adjusted.
``Sequential Generalized Likelihood Ratio Tests for Vaccine Safety Evaluation'' 10.1002/sim.4036.
# NOT RUN {
library(sglr)
result <- glrSearch(p=c(.5, .75), alpha=0.05, beta=0.10)
result <- glrSearch(p=c(.5, .75), alpha=0.05, beta=0.10, verbose=TRUE)
result <- glrSearch(p=c(.5, .75), alpha=0.05, beta=0.10, gridIt=TRUE)
print(result$alphaTable)
print(result$betaTable)
## takes a while
result <- glrSearch(p=c(.5, 2/3), alpha=0.05, beta=0.10)
print(names(result))
##result <- glrSearch(p=c(.5, 2/3), alpha=0.05, beta=0.10, gridIt=TRUE)
##print(result$alphaTable)
##print(result$betaTable)
# }
Run the code above in your browser using DataLab