Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.height = 4,
fig.width = 8
)
library(safestats)
## -----------------------------------------------------------------------------
ya <- c(1,1,1,1,1,1,0,1,1,1)
yb <- c(0,0,1,0,1,0,0,0,0,0)
## ---- echo = FALSE------------------------------------------------------------
set.seed(1082021)
# balancedSafeDesign <- designSafeTwoProportions(
# na = 1,
# nb = 1,
# alpha = 0.05, #significance level for testing
# beta = 1 - 0.8, #power 80% equals type II error (beta) of 0.2
# delta = 0.3
# )
# save(balancedSafeDesign, file="safe2x2VignetteData/safe2x2DesignObject.Rdata")
load("safe2x2VignetteData/safe2x2DesignObject.Rdata")
## ---- eval=FALSE--------------------------------------------------------------
# balancedSafeDesign <- designSafeTwoProportions(
# na = 1,
# nb = 1,
# alpha = 0.05, #significance level for testing
# beta = 1 - 0.8, #power 80% equals type II error (beta) of 0.2
# delta = 0.3
# )
## -----------------------------------------------------------------------------
print(balancedSafeDesign)
## -----------------------------------------------------------------------------
set.seed(19012022)
successProbabilityA <- 0.2
successProbabilityB <- 0.5
ya <- rbinom(n = balancedSafeDesign[["nPlan"]]["nBlocksPlan"], size = 1, prob = successProbabilityA)
yb <- rbinom(n = balancedSafeDesign[["nPlan"]]["nBlocksPlan"], size = 1, prob = successProbabilityB)
graphics::plot(x = seq_along(ya), y = cumsum(ya), type = "p", ylim = c(0, max(c(sum(ya), sum(yb)))),
xlab = "block number", ylab = "# successes",
main = "Total # successes per group over time")
graphics::points(x = seq_along(yb), y = cumsum(yb), type = "p", col = "grey")
graphics::legend(x = "topleft", legend = c("A", "B"), col = c("black", "grey"), pch = 1)
## -----------------------------------------------------------------------------
safe.prop.test(ya = ya, yb = yb, designObj = balancedSafeDesign)
## ---- echo = FALSE------------------------------------------------------------
# #make the plot voor standard parameter settings
# standardPrior <- list(betaA1 = 0.18,
# betaA2 = 0.18,
# betaB1 = 0.18,
# betaB2 = 0.18)
# #set a seed for the simulations
# set.seed(1082021)
# sampleSizePerMinimalDifference <- simulateTwoProportions(list(standard = standardPrior),
# alternativeRestriction = "none",
# alpha = 0.05,
# beta = 0.2,
# na = 1,
# nb = 1,
# deltamin = 0.3,
# deltamax = 0.9
# )
# save(sampleSizePerMinimalDifference, file = "safe2x2VignetteData/safe2x2SimObject.Rdata")
load("safe2x2VignetteData/safe2x2SimObject.Rdata")
## ---- eval = FALSE------------------------------------------------------------
# #make the plot voor standard parameter settings
# standardPrior <- list(betaA1 = 0.18,
# betaA2 = 0.18,
# betaB1 = 0.18,
# betaB2 = 0.18)
# #set a seed for the simulations
# set.seed(1082021)
# sampleSizePerMinimalDifference <- simulateTwoProportions(list(standard = standardPrior),
# alternativeRestriction = "none",
# alpha = 0.05,
# beta = 0.2,
# na = 1,
# nb = 1,
# deltamin = 0.3,
# deltamax = 0.9
# )
## ---- echo = FALSE------------------------------------------------------------
someIndex <- max(which(sampleSizePerMinimalDifference$simdata$worstCaseQuantile <= 50))
minDetectableEffect <- round(sampleSizePerMinimalDifference$simdata$delta[someIndex], 2)
## -----------------------------------------------------------------------------
graphics::plot(sampleSizePerMinimalDifference)
## ---- echo = FALSE------------------------------------------------------------
# unbalancedSafeDesign <- designSafeTwoProportions(
# na = 2,
# nb = 1,
# alpha = 0.05,
# beta = 0.2,
# delta = 0.3
# )
# save(unbalancedSafeDesign, file = "safe2x2VignetteData/safe2x2UnbalancedDesignObject.Rdata")
load("safe2x2VignetteData/safe2x2UnbalancedDesignObject.Rdata")
## ---- eval = FALSE------------------------------------------------------------
# unbalancedSafeDesign <- designSafeTwoProportions(
# na = 2,
# nb = 1,
# alpha = 0.05,
# beta = 0.2,
# delta = 0.3
# )
## -----------------------------------------------------------------------------
set.seed(692021)
yaUnbalanced <- rbinom(n = unbalancedSafeDesign[["nPlan"]]["nBlocksPlan"], size = 2, prob = successProbabilityA)
ybUnbalanced <- rbinom(n = unbalancedSafeDesign[["nPlan"]]["nBlocksPlan"], size = 1, prob = successProbabilityB)
print(yaUnbalanced)
print(ybUnbalanced)
## -----------------------------------------------------------------------------
safeTwoProportionsTest(ya = yaUnbalanced, yb = ybUnbalanced, designObj = unbalancedSafeDesign)
## -----------------------------------------------------------------------------
print(unbalancedSafeDesign)
## ---- echo = FALSE------------------------------------------------------------
# #make the plot voor standard parameter settings
# standardPrior <- unbalancedSafeDesign[["betaPriorParameterValues"]]
# uniformLikePrior <- list(betaA1 = 2, # pretend we "have seen" 2 success and
# betaA2 = 2,# 2 failure in group A before starting
# betaB1 = 1, # and 1 success and failure in group B
# betaB2 = 1)
# #set a seed for the simulations
# set.seed(1082021)
# sampleSizePerMinimalDifference <- simulateTwoProportions(
# hyperparameterList = list(standard = standardPrior, uniform = uniformLikePrior),
# alternativeRestriction = "none",
# alpha = 0.05,
# beta = 0.2,
# na = 2,
# nb = 1,
# deltamin = 0.3,
# deltamax = 0.9
# )
# save(sampleSizePerMinimalDifference, file = "safe2x2VignetteData/safe2x2UnbalancedSimObject.Rdata")
load("safe2x2VignetteData/safe2x2UnbalancedSimObject.Rdata")
## ---- eval = FALSE------------------------------------------------------------
# #make the plot voor standard parameter settings
# standardPrior <- unbalancedSafeDesign[["betaPriorParameterValues"]]
# uniformLikePrior <- list(betaA1 = 2, # pretend we "have seen" 2 success and
# betaA2 = 2,# 2 failure in group A before starting
# betaB1 = 1, # and 1 success and failure in group B
# betaB2 = 1)
# #set a seed for the simulations
# set.seed(1082021)
# sampleSizePerMinimalDifference <- simulateTwoProportions(
# hyperparameterList = list(standard = standardPrior, uniform = uniformLikePrior),
# alternativeRestriction = "none",
# alpha = 0.05,
# beta = 0.2,
# na = 2,
# nb = 1,
# deltamin = 0.3,
# deltamax = 0.9
# )
## -----------------------------------------------------------------------------
graphics::plot(sampleSizePerMinimalDifference)
## ---- echo = FALSE------------------------------------------------------------
# differenceRestrictedSafeDesign <- designSafeTwoProportions(
# na = 1,
# nb = 1,
# alpha = 0.05, #significance level for testing
# beta = 1 - 0.8, #power 80% equals type II error (beta) of 0.2
# delta = 0.3,
# alternativeRestriction = "difference" #also available: logOddsRatio
# )
# save(differenceRestrictedSafeDesign, file = "safe2x2VignetteData/safe2x2DiffRestrictedDesign.Rdata")
load("safe2x2VignetteData/safe2x2DiffRestrictedDesign.Rdata")
## ---- eval = FALSE------------------------------------------------------------
# differenceRestrictedSafeDesign <- designSafeTwoProportions(
# na = 1,
# nb = 1,
# alpha = 0.05, #significance level for testing
# beta = 1 - 0.8, #power 80% equals type II error (beta) of 0.2
# delta = 0.3,
# alternativeRestriction = "difference" #also available: logOddsRatio
# )
## -----------------------------------------------------------------------------
safe.prop.test(ya = ya, yb = yb, designObj = differenceRestrictedSafeDesign)
## -----------------------------------------------------------------------------
#set a seed for the simulations
set.seed(1082021)
optionalStoppingResult <- simulateOptionalStoppingScenarioTwoProportions(
safeDesign = balancedSafeDesign,
M = 1e3,
thetaA = 0.2,
thetaB = 0.5
)
## -----------------------------------------------------------------------------
plotHistogramDistributionStoppingTimes(safeSim = optionalStoppingResult,
nPlan = balancedSafeDesign[["nPlan"]]["nBlocksPlan"],
deltaTrue = 0.3)
## -----------------------------------------------------------------------------
optionalStoppingResult[["powerOptioStop"]]
## -----------------------------------------------------------------------------
#set a seed for the simulations
set.seed(1082021)
optionalStoppingResultTrueDifferenceBigger <-
simulateOptionalStoppingScenarioTwoProportions(
safeDesign = balancedSafeDesign,
M = 1e3,
thetaA = 0.2,
thetaB = 0.7
)
## -----------------------------------------------------------------------------
plotHistogramDistributionStoppingTimes(safeSim = optionalStoppingResultTrueDifferenceBigger,
nPlan = balancedSafeDesign[["nPlan"]]["nBlocksPlan"],
deltaTrue = 0.5)
## -----------------------------------------------------------------------------
optionalStoppingResultTrueDifferenceBigger[["powerOptioStop"]]
## -----------------------------------------------------------------------------
#set a seed for the simulations
set.seed(1082021)
optionalStoppingResultTrueDifferenceNull <- simulateOptionalStoppingScenarioTwoProportions(safeDesign = balancedSafeDesign,
M = 1e3,
thetaA = 0.5,
thetaB = 0.5)
## -----------------------------------------------------------------------------
plotHistogramDistributionStoppingTimes(safeSim = optionalStoppingResultTrueDifferenceNull,
nPlan = balancedSafeDesign[["nPlan"]]["nBlocksPlan"],
deltaTrue = 0)
## -----------------------------------------------------------------------------
optionalStoppingResultTrueDifferenceNull[["powerOptioStop"]]
## ---- echo = FALSE------------------------------------------------------------
# optionalStoppingWrongFisher <- simulateIncorrectStoppingTimesFisher(thetaA = 0.5,
# thetaB = 0.5,
# alpha = 0.05,
# na = balancedSafeDesign[["nPlan"]][["na"]],
# nb = balancedSafeDesign[["nPlan"]][["nb"]],
# maxSimStoptime = balancedSafeDesign[["nPlan"]][["nBlocksPlan"]],
# M = 1e3,
# numberForSeed = 1082021)
# save(optionalStoppingWrongFisher, file = "safe2x2VignetteData/safe2x2SimFisher.Rdata")
load("safe2x2VignetteData/safe2x2SimFisher.Rdata")
## ---- eval = FALSE------------------------------------------------------------
# optionalStoppingWrongFisher <-
# simulateIncorrectStoppingTimesFisher(
# thetaA = 0.5,
# thetaB = 0.5,
# alpha = 0.05,
# na = balancedSafeDesign[["nPlan"]][["na"]],
# nb = balancedSafeDesign[["nPlan"]][["nb"]],
# maxSimStoptime = balancedSafeDesign[["nPlan"]][["nBlocksPlan"]],
# M = 1e3,
# numberForSeed = 1082021
# )
## -----------------------------------------------------------------------------
mean(optionalStoppingWrongFisher[["rejections"]] == 1)
## -----------------------------------------------------------------------------
eValuesNotRejected <-
optionalStoppingResult[["eValues"]][!optionalStoppingResult[["allSafeDecisions"]]]
eValuesNotRejectedNull <-
optionalStoppingResultTrueDifferenceNull[["eValues"]][!optionalStoppingResultTrueDifferenceNull[["allSafeDecisions"]]]
## ---- echo = FALSE------------------------------------------------------------
trueHist <- graphics::hist(x = eValuesNotRejected, plot = FALSE)
nullHist <- graphics::hist(x = eValuesNotRejectedNull, plot = FALSE)
oldPar <- graphics::par(cex.main=1.5, mar=c(5, 6, 4, 4)+0.1, mgp=c(3.5, 1, 0), cex.lab=1.5,
font.lab=2, cex.axis=1.3, bty="n", las=1)
graphics::plot(nullHist, xlim = c(0, max(eValuesNotRejected, eValuesNotRejectedNull)),
freq = FALSE, col = "blue", density = 20, angle = 45, xlab = "e-values",
main = "Histogram of e-values where null not rejected")
graphics::plot(trueHist, add = TRUE, freq = FALSE, col = "red", density = 20,
angle = -45)
graphics::legend(x = "topright", legend = c("True delta: null", "True delta: design"), fill = c("blue", "red"))
par(oldPar)
## -----------------------------------------------------------------------------
promisingEValues <- eValuesNotRejected[eValuesNotRejected >= 10]
followUpDesign <- designSafeTwoProportions(na = 1, nb = 1, nBlocksPlan = 30)
followUpResults <- simulateOptionalStoppingScenarioTwoProportions(followUpDesign,
M = length(promisingEValues),
thetaA = 0.2, thetaB = 0.5)
newEValues <- followUpResults[["eValues"]] * promisingEValues
## ---- echo = FALSE, cache = FALSE---------------------------------------------
trueHist <- graphics::hist(x = newEValues, plot = FALSE)
oldPar <- graphics::par(cex.main=1.5, mar=c(5, 6, 4, 4)+0.1, mgp=c(3.5, 1, 0), cex.lab=1.5,
font.lab=2, cex.axis=1.3, bty="n", las=1)
graphics::plot(trueHist, xlim = c(0, max(newEValues)),
freq = FALSE, col = "blue", density = 20, angle = 45, xlab = "e-values",
main = "Histogram of e-values after continuing data collection")
par(oldPar)
## ---- cache = FALSE-----------------------------------------------------------
sum(newEValues >= 20)/length(promisingEValues)
## -----------------------------------------------------------------------------
promisingEValuesNull <-
eValuesNotRejectedNull[eValuesNotRejectedNull >= 1]
followUpDesign <-
designSafeTwoProportions(na = 1,
nb = 1,
nBlocksPlan = 30)
followUpResults <-
simulateOptionalStoppingScenarioTwoProportions(
followUpDesign,
M = length(promisingEValuesNull),
thetaA = 0.5,
thetaB = 0.5
)
newEValuesNull <-
followUpResults[["eValues"]] * promisingEValuesNull
## ---- echo = FALSE, cache = FALSE---------------------------------------------
nullHist <- graphics::hist(x = newEValuesNull, plot = FALSE)
oldPar <- graphics::par(cex.main=1.5, mar=c(5, 6, 4, 4)+0.1, mgp=c(3.5, 1, 0), cex.lab=1.5,
font.lab=2, cex.axis=1.3, bty="n", las=1)
graphics::plot(nullHist, xlim = c(0, max(newEValuesNull)),
freq = FALSE, col = "blue", density = 20, angle = 45, xlab = "e-values",
main = "Histogram of e-values after continuing data collection under the null")
par(oldPar)
## ---- eval = FALSE------------------------------------------------------------
# plotConfidenceSequenceTwoProportions(ya = ya,
# yb = yb,
# safeDesign = balancedSafeDesign,
# differenceMeasure = "difference",
# precision = 100,
# trueDifference = 0.3)
## ---- echo = FALSE------------------------------------------------------------
# coverageSimResult <- simulateCoverageDifferenceTwoProportions(successProbabilityA = 0.2,
# trueDelta = 0.3,
# safeDesign = balancedSafeDesign,
# numberForSeed = 1082021)
# save(coverageSimResult, file = "safe2x2VignetteData/safe2x2Coverage.Rdata")
load("safe2x2VignetteData/safe2x2Coverage.Rdata")
## ---- eval = FALSE------------------------------------------------------------
# coverageSimResult <- simulateCoverageDifferenceTwoProportions(successProbabilityA = 0.2,
# trueDelta = 0.3,
# safeDesign = balancedSafeDesign,
# numberForSeed = 1082021)
## -----------------------------------------------------------------------------
print(coverageSimResult)
## -----------------------------------------------------------------------------
log(0.5/0.5 * 0.8/0.2)
## ---- echo = FALSE------------------------------------------------------------
# confidenceBoundOdds <- computeConfidenceBoundForLogOddsTwoProportions(ya = ya,
# yb = yb,
# safeDesign = balancedSafeDesign,
# bound = "lower",
# precision = 100,
# deltaStart = 0.001,
# deltaStop = 2)
# save(confidenceBoundOdds, file = "safe2x2VignetteData/safe2x2ConfidenceOdds.Rdata")
load("safe2x2VignetteData/safe2x2ConfidenceOdds.Rdata")
## ---- eval = FALSE------------------------------------------------------------
# confidenceBoundOdds <- computeConfidenceBoundForLogOddsTwoProportions(ya = ya,
# yb = yb,
# safeDesign = balancedSafeDesign,
# bound = "lower",
# precision = 100,
# deltaStart = 0.001,
# deltaStop = 2)
## -----------------------------------------------------------------------------
print(confidenceBoundOdds)
## -----------------------------------------------------------------------------
computeConfidenceBoundForLogOddsTwoProportions(ya = ya,
yb = yb,
safeDesign = balancedSafeDesign,
bound = "upper",
precision = 10,
deltaStart = -0.01,
deltaStop = -2)
## ---- eval = FALSE------------------------------------------------------------
# plotConfidenceSequenceTwoProportions(ya = ya,
# yb = yb,
# safeDesign = balancedSafeDesign,
# differenceMeasure = "odds",
# precision = 100,
# trueDifference = log(0.5/0.5 * 0.8/0.2),
# deltaStart = 0.001,
# deltaStop = 2)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.