The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The AccSamplingDesign package provides tools for designing and evaluating Acceptance Sampling plans for quality control in manufacturing and inspection settings. It supports both attributes and variables sampling methods with a focus on minimizing producer’s and consumer’s risks.
Install the stable release from CRAN:
Or install from GitHub
Load package
summary(plan_attr)
#> Attributes Acceptance Sampling Plan
#> -----------------------------------
#> Distribution: binomial
#> Sample Size (n): 132
#> Acceptance Number (c): 3
#> Producer's Risk (PR = 0.04425251 ) at PRQ = 0.01
#> Consumer's Risk (CR = 0.0992283 ) at CRQ = 0.05
#> ----------------------------------
norm_plan <- optVarPlan(
PRQ = 0.025, # Acceptable quality level (% nonconforming)
CRQ = 0.1, # Rejectable quality level (% nonconforming)
alpha = 0.05, # Producer's risk
beta = 0.1, # Consumer's risk
distribution = "normal",
sigma_type = "known"
)
summary(norm_plan)
#> Variables Acceptance Sampling Plan
#> ----------------------------------
#> Distribution: normal
#> Sample Size (n): 19
#> Acceptance Limit (k): 1.579
#> Population Standard Deviation: known
#> Producer's Risk (PR = 0.05 ) at PRQ = 0.025
#> Consumer's Risk (CR = 0.1 ) at CRQ = 0.1
#> ----------------------------------
# Generate OC curve data
oc_data_normal <- OCdata(norm_plan)
# show data of Proportion Nonconforming (x_p) vs Probability Acceptance (y)
#head(oc_data_normal, 15)
plot(norm_plan)
p1 = 0.005
p2 = 0.03
alpha = 0.05
beta = 0.1
# known sigma plan
plan1 <- optVarPlan(
PRQ = p1, # Acceptable quality level (% nonconforming)
CRQ = p2, # Rejectable quality level (% nonconforming)
alpha = alpha, # Producer's risk
beta = beta, # Consumer's risk
distribution = "normal",
sigma_type = "know")
summary(plan1)
#> Variables Acceptance Sampling Plan
#> ----------------------------------
#> Distribution: normal
#> Sample Size (n): 18
#> Acceptance Limit (k): 2.185
#> Population Standard Deviation: known
#> Producer's Risk (PR = 0.05 ) at PRQ = 0.005
#> Consumer's Risk (CR = 0.1 ) at CRQ = 0.03
#> ----------------------------------
plot(plan1)
# unknown sigma plan
plan2 <- optVarPlan(
PRQ = p1, # Acceptable quality level (% nonconforming)
CRQ = p2, # Rejectable quality level (% nonconforming)
alpha = alpha, # Producer's risk
beta = beta, # Consumer's risk
distribution = "normal",
sigma_type = "unknow")
summary(plan2)
#> Variables Acceptance Sampling Plan
#> ----------------------------------
#> Distribution: normal
#> Sample Size (n): 62
#> Acceptance Limit (k): 2.192
#> Population Standard Deviation: unknown
#> Producer's Risk (PR = 0.05 ) at PRQ = 0.005
#> Consumer's Risk (CR = 0.1 ) at CRQ = 0.03
#> ----------------------------------
plot(plan2)
# Generate OC curve data
oc_data1 <- OCdata(plan1)
oc_data2 <- OCdata(plan2)
# Plot the first OC curve (solid red line)
plot(oc_data1@pd, oc_data1@paccept, type = "l", col = "red", lwd = 2,
main = "Operating Characteristic (OC) Curve",
xlab = "Proportion Nonconforming",
ylab = "P(accept)")
# Add the second OC curve (dashed blue line)
lines(oc_data2@pd, oc_data2@paccept, col = "blue", lwd = 2, lty = 2)
abline(v = c(p1, p2), lty = 1, col = "gray")
abline(h = c(1 - alpha, beta), lty = 1, col = "gray")
legend1 = paste0("Known Sigma (n=", plan1$sample_size, ", k=", plan1$k, ")")
legend2 = paste0("Unknown Sigma (n=", plan2$sample_size, ", k=", plan2$k, ")")
# Add a legend to distinguish the two curves
legend("topright", legend = c(legend1, legend2),
col = c("red", "blue"), lwd = 2, lty = c(1, 2))
# Add a grid
grid()
beta_plan <- optVarPlan(
PRQ = 0.05, # Target quality level (% nonconforming)
CRQ = 0.2, # Minimum quality level (% nonconforming)
alpha = 0.05, # Producer's risk
beta = 0.1, # Consumer's risk
distribution = "beta",
theta = 44000000,
theta_type = "known",
LSL = 0.00001
)
summary(beta_plan)
#> Variables Acceptance Sampling Plan
#> ----------------------------------
#> Distribution: beta
#> Sample Size (n): 14
#> Acceptance Limit (k): 1.186
#> Population Precision Parameter (theta): known
#> Producer's Risk (PR = 0.04999926 ) at PRQ = 0.05
#> Consumer's Risk (CR = 0.09976476 ) at CRQ = 0.2
#> Lower Specification Limit: 1e-05
#> ----------------------------------
# Plot OC use plot function
plot(beta_plan)
# Generate OC data
p_seq <- seq(0.005, 0.5, by = 0.005)
oc_data <- OCdata(beta_plan, pd = p_seq)
#head(oc_data)
# plot use S3 method
plot(oc_data)
# Plot the OC curve with Mean Level (x_m) and Probability of Acceptance (y)
plot(oc_data@pd, oc_data@paccept, type = "l", col = "blue", lwd = 2,
main = "OC Curve by the mean levels (plot by data)", xlab = "Mean Levels",
ylab = "P(accept)")
grid()
p1 = 0.005
p2 = 0.03
alpha = 0.05
beta = 0.1
spec_limit = 0.05 # use for Beta distribution
theta = 500
# My package for beta plan
beta_plan1 <- optVarPlan(
PRQ = p1, # Target quality level (% nonconforming)
CRQ = p2, # Minimum quality level (% nonconforming)
alpha = alpha, # Producer's risk
beta = beta, # Consumer's risk
distribution = "beta",
theta = theta,
theta_type = "known",
USL = spec_limit
)
summary(beta_plan1)
#> Variables Acceptance Sampling Plan
#> ----------------------------------
#> Distribution: beta
#> Sample Size (n): 16
#> Acceptance Limit (k): 2.484
#> Population Precision Parameter (theta): known
#> Producer's Risk (PR = 0.04999959 ) at PRQ = 0.005
#> Consumer's Risk (CR = 0.09980403 ) at CRQ = 0.03
#> Uper Specification Limit: 0.05
#> ----------------------------------
beta_plan2 <- optVarPlan(
PRQ = p1, # Target quality level (% nonconforming)
CRQ = p2, # Minimum quality level (% nonconforming)
alpha = alpha, # Producer's risk
beta = beta, # Consumer's risk
distribution = "beta",
theta = theta,
theta_type = "unknown",
USL = spec_limit
)
summary(beta_plan2)
#> Variables Acceptance Sampling Plan
#> ----------------------------------
#> Distribution: beta
#> Sample Size (n): 66
#> Acceptance Limit (k): 2.484
#> Population Precision Parameter (theta): unknown
#> Producer's Risk (PR = 0.04653701 ) at PRQ = 0.005
#> Consumer's Risk (CR = 0.09489874 ) at CRQ = 0.03
#> Uper Specification Limit: 0.05
#> ----------------------------------
# Generate OC curve data
oc_beta_data1 <- OCdata(beta_plan1)
oc_beta_data2 <- OCdata(beta_plan2)
# Plot the first OC curve (solid red line)
plot(oc_beta_data1@pd, oc_beta_data1@paccept, type = "l", col = "red", lwd = 2,
main = "Operating Characteristic (OC) Curve",
xlab = "Proportion Nonconforming",
ylab = "P(accept)")
# Add the second OC curve (dashed blue line)
lines(oc_beta_data2@pd, oc_beta_data2@paccept, col = "blue", lwd = 2, lty = 2)
abline(v = c(p1, p2), lty = 1, col = "gray")
abline(h = c(1 - alpha, beta), lty = 1, col = "gray")
legend1 = paste0("Known Theta (n=", beta_plan1$sample_size, ", k=", beta_plan1$k, ")")
legend2 = paste0("Unknown Theta (n=", beta_plan2$sample_size, ", k=", beta_plan2$k, ")")
# Add a legend to distinguish the two curves
legend("topright", legend = c(legend1, legend2),
col = c("red", "blue"), lwd = 2, lty = c(1, 2))
# Add a grid
grid()
The Probability of Acceptance (\(Pa\)) is given by: \[Pa(p) = \sum_{i=0}^c
\binom{n}{i}p^i(1-p)^{n-i}\]
where:
The Probability of Acceptance (\(Pa\)) is given by:
\[ Pa(p) = \Phi\left( -\sqrt{n_{\sigma}} \cdot (\Phi^{-1}(p) + k_{\sigma}) \right) \]
Or we could write:
\[ Pa(p) = 1 - \Phi\left( \sqrt{n_{\sigma}} \cdot (\Phi^{-1}(p) + k_{\sigma}) \right) \]
where:
The required sample size (\(n_{\sigma}\)) and acceptance constant (\(k_{\sigma}\)) are: \[ n_{\sigma} = \left( \frac{\Phi^{-1}(1 - \alpha) + \Phi^{-1}(1 - \beta)}{\Phi^{-1}(1 - PRQ) - \Phi^{-1}(1 - CRQ)} \right)^2 \]
\[ k_{\sigma} = \frac{\Phi^{-1}(1 - PRQ) \cdot \Phi^{-1}(1 - \beta) + \Phi^{-1}(1 - CRQ) \cdot \Phi^{-1}(1 - \alpha)}{\Phi^{-1}(1 - \alpha) + \Phi^{-1}(1 - \beta)} \] where:
The formula for the probability of acceptance (\(Pa\)) is:
\[ Pa(p) = \Phi \left( \sqrt{\frac{n_s}{1 + \frac{k_s^2}{2}}} \left( \Phi^{-1}(1 - p) - k_s \right) \right) \]
where:
\(k_s = k_{\sigma}\) is the acceptance constant.
\(n_s\): This is the adjusted sample size when the sample standard deviation \(s\) (instead of population \(\sigma\)) is used for estimation. It accounts for the additional variability due to estimation:
\[ n_s = n_{\sigma} \times \left( 1 + \frac{k_s^2}{2} \right) \]
(See Wilrich, PT. (2004) for more detail about calculation used in sessions 6.2 and 6.3)
Traditional acceptance sampling using normal distributions can be inadequate for compositional data bounded within [0,1]. Govindaraju and Kissling (2015) proposed Beta-based plans, where component proportions (e.g., protein content) follow \(X \sim \text{Beta}(a, b)\), with density:
\[ f(x; a, b) = \frac{x^{a-1} (1 - x)^{b-1}}{B(a, b)}, \]
where \(B(a, b)\) is the Beta function. The distribution is reparameterized via mean \(\mu\) and precision \(\theta\):
\[ \mu = \frac{a}{a + b}, \quad \theta = a + b, \quad \sigma^2 \approx \frac{\mu(1 - \mu)}{\theta} \quad (\text{for large } \theta). \]
Higher \(\theta\) reduces variance, concentrating values around \(\mu\). The probability of acceptance (\(Pa\)) parallels normal-based plans:
\[ Pa = P(\mu - k \sigma \geq L \mid \mu, \theta, m, k), \]
where \(L\) is the lower specification limit, \(m\) is the sample size, and \(k\) is the acceptability constant. Parameters \(m\) and \(k\) ensure:
\[ Pa(\mu_{PRQ}) = 1 - \alpha, \quad Pa(\mu_{CRQ}) = \beta, \]
with \(\alpha\) (producer’s risk) and \(\beta\) (consumer’s risk) at specified quality levels (PRQ/CRQ).
Note that: this problem is solved to find \(m\) and \(k\) used Non-linear programming and Monte Carlo simulation.
For a nonconforming proportion \(p\) (e.g.,PRQ or CRQ), the mean \(\mu\) at a quality level (PRQ/CRQ) is derived by solving:
\[ P(X \leq L \mid \mu, \theta) = p, \]
where \(X \sim \text{Beta}(\theta \mu, \theta (1 - \mu))\). This links \(\mu\) to \(p\) via the Beta cumulative distribution function (CDF) at \(L\).
For a beta distribution, the required sample size \(m_s\) (unknown \(\theta\)) is derived from the known-\(\theta\) sample size \(m_\theta\) using the formula:
\[
m_s = \left(1 + 0.5k^2\right)m_\theta
\]
where \(k\) is unchanged. This
adjustment accounts for the variance ratio \(R
= \frac{\text{Var}(S)}{\text{Var}(\hat{\mu})}\), which quantifies
the relative variability of the sample standard deviation \(S\) compared to the estimator \(\hat{\mu}\). Unlike the normal
distribution, where \(\text{Var}(S) \approx
\frac{\sigma^2}{2n}\), for beta distribution’s, the ratio \(R\) depends on \(\mu\), \(\theta\), and sample size \(m\). The conservative factor \(0.5k^2\) approximates this ratio for
practical use.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.