@hackage / hanalyze-design

Design-of-experiments layer of hanalyze (DoE / MSA)

Latest0.2.0.1

About

Metadata

  • Last updated , by frenzieddoll
  • License BSD-3-Clause
  • Categories Mathematics
  • Maintained by: frenzieddoll@gmail.com

  • Lottery factor: 0

Links

Installation

Tested Compilers

  1. 9.6.7

Readme

hanalyze-design

The design of experiments (DoE) layer of hanalyze. It owns both the generation of designs (factorial / orthogonal arrays / RSM / optimal design / space-filling / mixture) and the evaluation of the resulting data (ANOVA / power / process capability / measurement system analysis) — 30 modules in total.

It depends on the three layers core / frame / models, plus 10 external packages. Because model fitting is delegated to -models, the quadratic model for RSM and the information-matrix computation for optimal design are not self-contained here — they use regression from the models layer. -viz sits on top of this layer.

Main modules (30 in total)

Classical design generation (Hanalyze.Design.*)
Module Role
Design.Factorial Full / two-level / three-level / fractional / mixed-level factorial designs — the entry point for DoE
Design.Orthogonal / Design.Taguchi Orthogonal arrays (L8 / L9 / L12, …) / robust design via SN ratio and inner/outer arrays
Design.Mixed / Design.Block Mixed-level designs / blocking (randomized block design)
Design.DSD Definitive Screening Design (Jones-Nachtsheim 2011)
Design.RSM Response surface methodology — CCD/Box-Behnken generation, quadratic model fit, analytical solution for the extremum
Optimal design, space filling, and mixture
Module Role
Design.Optimal D / A / I / E / G-optimal (Fedorov exchange algorithm) plus augmenting an existing design (augmentDesign)
Design.SpaceFilling Space-filling designs — LHS / Maximin LHS / Halton (for computer experiments)
Design.Mixture Mixture designs — Simplex Lattice / Simplex Centroid (component proportions sum to 1)
Design.MultiRSM Simultaneous optimization of multiple responses (used together with Desirability)
Custom Design (Design.Custom.*)

A general-purpose design-generation system where the user assembles factors, model, and constraints. 11 modules.

Module Role
Custom.Factor / Custom.Model Factor definitions (continuous / categorical / discrete numeric) / specifying model terms
Custom.Constraint / Design.Constraint Narrowing candidate points under linear/nonlinear constraints
Custom.Augment Menu for adding runs (AddRuns, etc.) — calls Design.Optimal.augmentDesign
Custom.SplitPlot Split-plot experiments (whole plot / sub plot)
Custom.Bayesian Bayesian D-optimal design (DuMouchel-Jones 1994)
Custom.Power / Custom.Compare Power evaluation / comparison of multiple designs
Custom.Coordinate / Custom.Structured / Custom.RegionMoment Coordinate-exchange algorithm / structured designs / region moment matrix (I-optimal)
Analysis & evaluation
Module Role
Design.Anova Analysis of variance (significance of factor effects)
Design.Diagnostics Design diagnostics (confounding / alias structure / condition number)
Design.Power Power and required-sample-size calculations
Design.Quality Process capability indices (Cp / Cpk, etc.)
Design.GaugeRR Gauge R&R — measurement system analysis (per AIAG MSA 4th ed.)
Sequential & workflow
Module Role
Design.Sequential Sequential RSM — steepest-ascent path generation and placement of the next CCD
Design.Workflow Support for the design → experiment → analysis → next-design cycle

Using it standalone

If you only need to generate designs, this package alone is sufficient:

build-depends: hanalyze-design
import Hanalyze.Design.Factorial (twoLevelFactorial, fullFactorial)

main :: IO ()
main = do
  mapM_ print (twoLevelFactorial 3)
  -- [-1.0,-1.0,-1.0] / [-1.0,-1.0,1.0] / … / [1.0,1.0,1.0]  (2³ = 8 run)
  mapM_ print (fullFactorial [[180, 200, 220], [10, 20]])
  -- [180.0,10.0] / [180.0,20.0] / [200.0,10.0] / … / [220.0,20.0]  (3×2 = 6 run)

twoLevelFactorial k produces a coded (±1) 2^k design; fullFactorial takes the Cartesian product of the given per-factor level lists directly, so the resulting design table stays in the original units.

Normally you would just depend on the umbrella package hanalyze and get all of the above from a single import Hanalyze. Naming a layer directly is only worth it when you want to minimize dependencies.

repository README