Rejection rate for dual acceptance criteria based via simulation
Source:R/power-sim.R
power_sim_dual.Rd
Performs Monte Carlo simulation to determine the rejection rate of a dual acceptance criteria (based on sample minimum and mean). By specifying several sets of parameters for the "equivalency" distribution, a power curve for the acceptance test can be determined.
Usage
power_sim_dual(
n_qual,
m_equiv,
replicates,
distribution = "rnorm",
param_qual,
param_equiv,
k1,
k2
)
Arguments
- n_qual
the sample size of the qualification sample
- m_equiv
the sample size of the equivalency/acceptance sample
- replicates
the number of simulated qualification samples and equivalency samples. If a single value is given, the same numbers used for both, if a vector of length two is given, the first element is the number of qualification replicates and the second element is the number of equivalency replicates.
- distribution
a function name for generating a random sample (defaults to "rnorm")
- param_qual
a data.frame (must be single row) with columns matching the arguments of the distribution function
- param_equiv
a data.frame with columns matching the arguments of the distribution function. The simulation is repeated with the parameters specified in each row of the data.frame.
- k1
a factor for determining the acceptance criterion for sample minimum, which is calculated as
mean_qual - k1 * sd_qual
- k2
a factor for determining the acceptance criterion for sample average, which is calculated as
mean_qual - k2 * sd_qual
Value
A data.frame
. The first column(s) are duplicate of the data.frame
passed in the argument param_equiv
. The last column is named
Rejection Rate
and has a value equal to the number of samples rejected
for each simulation run.
Details
This function performs simulation to estimate the performance of the dual acceptance criteria commonly used for composite materials in aerospace applications. These criteria are based on setting lower limits on the minimum individual (lower extremum) and the mean of an "acceptance" sample. These limits are computed based on the sample mean and sample standard deviation of an initial "qualification" sample. The criteria are intended to be a test of non-inferiority to determine if the material lots from which the "acceptance" samples are drawn should be accepted for production. Another common use of these criteria are to determine if a process change, equipment change, or second manufacturing site is acceptable for production.
For each set of distribution parameters given by the rows of param_equiv
,
a number of samples of size m_equiv
are generated using the function
distribution
. Next, a number of qualification samples of size n_qual
are generated
using the distribution
function and the parameters given in param_qual
.
Limits for minimum and average are determined for each qualification
sample. Each equivalency sample is compared with the limits determined
from each qualification sample. The number of replicate in this simulation
is given by replicates
: if this is a vector of length two, the first
element is the number of qualification samples and the second is the number
of equivalency samples; if replicates
is a single value, the same number
is used for the number of qualification samples and acceptance samples.
Therefore, for each row of param_equiv
a total of
replicates[1] * replicates[2]
criteria are evaluated.
The argument distribution
must correspond with a function that generates
(pseudo) random numbers. This function must have an argument n
that
specifies the sample size to be generated. When the argument distribution
matches certain common distribution functions (such as rnorm
), the C++
implementation of the random number generation function is used instead of
calling R code, which results in a significant speedup.
Examples
# Compute a power curve for a dual acceptance criteria for a qualification
# sample size of 18 and an equivalency sample size of 6, using 2000
# replicates. A standard normal distribution is used and the power to
# detect a decrease in mean is determined.
set.seed(12345) # make it reproducible
power_sim_dual(
18, 6,
2000,
"rnorm",
data.frame(mean = 0, sd = 1),
data.frame(mean = c(-2, -1.5, -1, 0.5, 0), sd = 1),
2.959, 0.954
)
#> mean sd Rejection Rate
#> 1 -2.0 1 0.98349975
#> 2 -1.5 1 0.88186900
#> 3 -1.0 1 0.56382425
#> 4 0.5 1 0.00864025
#> 5 0.0 1 0.04826250
## mean sd Rejection Rate
## 1 -2.0 1 0.98349975
## 2 -1.5 1 0.88186900
## 3 -1.0 1 0.56382425
## 4 0.5 1 0.00864025
## 5 0.0 1 0.04826250