Repository navigation
v2.0.0
Added
-
Factorial makes Taguchi orthogonal arrays. A new design type takes 2 to 12 numeric or
two-level categorical factors and makes the smallest standard array with a column for each, as
generate_design(design_type="taguchi")chooses it: the L4, L8, L12 or L16 with every numeric
factor at two levels or, with the new levels setting at 3, the L9, L18, L27 or L36 with each
numeric factor at its low, centre and high values and each categorical factor at its two labels.
The design's facts name the array ("Taguchi L12 (2^11): 12 runs, main effects"). A two-level
array is analysed for its main effects and a three-level one for the main effects and each
numeric factor's square, and Learn says once that the interactions are aliased with them. Plan
compares the array, at three levels for a model with squares, and the Python panels give each
numeric factor its three levels. In the design catalog, the library's L4, L8, L9 and L12 and 13
published arrays now open as the app makes them. -
Factorial measures up to five responses, and finds the settings that balance them. The
brief lists each response in a row of its own, with its units and its goal: maximise, minimise,
hit a target, or learn. The first response sizes the design, so the brief asks its typical value,
noise and smallest change worth finding for it alone. The run sheet and the workbook have a
column per response; a run is complete once every response has its result, and each response is
fitted to the runs that have its result. Practice results come from one process per response,
each derived from the scenario with its own coefficients and noise. Learn has a tab per response,
each with its own model, analysis and best settings. With two or more responses aimed at a goal,
Learn balances them with the library's desirability (optimize_responses(method="desirability")):
a table of each response's acceptable range, importance and shape to edit, the settings with the
best overall desirability, each response's prediction, 95% prediction interval and desirability
there, the response that holds the overall desirability down most, the leverage there, and an
overlay of where every response is acceptable over the two factors that move them most.
Confirmation runs at the balanced settings are judged response by response. The Python panels
and the notebook reproduce each response's analysis and the balance (api_balance). Studies
saved before, workbooks, links and catalog campaigns open unchanged, as studies of one response. -
Factorial finds the best settings for the response's goal. Once the model is fitted, Learn
says where to run the process to maximise, minimise or hit the target the brief names: the
settings in the factors' own units, each categorical factor at its better level, found on the
fitted model inside the ranges and the limits on the settings withoptimize_responses. Beside
them are the predicted response with its 95% confidence interval for the mean and its 95%
prediction interval for one new run, the leverage there against the runs' (a warning when the
prediction leans on the model beyond the runs), which factors are at an end of their range and
the way a next study could move it along the steepest ascent, the limits the settings are on,
and bars that show how much each factor moves the prediction, so the reader sees which to hold
tightly. The response surface is drawn through the best settings, with a star on them. A button
adds three confirmation runs at the best settings to the run sheet, marked in a column of their
own and never fitted; once their results are in, Learn says whether their average falls inside
the prediction interval for an average of three runs. The "Show the Python code" panel and the
notebook reproduce the search with the library (api_best_settings). -
Small composite designs. A CCD with
cube="fractional"may now sit on a cube below
resolution V. The default half fraction must still leave the full quadratic model estimable,
which it does for three factors (Hartley's small composite design, 4 + 6 runs). A cube given by
generatorsorresolutionthat aliases two-factor interactions in pairs is built with a
warning, for a model with one interaction of each pair.metadata["full_quadratic_estimable"]
andmetadata["aliased_interactions"]say which. The reference catalogue checks Schmidt and
Launsby's composite-design run counts and Núñez Ares and Goos's small composite designs with it. -
Multistratum analysis of variance.
multistratum_anova(runs, model, strata, response=None)
analyses a split-plot, strip-plot or other design with several sizes of unit, as R's
aov(y ~ model + Error(strata))does. The block structure is given as error terms ("rep/plot",
"S:T","row + column"). Each treatment term is estimated in the stratum its contrasts fall in
and tested on that stratum's residual. A term of a design that is not orthogonal, such as the
treatments of an incomplete block design, gets a row in each stratum it falls in. Without a
response it gives the skeleton analysis of variance, the sources and degrees of freedom a layout
will have. The reference catalogue checks 41 more items with it: NIST's three electroplating
split-plot layouts and the implant-anneal strip plot, their degrees of freedom, terms per stratum
and whole-plot units. -
Least-squares means and their multiple comparisons.
least_squares_means(runs, "y ~ treatment + block", factor)gives each level's adjusted mean: the model's prediction averaged with equal
weight over the other factors' levels, as an incomplete block design or a Youden square needs.
Pairs are compared by Tukey's studentized range (Tukey-Kramer), by Dunnett's multivariate t
against a control (Comparisons("dunnett", control=...)), or unadjusted (Fisher's LSD), with adjusted p-values, simultaneous
intervals, connecting letters, and the confidence each interval has alone and the family has
together.at=compares the levels within one level of another factor, on the error of the
whole model, andC(x)in the formula takes a numeric column as levels. The reference catalogue checks 33 more printed numbers with it: Minitab's Tukey
comparisons of Montgomery's catalyst design (its p-values agree; its intervals use a
studentized range point 0.0014 larger than the exact one), Box, Hunter and Hunter's Youden-square
adjusted averages, Dunnett's d0.05(3,16), Fisher's family confidence and JMP's connecting letters. -
Classical tests and percentage points (
process_improve.univariate).f_value,
chi2_value,z_value,studentized_range_valueanddunnett_valuegive the percentage
points of the F, chi-squared, normal, studentized-range and Dunnett distributions, a cumulative
probability first ast_valuetakes it; Dunnett's two-sided and one-sided critical values are
worked by numerical integration and agree with SciPy's multivariate t.ttest_one_sampletests
a mean against a stated value,ztesta mean or a difference of means with the standard
deviation known,rank_sum_testtwo groups by Wilcoxon's rank sum (normal approximation and
exact level),randomization_testtwo groups or pairs against every arrangement of the labels
or signs (sampled, with arandom_state, pastmax_arrangements, and with a mid-p value that
counts ties as half), andautocorrelationa record in time order. The reference catalogue
checks 76 printed numbers with them: the F, chi-squared and Dunnett points of Montgomery's and
Schmidt and Launsby's tables, and the tests of Box, Hunter and Hunter's chapters 2 and 3 and the
PID book's randomization test. Three disagree, each explained (the book's rounded standard
errors, and a table value printed 5.31 for 5.318). -
Random effects (
process_improve.experiments).variance_components(runs, "y ~ operator", random=[...])fits random intercepts ("a","a:b", or"b(a)"for a factor nested in
another) beside the formula's sum-coded fixed factors by REML, and reports the components with their share of the total, standard errors and
intervals (chi-squared for the error variance), the restricted log-likelihood, the fixed
effects with their Satterthwaite F tests, the best linear unbiased predictions of the random
effects, and the R-square JMP reports for a REML fit.bounded=Falselets a component go below
zero, as JMP's unbounded REML does; in a balanced design that gives the analysis-of-variance
estimates.expected_mean_squaresderives the expected mean squares of a balanced crossed or
nested design (a nested factor named as"batch(supplier)") under the restricted or the
unrestricted mixed model, a reduced model's too, with
each term's degrees of freedom and the term that tests it, andintraclass_correlation_interval
gives the exact interval of a one-way random model. The reference catalogue checks 98 more of
Montgomery's numbers with them: JMP's unbounded gauge study (resolving 10 recorded
disagreements), JMP's REML R-squares of seven studies, and Minitab's and Montgomery's
expected-mean-square tables and error terms of the gauge study, the purity and the assembly
experiments. -
Run orders robust to a time trend.
run_order_trendsmeasures how far each term of a
model is confounded with the linear, quadratic and cubic time trends of a run order: the cosine
and angle of each term's column with each trend, their mean and largest by class of term (main
effects, interactions, quadratic effects), the time-count dot products and the number of level
changes.trend_robust_run_ordersearches, by an iterated local search with arandom_state,
for an order whose main effects, and then second-order terms, are orthogonal to the trends of
lowest degree first;time_trendsgives the orthogonal polynomial trends. The reference
catalogue checks 154 printed numbers of Núñez Ares and Goos (2019) with it, every table of
cosines of their run orders; two disagree, each explained (a transposed digit in the text, and
an angle taken from a rounded cosine). -
The canonical forms of a fitted quadratic.
optimize_responses(..., method="canonical_analysis")
now also returns the surface in Box and Draper's B canonical form (b_canonical), the form a ridge is
read in. It is rotated to the eigenvectors, with its origin where the response stops changing across
the ridge and one linear term along it. Where a stationary point exists, it also returns each
canonical variable W = v'(x - x*) (canonical_axes). The reference catalogue checks 26 more items
with these and the existing stationary point and steepest-ascent path: NIST's chemical CCD
(stationary point, eigenvalues, eigenvectors with their signs, canonical axes) and its first-order
steepest-ascent step, an EFI wind-turbine optimum, Montgomery's tool-life maximum and Box, Hunter and
Hunter's ridge. Several printed values carry recorded disagreements: NIST's stationary point from
rounded coefficients, two NIST canonical-axis constants that do not follow from the page's own sums,
and BHH's B canonical numbers, which do not follow from their equation 15.19. -
The overall F test and likelihood criteria in
analyze_experiment's model summary.
model_summarynow carriesf_statisticandf_p_value(the model against the intercept
alone; against zero, on uncorrected sums of squares, for a model without an intercept whose
columns do not span one, as R's summary does),log_likelihood,aicandbic(counting the
error variance as a parameter, as R'sAICand the library's model selection do) and
aic_step, n ln(RSS/n) + 2p, as R'sstepprints it. The reference catalogue reads them,
with new fit kinds for residual quartiles and the uncorrected F, and checks 94 more of the NIST
e-Handbook's printed numbers: overall F tests and their p-values, lack-of-fit and pure-error
sums of squares, residual quartiles, R's stepwise AICs, Dataplot's model F tests and the
sequential sums of squares of a central composite design. Four disagree, each explained
(Dataplot truncates two F values, and a p-value no pair of degrees of freedom gives). -
The information matrix and exact region values in
evaluate_design. The new metric
information_matrixgives X'X, its determinant, the D-, A- and E-criteria, the rank, the residual
degrees of freedom, the inverse and each coefficient's variance;estimable_interactionscounts
the omitted two-factor interactions a design estimates beside its model.integration="exact"
works out the average prediction variance over the cube by Gauss-Legendre quadrature,
trace((X'X)^-1 W), in place of a sample;max_search="optimize"climbs from the sample's largest
points by a compass search, so a maximum inside a face or an edge is not missed. -
evaluate_projectionsevaluates a design on every projection onto a number of its factors,
or a number from each of several groups (quantitative and categorical, say), and reports the
fraction that estimate the model (the projection estimation capacity) and the metrics' averages. -
design_measures.design_structurecounts what a design's runs are made of: levels and how
often each factor takes each one, middle-level zeros of the main effects and of the products of two
three-level factors (n0ME, n0IE), centre runs, mirror-image pairs, replicated runs and blocks. -
allocate_runstabulates every whole-run split of a budget between two levels that differ
in noise or cost, with each split's variance and efficiency, and finds the most precise one. -
Reference catalogue: design checks. New check kinds read a design's structure
(design_structure), its projections (projections) and its projectivity (design_measure);
a printed vector or matrix is compared entry by entry with X, X'X, X'y or (X'X)^-1; a design
metric's table of terms can be picked by a regular expression and reduced; and a check may name
a designgenerate_omarschooses;library_textcompares a label the library gives word for
word; anddesirability_optimumruns the library's desirability search on the fitted responses.
With these, 565 printed numbers that were set aside by hand in Núñez Ares and Goos (2020), Núñez
Ares et al. (2023), Goos (2025), Jones and Nachtsheim (2013) and the PID book are now checked. -
Generalized linear models in
analyze_experiment.analysis_type="glm"fits a response that
is a count (family="poisson"), a number of successes out oftrials("binomial") or a
positive amount whose spread grows with its size ("gamma"), as well as"gaussian"and
"inverse_gaussian", with the family's canonical link or another (link=). It reports Wald
tests and intervals for the coefficients, odds or rate ratios under a logit or log link, the
log-likelihood, deviance and Pearson statistic, goodness-of-fit tests (Hosmer and Lemeshow's for
a binomial response), and each run's fitted mean with an interval carried through the link.
dispersion=andinformation=choose between R's conventions (the default) and SAS GENMOD's.
The reference catalogue checks 111 printed numbers of Montgomery's section 15.1 with it: the
coupon logistic regression as Minitab prints it, and the grill-defect Poisson and worsted-yarn
gamma models as GENMOD does; all agree. -
Studentized residuals.
analyze_experiment's"residual_diagnostics"now lists each run's
studentized_residuals(the residual over its own standard error, s √(1 − h), Design-Expert's
"Student Residual") andexternally_studentized_residuals(with s from the fit without that run,
R'srstudent, Design-Expert's "Outlier t"). The reference catalogue checks both against the 80
runs Design-Expert lists in Montgomery's Figures 3.12, 4.2 and 5.10; all agree. -
Subject-matter topics in the reference catalogue. Every experiment and design now lists one
or twotopics: what it is about (semiconductors, food and beverages, ...), as opposed to how it
is designed.reference_topics()returns the vocabulary of 30 topics, each with its nearest UN
ISIC Rev. 4 industries and OECD FORD field of research, andreference_experimentsand
reference_designstaketopic=to select by it. Of the 1039 entries, 583 state an application;
the other 456 (mostly tables of designs) are"general". -
The reference catalogue holds chapters 1 to 15 and the appendix of Montgomery, Design and
Analysis of Experiments (8th edition). Chapters 1 and 2: the golf 2^2 factorial and its three effects; the
Portland cement mortar two-sample t-test with Minitab's and JMP's output, its confidence interval
and Minitab's power table; the nerve and muscle fluorescence compared by Welch's test; the
hardness tips' paired t-test beside the pooled test that ignores the specimens; the run counts of
the golf factorials and of a 4 x 8 x 6 x 5 x 4 x 3 x 7 web page factorial; and the half fraction
of Figure 1.8, read from its circled corners and compared run for run with the library's. Chapter
3: the plasma etching one-way analysis of variance by hand and in Design-Expert, Minitab and JMP,
with its residuals and case statistics, contrasts, Scheffé's, Tukey's, Fisher's and Dunnett's
comparisons, Bartlett's variances and the Kruskal-Wallis ranks; the peak discharge data with the
modified Levene test and a square root transformation; dark and milk chocolate; end-aisle
displays; the pot noise of aluminum smelting analysed as ln(s); and the looms as a random factor,
with JMP's REML variance components, their standard errors, covariances and intervals. Chapter 4:
the vascular graft randomized complete block design in Design-Expert and JMP, with the blocks
fixed and random, and with one value missing; the rocket propellant Latin and Graeco-Latin
squares; and the catalyst balanced incomplete block design, with its adjusted and unadjusted sums
of squares, Minitab's output, and the combined intra- and interblock estimates, which the
library's REML fit with random blocks reproduces. Chapter 5: the effects of Figures 5.1 and 5.2;
the battery life 3^2 factorial by hand and in Design-Expert and JMP, with all 36 rows of case
statistics, Tukey's comparisons at 70 °F, the analysis without interaction, and Design-Expert's
reduced cubic response curves in coded and actual temperature; the impurity data with one
observation per cell and Tukey's test for nonadditivity; the soft drink bottling 3 x 2 x 2
factorial with every total and sum of squares; the tool life 3^2 as a categorical analysis and as
JMP's second-order and expanded models, with the prediction profiler's optimum; and the radar
detection factorial with the operators as fixed and as random blocks (JMP's REML table, its -2
log-likelihood included), then run in a 6 x 6 Latin square. Chapter 6: the chemical process 2^2
with its residuals and its equation in natural units; the plasma etch 2^3 with Design-Expert's
full and reduced models, their 16 rows of case statistics, equations in actual factors and lack of
fit, and the ranges of Figure 6.8; the filtration 2^4 in a single replicate with its projection on
A, C and D, Lenth's method, JMP's screening platform (estimates, pseudo t-ratios and p-values) and
fitted model with its lack of fit and profiler, and again with four centre runs and the test for
pure quadratic curvature; the drill in ln y; the aircraft panels' dispersion effects; the oxide
thickness with duplicate measurements, its ln(s²) model and Design-Expert's tables; the credit
card mailing in JMP; the optimality of the 2^2; and the circuit fitted in coded and in engineering
units. Chapter 7: the chemical process in three blocks; the filtration 2^4 in two blocks with ABCD
confounded, and unblocked with a shift; the 2^5 in four blocks and the 2^6 in eight; Table 7.9's
blocking arrangements, compared with the library's blocking and with the products of the effects
each row chooses; and the plasma etch in two replicates partially confounded. Chapter 8: the half
fractions of the 2^3; the filtration 2^(4-1) and its alternate fraction, their sums and
differences the effects of the full 2^4; the integrated circuit 2^(5-1); the 2^(6-2)'s
construction, alias structure, alternate fraction and two blocks; the injection molding 2^(6-2)
with its dispersion effects (Table 8.12's sign columns included); the three 2^(7-2) designs
compared by word length pattern; Table 8.14's 29 designs, each compared with the library's
fraction for its resolution; the 2^(7-3); the CNC machine 2^(8-3) in four blocks, analysed in ln
s; the alias matrix of the 2^(3-1); the 2^(7-4), the 2^(6-3) and the fold over on D; the eye focus
2^(7-4) and its full fold over; the Plackett-Burman designs of 12, 20, 24, 28 and 36 runs written
from Table 8.23, compared with the library's; a 20-run Plackett-Burman design in 12 factors with
JMP's alias matrix (858 entries) and its initial and final stepwise regression tables; the 2^(4-1)
by fold over; Table 8.30; the spin coater's single-factor and partial fold overs, with their
coefficients' standard errors in units of σ; the smallest resolution V fractions; and the
supersaturated design of Table 8.34. Chapter 9: the tool life interaction split into its linear
and quadratic components and into its AB and AB² components of interaction; the syrup loss 3^3 run
twice, its analysis of variance, the quadratic models of each nozzle in coded and natural units,
and the four components of its three-factor interaction; the 3^2, 3^3 and 3^4 in three and nine
blocks, the 3^7 in 27 blocks, the one-third fractions of the 3^3, the 3^(4-1) and the 3^(4-2) with
its 32 aliases; two- and four-level factors in the 2^3 and 2^4; the five Hall designs and the
nonregular no-confounding designs for 6 to 14 factors in 16 runs, with Table 9.23's E(s²),
confounded pairs and trace(AA'), and the spin coater on the six-factor design with JMP's stepwise
table; and the optimal designs of section 9.6: two categorical factors in 9 and 12 runs, six
factors in four days of three runs, the 18- and 12-run resolution IV designs with all 274 alias
weights, the 22- and 38-run resolution V designs, and three mixed-level D-optimal designs with
JMP's relative variances. Chapter 10: the viscosity regression with its X'X, X'y and (X'X)^-1,
Table 10.3's residuals, leverages, Cook's distances and R-student, Minitab's output, the extra sum
of squares of the feed rate, a confidence interval on a coefficient and PRESS; the 2^3 with four
centre runs fitted by regression, again with run 8 missing and again at the levels reached; a
2^(4-1) augmented to de-alias AB from CD, by one run or by four in a block of their own; and the
prediction interval on Example 8.1's confirmation run. Chapter 11: the yield's first-order model,
its interaction and curvature checks and Table 11.3's path of steepest ascent; the central
composite design of Example 11.2 with all of Design-Expert's Table 11.7 (sequential sums of
squares, lack-of-fit tests, model summaries, the case statistics and the equation in actual
factors), the stationary point, the eigenvalues and eigenvectors of the canonical analysis, the
viscosity and molecular weight models and the constrained and desirability solutions; the
Box-Behnken, small composite and hybrid designs; orthogonal blocking of a CCD and Table 11.11's
nine blocked designs; the inscribed CCD, D-optimal and modified D-optimal designs of the adhesive's
constrained region; JMP's 16-run D- and I-optimal designs in four factors, their relative
variances and maximum prediction variances; the definitive screening designs of Figure 11.32 for
4 to 12 factors, read from the page image, and the conference matrix of order 6; the CFD plume
experiment; the yarn elongation simplex lattice, the augmented simplex lattice and the paint
formulation fitted in pseudocomponents with Design-Expert's Tables 11.21 and 11.22; and the EVOP
of Example 11.7, its averages, sums, differences and effects cycle by cycle. Chapter 12: the leaf
spring crossed array with its mean and ln(s²) models; the connector pull-off force crossed array,
its inner array matched to the stored L9; the filtration 2^4 with temperature a noise factor and
the semiconductor combined array of Example 12.2, each with its response, mean and variance
models; the 30-run resolution V design, the 23-run D-optimal combined array and the 18-run
saturated design of section 12.5; and the alias weights of Problem 12.10's 3^(4-2). Chapter 13: the
measurement systems capability study as a two-factor random model and, with the operators fixed,
as restricted and unrestricted mixed models, in Minitab and JMP, with the analysis-of-variance and
REML variance components, their standard errors, covariances and intervals, and the reduced model;
and the pressure drop three-factor mixed model with its exact, approximate (Satterthwaite) and
synthesized F tests, restricted and unrestricted, and the Satterthwaite and modified large-sample
intervals on a variance component. Chapter 14: the purity of batches nested within suppliers, by hand,
in Minitab and in JMP, with its residuals and, analysed wrongly, as crossed; the assembly times
of operators nested within layouts and crossed with fixtures, under the restricted and
unrestricted models; the tensile strength split-plot, with its analysis of variance, JMP's REML
table and the library's split-plot analysis, and analysed wrongly as completely randomized;
the plasma etching 2^(5-1) in eight whole plots; and the split-plot layouts of Figure 14.7 and
Table 14.24. Chapter 15: the Box-Cox curve SSE(λ) of the peak discharge data and Design-Expert's
choice of λ; the coupon redemption, grill defect and worsted yarn examples, their least-squares
analyses of transformed responses checked and their generalized linear models recorded; the
battery data with proportional cell counts; the fibre strength analysis of covariance, by hand
and in Minitab, with its adjusted means; a 2^3 with a covariate in JMP, with common and with
separate slopes; and a D-optimal design that chooses raw material samples by two covariates,
with its relative variances and alias matrix. The appendix: Table X's 26 fractions of 3 to 15
factors in 4 to 64 runs, each with its fraction, run count, resolution, generators, defining
relation, every alias chain and the effects confounded with its blocks; its tables of the
normal, t, chi-square, F, studentized range and Dunnett distributions and of orthogonal
polynomials are screened against scipy, and their misprints listed with them. The data of the
184 problems that have data are kept as data, since the book prints no answers; the totals, means, ranges, standard
deviations, response rates and transformations some of their tables print are checked, and the two
models Problem 9.6 prints. 11150 printed numbers, 10382 checked. 492 are recorded as not
reproducing, each explained: the book's rounding (test statistics, P-values, fitted values and
residuals worked from rounded values, a Tukey critical difference from a table's rounded point,
three standard deviations in each of Tables 3.7 and P8.3, dispersion statistics from rounded
standard deviations, F ratios divided by a rounded error mean square, Figure 8.22's averages cut
off rather than rounded, Table 9.2's P-values worked from F rounded to two decimals and sums of
squares cut rather than rounded, and chapter 10's confidence and prediction limits worked with t
rounded to two decimals, a partial F from rounded sums of squares, and Example 10.4's (X'X)^-1
inverted from X'X rounded to four decimals, and in chapter 11 P-values worked from F rounded, the
path of steepest ascent stepped by Δx2 rounded to 0.42 and 2°F, the w equations' coefficients and
a determinant cut rather than rounded, chapter 12's variance models worked from coefficients
rounded to two decimals, chapter 13's variance components worked from rounded mean squares and
its intervals from rounded chi-square and F points, chapter 14's F ratios of rounded mean
squares, and chapter 15's Box-Cox minimum and limits read off a graph), misprints (sums of squares and mean squares, an F of
3.95 for 3.93, an error degrees of freedom of 19 for 20, a residual of 26.00 for −6.00, a dropped
sign in two coefficients or limits, a range of 59 for 54, Table 6.28's analysis of variance copied
from Table 6.26, one row of Table 7.9 that prints the interactions of other generators, a column
of Table 8.12 headed BD = CE for BD = CF, a 0 for 0.2 in Table 8.26's alias matrix, three signs of
the 12-run Plackett-Burman design's alias weights, Figure 8.25's axis taken from Figure 8.26, and
transformed values in Tables P8.13 and P8.14, one sign in each of the Hall II, III and IV designs,
whose Hall II also drops a run at a page break, a block of Figure 9.8 labelled (1,6) for (1,0),
the components ABC and ABC² of the syrup loss data exchanged, nozzle 2's models fitted to data
other than Table 9.1's, the Hall columns named for Tables 9.21 and 9.22, an E(s²) of 14.20 for
14.22, two counts of Table 9.35's levels exchanged, Example 10.3's coefficients, which are not the
product of the (X'X)^-1 and X'y it prints, and an entry of Example 10.4's (X'X)^-1 printed 4.37851
for 4.37351; in chapter 11 the characteristic equation λ² + 2.3788λ + 1.3639 = 0 for
λ² + 2.3775λ + 1.3624, the temperatures 179 and 181 of steps 11 and 12 of the path for 177 and
179, Table 11.11's N = 80 for 90, Table 11.22's mean square 1465.66 for 1465.55, the EVOP's
change in mean of 0.02 for −0.02 and 225°F for 255°F, and the desirability solutions, whose D and
predictions do not match their printed settings; in chapter 12 the outer array of Table 12.2,
whose sixth column repeats the fifth, Problem 12.9's first mean and variance, 57.75 and 121.19
for 57.25 and 161.58, and the alias expression of β11 in Problem 12.10, which leaves out +β34;
in chapter 13 a P-value of 0.01 for 0.00007 in Table 13.10; in chapter 14 sums of squares of
82.80, 71.91 and 65.84 for 82.79, 71.92 and 65.83 in Table 14.12, P-values of 0.01 for 0.002 and
0.0002, the degrees of freedom of the operators' two F tests, and Table 14.23's coefficients,
fitted with 38.03 where Table 14.22 prints 38.08; in chapter 15 the least-squares columns of
Tables 15.3 and 15.5, which are those of models fitted to slightly other data than the book
prints, a machine total of 184 for 180, two signs of Table 15.24's alias matrix, and Table
15.21's asterisks, which mark five samples twice; in the appendix Table X's defining relation
of design (r), CDFGI for CDFGJ, and the heading of design (z), 5 factors for 15), Design-Expert's Box-Cox λ and its
interval, which is symmetric about λ where the library's likelihood-ratio interval is not,
JMP's REML estimates in chapter 13,
which leave a variance component negative where the library's REML, like lme4, keeps every
component at or above zero (the analysis-of-variance estimates, JMP's standard errors and its
covariances all reproduce from the library's mean squares),
Design-Expert's equations in actual temperature, whose linear coefficients add the
quadratic ones, Minitab's Tukey intervals, which use a studentized range point of 4.0504 where the
library's, like R's, is 4.0461, a residual mean square of "about 109" that no model of the data
gives, two rows of Table 7.9 that confound one more two-factor interaction than the library's
blocking does, and three numbers where the library's design differs from the book's: its 24-run
Plackett-Burman design is the 12-run one doubled (11 of its three-column products completely
aliased) rather than the cyclic design of Table 8.23, its 36-run design is of another class,
its 16-run fraction for 12 factors has one more word of length three than that of Tables 8.14 and X, and
Figure 11.32's 12-factor definitive screening design is not a conference-matrix design like the
library's (its main effects are correlated); those for 4, 6, 8 and 10 factors are the library's
with their columns reordered and their signs changed.New checks:
t_testcompares two groups of runs with the library's pooled, Welch and paired
t-tests;contrastweighs a fit's level means (its value, standard error, t, F, sum of squares,
p-value and 95% interval);tukeyreads the library'stukey_hsd; a fit can take atransform;
variance_componenttakes fixed factors, coded to sum to zero, and reads the REML fit's variance
ratios, percentages, standard errors, covariances, Wald intervals, the mean's t on Satterthwaite's
degrees of freedom, fixed-effect F tests and level effects, and its fixed factors may include
their interactions;nonadditivityis Tukey's one-degree-of-freedom test, worked as the test of
the additive model's squared fitted values added as a regressor; a prediction can be read as the
half-width of its interval, as a prediction profiler prints it. Checks can also read a run's leverage,
Cook's distance and studentized residuals, a sum, a median, a minimum and a maximum, the adequate
precision, and a percentage point of the t distribution (t_value). A term written as the library
names it, such asC(power)[160.0], is read as that row of the coefficients. For chapters 6 and 7:
nested_testtests a model against a fuller one fitted to the same runs (Design-Expert's lack of
fit against pure error, or a group of terms);lenth_tandlenth_pread an effect's pseudo
t-ratio on Lenth's PSE and its p-value on m/3 degrees of freedom, as JMP's screening platform
prints them;percent_of_total,curvature(the library's test for pure quadratic curvature),
max_r_squared, a run'srange,column_correlationandgeneralized_interactions(the effects
confounded with blocks, as the products of those chosen to generate them);fraction_runstakes
several generators, and a path into a library result may be a list of keys. For chapter 8: a
fraction'sword_lengths, whether an effect isclearof main effects and two-factor
interactions, andminimum_aberration(its word lengths against those of the fraction the library
chooses for its resolution);product_column, a printed column of signs as the product of the
factor columns it is headed with;same_projections, a two-level design matched to the library's
by its one-, two- and three-column J-characteristics, without searching relabellings;
distinct_runsin a projection;unit_std_error, a coefficient's standard error in units of σ;
the per-run statisticssqrt,arcsin_sqrtand Freeman and Tukey'sfreeman_tukey_sqrtand
freeman_tukey_arcsin; anddata_roundingon anested_testand a residual sum of squares or mean
square, holding a number fitted to unrounded responses to the first-order bound of what the
printed responses' rounding moves. A design's evaluation and a nested test's fits are made once
however many of their numbers are read. For chapter 9:component_ss, a 3^k component of
interaction's sum of squares and group totals, the runs grouped by its defining contrast
x1 + 2x2 + ... (mod 3);component_blocksandcomponent_fraction, blocks and fractions made by
such contrasts;component_productandcomponent_relation, generalized interactions, aliases,
defining relations and resolutions worked modulo 3;component_valuesandmod3_sum, the
arithmetic of treatment combinations;projection, a design printed as columns of another entry's;
interaction_columns, Booth and Cox's E(s²), the confounded pairs and the largest correlations of
a design's main-effect and two-factor interaction columns;estimable_projections, the projections
that cannot fit their main effects and interactions; andrun_count.unit_std_errorcan read
one term, a relative variance, a design the library makes, and categorical factors coded as JMP
codes them to evaluate a design (each factor's effect-coding columns made orthonormal and scaled to
a mean square of 1), with which JMP's relative variances reproduce;design_metriccan square
what it reads, as trace(AA') is the alias matrix's squared norm;distinct_runstakes levels
printed as names, and a subset of the runs. For chapter 10:normal_equationsreads an entry of
X'X, X'y or (X'X)^-1; a prediction reads its interval's half-width for a new observation and the
point's x0'(X'X)^-1 x0; anddot_producttakes a subset of the runs. For chapter 11:
normal_equationsalso reads |(X'X)^-1|, its trace, x0'(X'X)^-1 x0 at a point and the D-efficiency
of one set of runs relative to another;desirabilityscores several fitted responses at a
point with the library's desirability functions;run_radius,blocks_orthogonal(both of
Box and Hunter's conditions, the second the library'ssquares_orthogonal_to_blocks) and
fold_over_pairsread a design's runs;interaction_columnsreads the correlation of main effects
with squares andestimable_projectionsthe full quadratic model;nested_testtakes its error
from a third model, as Design-Expert tests a mixture's linear blending; a factor can be coded as
a pseudocomponent;runs.exactmaps settings in a factor's own units too, and"settings": "as_printed"fits them as printed; the lack of fit's degrees of freedom is read directly
(lack_of_fit_df); a contrast's value is read from a saturated fit; a
library value or design property can be squared; a path into a result can takesumandprod;
and the canonical analysis holds only the factors its model holds. For chapter 12:
transmitted_variancereads a coefficient of the variance model a fitted response model transmits
from its noise factors, or the variance or propagation of error at a point, worked from the
library's coefficients; and"exp": truereads a model of ln(s²) back as a variance. For chapter
13:mean_squaresreads a linear combination of the library's mean squares (the
analysis-of-variance estimate of a variance component), its Satterthwaite degrees of freedom,
standard error, covariance with a second combination, its Wald and chi-square intervals and the
modified large-sample lower limit of Ting et al. (1990), and the F test of one combination against
another; and avariance_componentgroup can be an interaction of factors, such as
part:operator. For chapter 14:split_plotreads the library's split-plot analysis (REML with
the whole plots random, Satterthwaite's tests), the whole plots named by the columns that make
them; a two-level factor can be fitted by its level names ("coding": "name"), so a factor
nested in it is fitted within each level; and a Wald interval can take JMP's multiplier of 1.96
itself ("z"), as the JMP of chapter 14 does where that of chapter 13 takes 1.95996. For chapter
15:box_coxreads SSE(λ) and its log at any λ; a value can be read back from a transformed
scale ("log10", and"back_transform": "freeman_tukey_sqrt");cross_productsreads an
analysis of covariance's sums of squares and products, total, treatments and error; and a
prediction reads its standard error, an adjusted mean's at the covariate's mean. For the
appendix:aliasestakesup_to, so a printed chain must hold every alias of up to that many
factors and no other;block_effectsreads the effects confounded with blocks, each chosen
effect and every product of them, as alias chains;design_propertyreads thefractionof the
full factorial a design runs and its runs per block (blocks); and a defining relation of more
than ten generators, which the library leaves out of a design's metadata, is worked out with
evaluate_design, so the 15-factor fraction in 16 runs is compared word by word. -
Prediction from marginal means, as Taguchi's additive model makes it.
marginal_means_prediction(design_matrix, responses, at, interactions=())predicts a response at
given settings as the grand mean plus each factor's deviation (the mean of the runs at its level
less the grand mean), plus, for each named pair of factors, the deviation of their two-factor
mean. On a design whose levels and pairs of levels occur equally often, such as an orthogonal
array, the main-effect terms are the least-squares estimates; on any other aUserWarningsays
the prediction is not the least-squares one. The reference catalogue checks it (marginal_means)
against the 42 predictions and deviations of Schmidt and Launsby's lunar concrete study, which it
held as not recomputed until now: 40 agree, and two are the book's errors (run 14's prediction
has two digits exchanged, and run 16's deviation does not follow from its values). -
evaluate_design(..., metric="scaled_condition_number"): the condition number of the model
matrix with each column scaled to unit length, so the factors' units do not count: 1 for
orthogonal columns, whatever their units. RS/Discover prints it as Cond. No.; the nine that
Schmidt and Launsby print (eight plating models and the ball weld D-optimal design) agree. -
A design catalog, at factori.al/catalog. It lists the reference catalogue's 1039 published
experiments and designs, and 117 designs the library makes. A reader searches them in words ("4
factors, <=30 runs, quadratic, since 1990"); filters them by family, application (the industry
sector of the reference catalogue's topics, such as food and beverages or semiconductors), runs,
factors, the model they estimate in full, categorical factors, blocks, split plot, mixture, printed
results, recomputed numbers, and the year the source appeared or the date the entry was added; and
sees each one on a map of runs against factors, beside the fewest runs each model needs. A design's
page links to the place its source prints it (for the book and the NIST e-Handbook, the section
itself), and names the book's tables and figures by their captions. A design opens in Factorial
with one click: 269 published designs, which the library regenerates run for run, and every
generated design of the nine types the app makes, an orthogonal array when the app takes every
column. The filters are kept in the address, so a filtered view can be shared.process_improve.experiments.design_catalogmakes the records:catalog_records,
normalise_family(a source's free-text design type, read into a family),design_facets,
glyph,printed_checks,short_citation,catalog_sources,catalog_families,
catalog_topics,figure_name,table_name,where_url, andsearch_catalog, which filters
them as the page does. The toolsearch_design_catalogsearches the same records for an agent or
the MCP server, and returns each design with its page in the catalog. The user guide's new page,
The Design Catalog, lists what a
record holds. -
What a design withstands, read off its runs:
process_improve.experiments.design_measures.
run_losssays whether a design still estimates its model if any one run is lost, and the
D-efficiency the worst loss leaves: losing run i scales det(X'X) by 1 - h_i, with h_i its
leverage, so one hat matrix answers it for every run.quadratic_projectionis the most factors
whose every projection estimates the full quadratic in them (3 for a six-factor definitive
screening design), andprojectivitythe most whose every projection holds all their two-level
combinations (3 for the 12-run Plackett-Burman design).fingerprint,same_designand
design_classesfind one design under other labels, its runs, factors or levels reordered: the
catalog lists 115 designs printed or made in more than one place, among them the 12-run
Plackett-Burman design, which is also Schmidt and Launsby's Taguchi L12 and Table 3.18 of the NIST
e-Handbook.estimable_modelsandmodel_matrixare here too. The catalog filters on all of them,
and a design's page draws its runs' leverages. -
The design catalog compares designs, explores their projections and lists the errata. Up to
four designs of one size are set side by side on the measures ofcompare_designs, for the model
they all fit, with their fraction-of-design-space curves (design_measures.fds_curve); 586 designs
of numeric factors are scored at build time (design_catalog.catalog_comparisons). A design's
page projects its runs onto any two or three of its factors, says whether that projection
estimates the full quadratic, draws its correlation map, and links to the families it can be
augmented to (catalog_familiesreads them from the knowledge base). A timeline under the map
counts the published designs by year in their families' colours, marks the year each family was
first published, and keeps the years a reader drags across. The errata list the 1381 printed
numbers the library does not reproduce, each with the value printed, its page and the recorded
reason (catalog_errata). A source filter and a "no source prints it" filter find the generated
designs no source in the catalogue prints.catalog/feed.xmlis an Atom feed with an entry for
each source as it enters the catalogue (catalog_feed). -
Every design in the catalog with a complete table of runs opens in Factorial. Factorial holds
runs as given (design_type="given"inapi_make_design): the runs of a design it does not
make, such as one a book prints, in their order and their factors' own units, analysed with the
largest model they estimate in full. 506 published designs open, 269 of them as the app makes
them, and 99 generated ones. A limit on the coded settings, typed in the catalog (A + B <= 1),
keeps the designs whose
every run meets it, marks the runs outside it, and opens a design in Factorial with the limit in
its own units, where the D-optimal and I-optimal designs make runs inside it. A form for proposing
a published design for the catalogue is linked from the catalog. -
Standardised coefficients. Each row of
analyze_experiment's"coefficients"(and
coefficients_actual) now carriesstandardised_coefficient: the coefficient times the standard
deviation of its column of the model matrix, over the standard deviation of the response, as
MYSTAT prints it in its STD COEF column. It has no units, so terms measured in different units
compare; the intercept's is 0, and it is not a number when the response does not vary. The
reference catalogue checks it (standardised_coefficient) against the 57 that Schmidt and Launsby
print in chapters 4, 5 and 7, which it held as not recomputed until now; all 57 agree. -
The reference catalogue holds chapters 1 to 8 of Schmidt and Launsby, Understanding Industrial
Designed Experiments (4th edition), with the answers of its Appendix J. Chapters 1 and 2: bond
strengths confounded with batches, a twenty-week mileage record with its Cpk, a control chart's
subgroup averages, the gas mileage and aircraft painting 2^(4-1) fractions analysed for their
averages and standard deviations, the nickel plating 2^2, a 2 x 3 factorial, L12 and L18 screening
designs, a 3^2 factorial, and a two-factor central composite design fitted whole and with a row
missing. Chapter 3: its design matrices, each compared with the design the library makes, and the
run counts of Tables 3.21, 3.24 and 3.26. Chapter 4: analyses of variance, simple, polynomial and
multiple regression with MYSTAT's tables and prediction intervals, and a Box-Behnken design fitted
in actual and in coded units. Chapter 5: an L8 analysed by average effects, analysis of variance
and regression, and its variance and ln s modelled; signal-to-noise ratios and ln s compared; a
turbine blade 2^3 with its dispersion effects; dispersion found from the residuals' spread at each
level; an injection molding L8 with an outer array of noise factors; multi-variate charts of
wafers and lots; a four-factor face-centred composite design modelled for its average and standard
deviation; and one plating process run as a composite design, a D-optimal design, a Box-Behnken
design and a 3^3, with RS/Discover's tables and each model's predictions at 27 points. Chapter 6:
a wave solder L8 inner array with an L4 outer array of noise factors, analysed by its averages and
smaller-is-better signal-to-noise ratios. Chapter 7: yield searched one factor at a time and by a
3^2, then by response surface methods: a 2^2 with centre points and its path of steepest ascent, a
second 2^2 at the best point along it, and the rotatable composite design that completes it, with
its stationary point and eigenvalues. Chapter 8: the industrial case studies that print data,
among them a 2^(8-4) screening design, a one-way analysis of variance with unequal groups, L8
studies of a linear motor, an injection molded part and gold wire bonding, a simulated computer
network fitted in its inputs' own units (SAS's three regression tables and lack of fit),
duplicated 2^3 paper helicopters, lunar concrete in an 18-run D-optimal design, a duplicated L4
for GaAs doping, an L16 of rubber formulations with seven responses and Design Cube's level
effects, a plasma etch central composite design, an 18-run D-optimal design with an outer array,
rivet protrusion regressed in four unbalanced blocks, a quarter fraction of a simulated sludge
plant, two duplicated Karl Fischer fractions, a 2^4 on circular runout with Q-EDGE's regressions
of the readings and their standard deviations, a ball weld D-optimal design, an analog filter
screened in an L12 and modelled in a 33-run composite design on a half fraction, a PSPICE 2^2, a
solderability L18 with a dummy-level column, a 2^4 on chemiluminescence with centre runs, and the
run counts of a 136-run Plackett-Burman design for 134 inputs and a mixed-level full factorial of
49152 cases. Appendix J's answers are checked against the problems they answer. 4520 printed
numbers, 4253 checked. 400 are recorded as not reproducing, each explained: most come from the
book's rounding (run averages and standard deviations that do not follow from their readings,
squares of rounded effects, coefficients that are halves of rounded effects, values cut rather
than rounded), some are misprints (a wrong sign, two exchanged digits, rows swapped, Yates's
algorithm run on totals listed in run order rather than Yates order, an answer's resolution IV for
a design with three-letter words). A catalogue check can now analyse
each run's mean, total, standard deviation, ln s or one of Taguchi's signal-to-noise ratios
(larger, smaller and nominal is best), or every reading as an observation of its own, in other
units than the readings are printed in if need be (summary); solve for the setting of a factor
at which a fitted line or parabola reaches a target (target_setting); compute a Cpk with
calculate_cpk(capability); read a term's tolerance as one over its VIF, and its squared
correlation with the others or a confidence printed as 1 - p as one less that (reciprocal,
complement); hold a number that software prints with more digits than its arithmetic carries to
fewer decimals (decimals); allow a coefficient the rounding it carries from responses printed
rounded, through its row of the pseudo-inverse of the model matrix (data_rounding); read the
Durbin-Watson statistic (durbin_watson); read a limit of a prediction's interval (bound);
check Multiple R and the F ratio of the whole regression with its p-value (multiple_r,
f_regression,f_regression_p); find a dispersion effect as ln(s+²/s-²), from run standard
deviations or from the residuals' spread at each level (log_variance_ratio,residual_std_dev,
residual_log_variance_ratio); give a number printed as the difference of two rounded averages
the rounding of both, with or without a fit (of_rounded); compare a printed design matrix, coded
or in the factors' own units, with the library's design or stored orthogonal array whatever the
run order, and if need be the order and signs of its columns, a subset of an array's columns, or
numbers rounded as printed (same_runs); read a step of steepest ascent in coded units (units);
check that a printed matrix obeys its printed generators (generator_holds); sum a product of
columns (dot_product); make a design for more factors than there are letters; read a term's
degrees of freedom, its sum of squares as a percentage of the total, and Taguchi's percent
contribution (anova_df,percent_of_total,percent_contribution); read the lack of fit's and
the pure error's sums of squares and the lack of fit's mean square (lack_of_fit_ss,
lack_of_fit_ms,pure_error_ss); and split a regression into what one model explains and what
a larger one adds, each tested against the full model's residual, as RS/Discover splits a
quadratic into its linear and non-linear parts (extra_ss,extra_ms,extra_f,extra_p). -
A region that describes its limits, in actual units.
DesignRegionnow takes its
constraints asConstraintobjects, their dict form or bare expressions such as
"3*T + 5*D <= 600", and a box region reports: the share of the box it keeps
(volume_fraction(): exact for straight limits, in closed form for the factors one limit
ties together and from the polytope's volume for up to five tied together by several;
else from a fixed Sobol sample, so the same on every platform, which beside straight
limits counts only what the curved ones take from the share the straight ones leave); whether
any setting is left (is_empty()); the range each factor can still reach
(implied_bounds()); a central setting that can be run, to hold unplotted factors at
(centroid()); the limits that remove nothing the others do not
(redundant_constraints()); the limits that are curved over the box rather than straight
(curved_constraints()); each limit's affine form, rounded so no floating-point residue
shows (linear_forms()); its corners (vertices()); and pictures on any two factors: the
shadow of the region (shadow(x, y)), a slice through it at given values of the others
(slice_polygon,slice_lines) and the slack of a grid, at or below zero exactly where a
point can be run (slice_slack). Linear limits are handled exactly (a polygon, with a
segment or a point where the region is flat), curved ones by a mask. With 8 factors and 8
limits, everything a change to one limit needs takes about 70 ms. -
rename_factors(expression, names): rename factors
inside a limit, all at once (so a swap works), leaving function names such assqrt
alone, and return the canonical text, which renaming back reproduces. -
A limit proposed from the settings that cannot be run.
separating_constraint(factors, cannot, can)takes settings that cannot be run (corners
of the box, say) and settings that can, and proposes the straight limit that rules out
exactly the first, written for a reader in actual units: marking the corners whereT
andPare both high, with the centre runnable, gives"T + 25 * P <= 250". The cut is
the plane of maximum margin between the two sets, which is unique, so a symmetric pattern
gives a symmetric limit and a factor the pattern ignores is left out; its coefficients are
rounded to the fewest digits that move them by at most 1% and keep every setting on its
side, and the right-hand side is the roundest number in the middle of the gap. When no
straight cut separates the sets,NotSeparableError(aValueError) names the settings
that lie between those of the other set.constraint_through_cuts(factors, corner, cuts)
writes the limit through a cut on each factor from one corner, in exact arithmetic: from
(200, 3),Tup to 190 andPup to 2.5 give"T + 20 * P <= 250". Both run under
Pyodide and give the same text on every platform. -
Designs compared over the settings that can be run.
compare_designs(..., region=)takes aDesignRegion(or its dict) and computes I and G over it rather than
over the cube: I averages the prediction variance over 20000 points drawn uniformly from
the region with a fixed seed, and G searches the region's vertices (up to 65536 of
them; past thatg_pointssays that G can come out low), its support points, points
on the boundary of a curved limit, the grid's points inside it and that sample.
With a curved limit, local searches (SLSQP) then climb each design's prediction variance
from the points where it is largest, since the largest value usually sits where the
curved boundary meets faces of the box, which no fixed set of points reaches. The other
measures do not depend on where predictions are made and do not change.
DesignComparisongainsregion(also into_dict()) and a
measuresproperty whose definitions of I and G say "over the region"; a design with
runs outside the region is noted. A mixture region, or one that names a factor the
designs lack, is refused. Without a region every value is what it was. -
Response plots shade the settings that cannot be run. The contour, 3D surface and
prediction-variance plots, andvisualize_doe, takeregion=(aDesignRegionor its
dict). The contour and prediction-variance plots add a second trace after the response
(which staysdata[0]): a translucent constraint contour of the limits' slack, named
"Cannot be run", so a straight limit is drawn straight. The 3D surface isNaNwhere a
setting cannot be run. The Plotly adapter passes a layer'sfillcolorandhoverinfo
through, and the ECharts adapter draws a constraint contour as a masked heatmap. Without
a region, or with one without limits, every figure is unchanged. -
A user-guide page on limits on the settings. "Limits on the Settings" covers writing
limits as text, what they leave of the factor ranges, renaming a factor inside them,
proposing a limit from the settings that cannot be run, pictures of the region, and
comparing designs and plotting a response over it; its examples run with the test suite. -
Factorial takes limits on the settings that can be run. Under the factors, "Settings you
cannot run" holds up to 8 limits, each an inequality in the factors' own units over any number
of factors (T + 25*P <= 250,0.5 <= A/B <= 2,T*F <= 3600), with buttons that type the
factors' names and the signs a phone lacks. Python reads each limit as the library will and says
what it rules out, or what to change in it; together, the limits say what share of the ranges
they leave, whether the center can still be run, and how far each factor can still go. A limit
can also be had by marking the corners of the ranges that cannot be run: the page proposes the
straight limit that rules out just those, to add as it is or to adjust factor by factor from
its corner. A picture shows, for each pair of factors, the settings that can be run, each
straight limit's boundary and the run sheet's runs, and opens to look inside at values of the
other factors the reader sets; a curved limit is traced smoothly. With limits, only the
D-optimal and I-optimal designs are offered, every run is checked to be inside, the designs are
compared over the settings that can be run, Learn greys the response surface outside them, and
the Python shown, the notebook, the workbook, saved studies and links all carry them. Renaming a
factor renames it inside the limits, and the run sheet keeps its runs. -
Factorial picks a fractional factorial from the trade-off grid. With a fractional factorial,
the Design step shows runs (4 to 128) against factors (3 to 11), each cell the resolution of the
minimum-aberration fraction thattrade_off_tablefinds, or Full, coloured in three bands. A
cell in the column of the brief's factors sets the design: its resolution, V for a higher one, or
the full factorial. A cell whose runs the page does not make at that resolution is not offered.
The cell of the design the form makes is marked, and it moves as the factors or the resolution
change. -
Factorial makes and analyses mixture designs. For a blend of 3 to 6 components, the design
list offers a simplex lattice of degree 1 or 2, the simplex centroid (3 or 4 components), and
extreme vertices for a mixture with bounds; under a mixture, each factor's low and high are its
lower and upper proportions, 0 and 1 when left blank, and every run's proportions sum to 1. The
page refuses bounds no blend can meet, a categorical factor or a process variable, and limits on
the settings, each with the reason. Learn fits the Scheffé model the design supports (linear,
quadratic or special cubic where the runs estimate it), with no intercept: the mixture ANOVA,
each component's effect along its Cox direction, and the fitted response drawn over the triangle
of blends for 3 components, or along each Cox direction for more. Lenth's method and the Pareto
plot are left out, saying why. A process with one synergistic and one antagonistic blend
simulates practice results, and the Python shown, the notebook, the workbook, renaming, saved
studies and links all keep a mixture a mixture. A mixture measures up to five responses as
other designs do, each simulated from the blend process turned to another component. The
comparison of designs, the best settings and the balance of the responses are for factors with
ranges, and say so for a mixture.
Changed
- Plackett-Burman designs of 24 and 36 runs are the cyclic designs Plackett and Burman
printed. The 24-run design was the 12-run design doubled, which aliases 11 products of three
columns completely with the intercept; it is now Paley's cyclic design mod 23, as in Montgomery's
Table 8.23, whose products of three columns have |J| of 0 or 8 only. The 36-run design comes from
Plackett and Burman's generating row instead of Paley's second construction. The same rule makes
48 and 80 runs Paley's cyclic designs. Other run counts are unchanged. - Fractional factorials of more than 11 factors have minimum aberration where it is quick to
find. At the fewest runs that reach the resolution asked for, every generator set is scored
when there are few enough (12 to 15 factors in 16 runs): 12 factors at resolution III now have
16 words of length three, as in Montgomery's Table X, not 17. Otherwise the fraction is the one
of highest resolution the search reaches at that size: 16 factors asked at resolution III are
resolution IV in 32 runs. - Factorial's three ways in stand out, and links out open in a tab of their own. The header's
buttons are larger, each in a colour of its own with an icon, and each begins with a verb: Start
a new study, Explore a worked example and Browse the design catalog. Every link from the
app, its About page and the design catalog to another site (a source, GitHub, Pyodide) opens in a
new tab, and a link to the book in the book's tab, so the page and its study stay where they are. - Factorial warns when the model's terms are correlated. Runs as given, or runs left blank,
can leave the fitted terms correlated: their standard errors grow, and the model as a whole can
explain the response while no single term looks active. Each coefficient in Learn now carries its
variance inflation factor (VIF), from the runs fitted. When a term's VIF is above 5, a note names
each such term with its VIF, says that its standard error is about √VIF times what uncorrelated
runs would give, and suggests adding runs that separate the terms or dropping one; the
coefficients table then shows a VIF column, defined on request, and the Python shown and the
notebook work the VIFs out withevaluate_design. An orthogonal design, every VIF 1, shows
neither. generate_omarsreturns an exhaustively searched design in one fixed orientation. For three and
four factors at small run sizes the search enumerates every design and picks the best. Designs that differ
only in factor order and factor signs tie exactly on every criterion, so rounding in the floating-point
scores picked among them, and the design returned could differ between platforms. The winner is now
returned in its canonical orientation, which is the same on every platform. It scores as before on every
criterion, but its columns can be permuted and sign-flipped relative to 1.99.0.analyze_experiment'scodingdefaults to"auto", so coefficients on factors not already
coded come back on the -1/+1 scale. The change was announced in 1.98.0. A call that passes no
codingnow gets its"coefficients"and"confidence_intervals"refitted with each numeric
factor mapped from its minimum and maximum to -1 and +1 and each two-level categorical factor
from its first level to its second; in a named model a categorical factor with more levels gets
sum-to-zero contrasts. A main effect in a model with interactions is then tested at the centre of
the design, and the result is reported withcoding: "coded", itsfactor_coding, and the
equation on the factors' own scale ascoefficients_actual. A numeric factor already coded to
-1/+1 is left as it is, and a Scheffe mixture model keeps"actual". The other analyses do not
usecodingand are unchanged.- Pass
coding="actual"to keep the old scale.coding=None, and anullin the agent tool, mean
"auto". - The
FutureWarningand thecoding_notekey that announced the change are removed.
- Pass
Deprecated
- The module-level
DEFAULT_TIMEOUT_S,DEFAULT_MAX_CELLS,DEFAULT_MAX_STRING,
DEFAULT_MAX_DEPTHandDEFAULT_MEMORY_MBnames inprocess_improve.tool_safetyare deprecated
since 2.0.0 and will be removed in 3.0; usesettings.tool_timeout,settings.max_cells,
settings.max_string,settings.max_depthandsettings.max_memory_mbfrom
process_improve.config. A read still returns the current settings value, and now issues a
DeprecationWarning. The names were marked for removal in 2.0 but never warned, so the
deprecation cycle starts with this release.
Removed
random_seedis removed; userandom_state. It was deprecated since 1.97.0. Passing
random_seed=togenerate_design,evaluate_design,evaluate_allorgenerate_omarsnow
raisesTypeError, and thegenerate_designagent tool refuses it as an unknown key, as it
refuses any other.random_statetakes an int, anumpy.random.GeneratororNone, and its
default (42) gives the same designs as before. The parameters that followedrandom_seedin
those signatures each move up one position.- The
i_efficiencymetric ofevaluate_designis removed; use
"average_prediction_variance". It was deprecated since 1.97.0. Asking for it now raises the
ValueErrorany unknown metric raises, which lists the metrics there are. The replacement
reports the I-criterion itself: the prediction variance averaged over the region, in units of
the error variance, where lower is better."i_optimality"and"i_criterion"remain aliases
for it. optimize_responses(..., desirability_weights=)is removed; useresponse_importance. It
was renamed in 1.62.0, since the values are importances, which set how much each response
counts in the overall desirability, and not the per-goalweightthat shapes a response's
ramp. Passing it now raisesTypeError, and theoptimize_responsesagent tool refuses it as
an unknown key. The parameters that followed it in the signature each move up one position.- The empty
ilpextra. It was deprecated since 1.97.0, whengenerate_omarsmoved from
pulp's CBC solver to SciPy's HiGHS, a core dependency.pip install 'process-improve[ilp]'now
warns that the extra does not exist and installs the core package, which is all it ever added. PCA.predict,MBPCA.predict,MBPLS.predictandTPLS.predict. Each one forwarded to
diagnose, which returns the sameBunch, so calldiagnoseinstead.PLS.predictand
OPLS.predictare the scikit-learn regressor method and stay.TPLS.tolerance_. ReadTPLS.tolinstead.permutation_q2andpipeline_null. Usecheck_predictive_signal(x, y, fit_predict)and
count_discoveries_under_null(select, x, y);check_predictive_signaltakes the blocks first.- The
empirical_fdrkey of thecount_discoveries_under_nullresult. Read
null_to_observed_ratio, which is the same ratio without the clip to[0, 1]. OPLS(max_iter=..., tol=...). The single-response algorithm is closed form and never read
them, so leave them out; passing either now raisesTypeError.- The
md_tolandmd_max_iterkeys ofmissing_data_settingsonPCA,PLS,MBPCAand
MBPLS. Passtolandmax_iterto the constructor instead. A dict that still holds either
key raisesValueErroratfit, since ignoring a convergence setting would change the fit. PCA.select_n_components(n_iter=..., tol=..., threshold=...). Useekf_max_iterand
ekf_tol.thresholdwas already ignored;selection_rule="q2_increment"with
min_q2_increasegives a similar preference for fewer components.PCA.select_n_components(cv_scheme="row_wise")and its**pca_kwargs. Use"ekf",
"ckf","ek","sacv"or"gcv", which theValueErrorfor"row_wise"now lists.
**pca_kwargsreachedPCAonly under that scheme, so an unknown keyword now raisesTypeError
instead of being ignored.process_improve.sensory.discriminate_observational. Deprecated since 1.77.0. Use
find_predictive_descriptors, which takes the same arguments and returns the same result. The old
name now raisesImportErroron import andAttributeErroron attribute access.- The
discriminator=keyword ofrelate_observationalandanalyze_descriptive. Deprecated
since 1.77.0. Usefind_predictive=. Passingdiscriminator=now raisesTypeError. The
sensory_analyze_descriptivetool no longer declares adiscriminatorfield, and because its
schema forbids unknown keys, a call that sends it now fails validation with
ToolInputInvalidError. - The
discriminatorkeys in sensory results. Deprecated since 1.77.0. Read
result.relate["predictive_descriptors"]instead ofresult.relate["discriminator"], and
result.config["find_predictive"]instead ofresult.config["discriminator"]. q_valueanddiscriminator_significanton thefind_predictive_descriptorsdescriptor
records. Deprecated since 1.77.0. Readp_value_fwerandis_predictive, which carry the same
values. Theq_valueon the marginalassociationsrows ofrelate_observationalis a
Benjamini-Hochberg q-value and stays.- The
"z value"and"Pooled standard deviation"keys ofttest_independent. Deprecated
since 1.70.0. Read"t value"and"Std error of difference", which carry the same values. The
statistic is a t-statistic, and the second key held the standard error of the difference, not the
pooled standard deviation, which is"Pooled std dev". The two columns are also gone from
ttest_independent_from_df. Reading an old key now raisesKeyError. The paired test,
ttest_paired, is unchanged. - The
z_valueandpooled_stdfields of thettest_two_samplestool. Deprecated since 1.70.0.
Readt_valueandstd_error_of_difference. Thepooled_std_devfield stays. The
ttest_paired_samplestool is unchanged.
Fixed
evaluate_designno longer calls a full-rank model rank-deficient because of its factors'
units. It took the rank of X'X, whose condition number is the square of X's: with a column of
x1 (to 100) beside one of x1²x2 (to 2,000,000), X's is 7e7 and X'X's passes the precision of a
double, so the model got no VIFs, D-efficiency or prediction variance. The rank, and the inverse
of X'X, are now worked on X with each column scaled to unit length, which changes neither. The
five tolerances of Schmidt and Launsby's Table 4.20, which the reference catalogue could not check
before, are checked: four agree, and the fifth repeats the next row's value in the book.- A Taguchi design for one 2-level and seven 3-level factors takes 18 runs, not 36. The
library stores the L18 asL18(6^1 3^6), and the design gave each factor a column of its own, so
the eighth factor found none and the design moved on toL36(3^23). When no array has a column
for every factor, a column whose level count is a product of two factors' counts now carries both,
each factor taking a digit of the column's level: the 6-level column is the 2-level and a 3-level
column of Taguchi's L18, and a 4-level column ofL16(4^5)carries two 2-level factors, so one
4-level and six 2-level factors take 16 runs rather than 32. Every pair of columns is still checked
to be balanced,metadata["columns"]names a shared column twice, and a design whose array
already had a column for every factor is unchanged. - The reference catalogue's regression sum of squares is the total less the residual's. It
was the sum of the Type II rows of the ANOVA, which leaves out what correlated terms share, such
as the squares of a composite design; for orthogonal designs the two are the same, and every
number already in the catalogue still reproduces. - A number the reference catalogue reads in E-notation is held to the digits it prints. 1.25E+08
allows half a million either side; it was held to half a unit, so a correct number printed that way
could not agree. No number already in the catalogue was printed in E-notation with a positive
exponent. - Linear constraints in 6 or more factors are recognised as linear. The test for an
affine constraint fitted it on points that, from 6 factors, do not determine an affine
function, so every linear constraint was treated as curved: the candidate set of a
constrained optimal design lost the region's vertices, and its sampler fell back to a
slower method. - Constrained optimal designs and
evaluate_design(region=)reach every vertex of a
region with many limits. The vertices among the candidates, and among the support
points thatevaluate_designtakes its worst case over, came from solving every choice
ofkboundaries, which was given up past 200000 choices (8 factors and 5 limits): a
region of 8 factors and 6 limits had 236 of its 758 vertices listed, its D-optimal
designs lost about 5% of D, andevaluate_designgave a worst case 7% below the
variance at a vertex. They are now found by cutting the box with one limit at a time, as
DesignRegionfinds them: the same vertices wherever the old way finished, and every
one up to 8192 of them. - Constrained optimal designs keep the corners of a steep straight limit. Candidates,
supplied candidates and fixed runs were held to each limit with a tolerance of1e-9in
the limit's own units, so a corner lying1e-12(coded) off the boundary of a steep limit
failed it:120*T + 33*D + 450*F <= 17000lost 3 of its 8 vertices from the candidates,
the corners thatDesignRegion.vertices()reports were dropped when supplied as
candidates (30*T + 70*D <= 7000then kept too few to fit a model), and one of them, as
a fixed run, was said to lie outside the region. As inDesignRegion.feasible, the
tolerance is now a distance of1e-9in coded units for a straight limit whose coded
gradient is longer than 1. - A constraint that cannot be evaluated over part of the factor box is treated as
curved. Wheresqrtorlogof a negative number, or a division by zero, made the
constraint infinite orNaNat some probe point, the test for an affine constraint
passed it, and its fitted form stood in for it: the secant plane through the points
where it was finite (0.5 <= A/B <= 2withBfrom 0), or a form ofNaN, which the
hit-and-run chains ignore (sqrt(A - 149) + B <= 21withAfrom 100 to 150 andB
from 20 to 60). In a region too thin to sample by rejection, the chains then did not
keep to the constraint: none of 2000 samples of thatsqrtlimit met it, so
evaluate_design(region=)and the moments of an I-optimal design averaged over settings
outside it, and none of the 6 runs of a maximin or a maxpro design met it. - Samples of a thin region no longer depend on the sign of an eigenvector. A region too
thin to sample by rejection (one that keeps under 1% of the box for the 20000 points that
compare_designsand an I-optimal design's moments draw, or under 5% for the 100000 of
evaluate_design) is sampled by hit-and-run chains, whose directions used eigenvectors
of a covariance, and those have no fixed sign: native Python and Pyodide took different
steps, and their averages over such a region differed in the third or fourth figure.
The directions now use the Cholesky factor, which is unique. The chains still magnify
differences in the last bit of the platforms' arithmetic, so in 6 or more factors these
averages agree to about 7 to 11 figures, not to every one. DesignRegion.feasibleaccepts a point on a straight limit's boundary however the
limit is scaled. It compared a limit's value with1e-9in the limit's own units, so
a point on the boundary of120*T + 33*D + 450*F <= 17000could fail where the same
limit divided by 100 passed. For a straight limit whose coded gradient is longer than 1,
the tolerance is now a distance of1e-9in coded units; a gentler limit keeps its
tolerance in its own units, which is the wider of the two, so nothing that passed before
fails.- A single limit passed outside a list is refused with a clear message.
constraints="T <= 160"was read character by character and reported that a limit
named'T'is not an inequality; a lone string, dict orConstraintnow raises a
TypeErrorthat shows the list to write.