Estimates the main effect of every factor in a Plackett-Burman (or any
two-level orthogonal) design on a response such as accuracy, agreement
with the reference, or the mean parsed value, and judges which effects
are active with Lenth's pseudo standard error, which needs no replicate
runs. Effects beyond the margin of error (ME) are flagged as active;
effects beyond the simultaneous margin (SME) are flagged as simultaneously
active. Lenth's ME and SME are conservative: with normal noise and all
effects zero, actual false alarm rates per effect (ME) and per experiment
(SME) are below the nominal alpha.
Arguments
- design
A
pb_design(or a data.frame with coded-1/+1columns named infactors).- response
Numeric response, one value per run, in the row order of
design.- factors
Factor columns to analyse; default: all coded columns.
- alpha
Nominal significance level for ME and SME.
- transform
Either
"none"(default) or"logit". The latter requires a real numeric vector of finite proportions strictly between 0 and 1 and applieslog(p / (1 - p))before estimating effects. No boundary correction is applied. Proportions of exactly 0 or 1 require a prior correction, such as computing an empirical logit and passing those logits withtransform = "none".
Value
An object of class msa_robustness: a data.frame of effects
(effect = mean at high level minus mean at low level, t_lenth =
effect / PSE, active flag) with attributes pse, me, sme,
plus the response summary. With transform = "logit", effects, PSE, ME,
SME and the attributes response_mean and response_sd are on the
logit scale.
If design carries a seed attribute it is copied unchanged to the
result for reporting. Otherwise no seed provenance is claimed.
References
Lenth, R. V. (1989). Quick and easy analysis of unreplicated factorials. Technometrics 31, 469-473.
Daniel, C. (1959). Use of half-normal plots in interpreting factorial two-level experiments. Technometrics 1, 311-341.
Examples
d <- pb_design(list(format = c("plain", "sci"), units = c("nM", "ng/mL"),
typos = c(0, 2), context = c("none", "extra"),
system = c("A", "B"), temp = c(0, 0.7)), seed = 1)
set.seed(7)
acc <- 0.9 - 0.08 * (d$typos > 0) - 0.05 * (d$temp > 0) + rnorm(nrow(d), 0, 0.01)
msa_robustness(d, acc)
#> Robustness screening: 8 runs, 6 factors; response mean 0.8334 (sd 0.0532)
#> Lenth PSE 0.0100, ME 0.0432, SME 0.1081 (alpha = 0.05)
#> factor effect t_lenth active active_simultaneous
#> typos -0.0770 -7.67 TRUE FALSE
#> temp -0.0602 -6.00 TRUE FALSE
#> units 0.0158 1.57 FALSE FALSE
#> format 0.0076 0.76 FALSE FALSE
#> context -0.0058 -0.58 FALSE FALSE
#> system 0.0034 0.34 FALSE FALSE
#> active factors (|effect| > ME): typos (above ME only), temp (above ME only)