4. Defining input variation models
A Monte Carlo variation study is only as credible as the input distributions that feed it. Restraint parameters — anchor capacity, cable pretension, friction coefficient, bracket stiffness, bolt-hole clearance, and installation tolerance — rarely follow a single convenient shape. Some are symmetric and bounded by manufacturing control; others are strictly positive and heavily right-skewed; still others are best described by a wear-out or strength-life model. This chapter establishes a disciplined workflow for choosing a distribution family, fitting it to empirical data, and validating that the fitted model is defensible before it is propagated through the simulation.
Why the Distribution Family Is a Design Decision
Selecting a distribution is not a statistical formality. The tail behavior of the chosen family directly controls the probability of extreme restraint demands, and restraint design is fundamentally a tail problem. A normal model and a lognormal model fitted to the same mean and coefficient of variation will agree near the median but diverge sharply in the upper tail — precisely where failure is evaluated. The practical rule is to let the physical generating mechanism and the observed data support the choice, not convenience or default software settings.
- Normal: appropriate for symmetric, additive-error quantities with no hard physical bound — for example, a pretension setting deviation dominated by many small independent adjustment errors. Risk: it assigns nonzero probability to negative values, which is physically impossible for capacity or stiffness.
- Lognormal: appropriate for strictly positive, multiplicative quantities — material strength, anchor pull-out capacity, cable break load. Products of many positive factors tend toward lognormality, and the right skew matches observed capacity scatter.
- Uniform: appropriate when only a tolerance band is known and no central tendency is justified — for example, a bolt-hole clearance governed solely by drawing limits, or a shim thickness selected from discrete stock.
- Weibull: appropriate for strength and life quantities with a weakest-link or wear-out mechanism, and the natural choice when the shape parameter itself carries engineering meaning (shape < 1 infant mortality, ≈ 1 random, > 1 wear-out).
From Raw Observations to a Fitted Model
Suppose a restraint program has pull-test data for a bracket anchor family: 24 destructive test results in kN, plus a drawing tolerance for hole clearance and a supplier statement for pretension scatter. The workflow below is representative and the numbers are illustrative teaching values, not measured results.
- Inspect before fitting. Plot the empirical CDF on probability paper or compute sample skewness and the coefficient of variation (CoV). A capacity sample with CoV ≈ 0.18 and clear right skew argues against normal and toward lognormal or Weibull.
- Estimate parameters by maximum likelihood (or method of moments for a quick check). For a lognormal fit, transform to logs and compute the mean and standard deviation of the log sample; these are the fitted μ and σ of the underlying normal.
- Check goodness of fit with Anderson–Darling or Kolmogorov–Smirnov statistics and a visual Q–Q plot. Compare candidate families on the same data rather than accepting the first fit.
- Truncate or censor where physics demands it. Apply a lower bound at the minimum credible capacity and an upper bound at the test-rig ceiling so the sampler cannot generate impossible values.
- Record the model card — family, parameters, units, bounds, data source, and fit statistic — so the study is reproducible.
A compact fitting snippet in Python illustrates the mechanics for the capacity sample:
import numpy as np
from scipy import stats
capacity_kN = np.array([...]) # 24 destructive pull-test results
# Lognormal fit via log-transform
ln_c = np.log(capacity_kN)
mu_ln, sd_ln = ln_c.mean(), ln_c.std(ddof=1)
# Weibull fit via maximum likelihood
shape_w, loc_w, scale_w = stats.weibull_min.fit(capacity_kN, floc=0)
# Goodness of fit comparison
ad_ln = stats.anderson(np.log(capacity_kN), dist='norm').statistic
ks_w = stats.kstest(capacity_kN, 'weibull_min',
args=(shape_w, loc_w, scale_w)).statistic
print(f"lognormal: mu={mu_ln:.4f}, sigma={sd_ln:.4f}")
print(f"weibull: k={shape_w:.3f}, lambda={scale_w:.3f}")
print(f"AD(lognormal)={ad_ln:.3f} KS(weibull)={ks_w:.3f}")
For the uniform clearance parameter, no fitting is needed — the bounds come directly from the drawing: clearance ∈ [0.2, 0.8] mm, so U(0.2, 0.8). For pretension, if the supplier reports a mean of 42 kN with CoV 0.08 and no evidence of skew, a normal model truncated at zero is defensible; if the report shows a long upper tail from over-tensioning events, switch to lognormal and re-justify.
Reading the Fit: What the Diagnostics Tell You
The Q–Q plot is the fastest diagnostic. Points tracking the reference line in the central region but peeling away in the upper tail indicate that the fitted family underestimates extreme capacity — a dangerous bias for restraint design, because it makes the structure appear safer than the data support. In that case, prefer the family whose upper-tail behavior matches the data, even if its central fit is marginally worse. Report the fitted 5th and 95th percentiles alongside the parameters; these are the numbers the Monte Carlo study will actually exercise.
Propagating the Fitted Models into the Study
Once each restraint parameter has a validated model card, the Monte Carlo sampler draws from these distributions independently unless correlation is physically justified — for example, anchor capacity and bracket stiffness may share a manufacturing lot effect and should be coupled through a Gaussian copula rather than sampled independently. The figure below summarizes the decision path from physical mechanism to fitted model to sampler input, and shows where validation gates sit.
Common Failure Modes and How to Catch Them
Three mistakes recur in restraint variation studies. First, defaulting to normal for capacity: the sampler produces negative draws, the analyst clips them at zero, and the resulting distribution is silently distorted near the lower tail. Fix: use a positive-support family or an explicitly truncated normal with the truncation documented. Second, fitting to the mean and CoV only: two families can share these moments and disagree at P95. Fix: compare Q–Q plots and tail percentiles, not just moments. Third, ignoring correlation: sampling capacity and stiffness independently when both derive from the same lot understates the joint extreme. Fix: inspect the data for correlation, and if present, model it with a copula and record the correlation matrix on the model card.
The deliverable of this stage is a complete set of model cards — one per restraint parameter — each carrying the family, fitted parameters with units, physical bounds, data provenance, fit statistic, and the fitted P5/P95 values. When those cards are consistent, justified, and validated against the data's tail behavior, the Monte Carlo study that follows has a defensible foundation rather than a set of convenient assumptions.