Atlas
statminds
Non-Parametric GLM (Smoothing Spline Model)The underlying model family class (e.g. GLM, linear model, categorical matrix, log-linear).Parametric ReferenceStatistical methods that assume a specific probability distribution family (typically normal).12-stage workflow

Generalized Additive Models

The engine for Non-Linear Discovery. GAMs audit complex, wiggly relationships using smoothing splines, allowing the data to dictate its own 'shape' rather than forcing a straight-line narrative.

Model familyNon-Parametric GLM (Smoothing Spline Model)
Hypothesistwo-tailed
AliasesGAMs · Smoothing Spline Regression · Semi-Parametric Additive Modeling
G1
Non-Linear Mapping
Capture the 'Wiggly Truth' of relationships that linear models inadvertently flatten or ignore.
G2
Spline-Based Discovery
Utilize mathematical splines to audit the specific thresholds where a predictor's influence peaks or plateaus.
G3
Flexible Predictive Audit
Construct high-fidelity forecasts that respect the inherent curves of biological and social trajectories.
1

What is it?

Generalized Additive Models (GAM) extend linear regression by allowing non-linear relationship fits using smooth basis function splines, rather than forcing straight-line models.

2

When to use it

  • Non-Linear Curvature: Predictor relations curve, wave, or bend non-linearly.
  • Flexible Smoothness: Balance linear straightness vs. wiggly overfitting.
  • Interpretability: Fit flexible curls without complex high-degree polynomials.
3

Spline vs. OLS Line

Compare a standard OLS straight line fit (poor representation of curved data) against a flexible GAM spline curve fit:

GAM Spline FitOLS Straight Line
Interactive Sandbox

GAM Spline Fitting Laboratory

Adjust spline wiggliness (basis functions df) to see the spline curve adapt to non-linear noise.

Presets
Spline Wiggliness (df)3
Noise Level10
GAM Spline vs Linear OLS (X: -3 to 3; Y: 0 to 100)Blue curve shows active spline fit
The 12-Stage Precision Workflow
01Shape Significance
Hypotheses
We test the null of zero influence against the discovery of a non-zero, potentially non-linear, predictive curve.
02Additivity Parity
Assumptions
Ensuring the joint effect of predictors can be modeled as the sum of their individual smooth functions—the 'Additive' mandate.
03Basis Dimension (k)
Diagnostics
Checking if the complexity of the spline (k) is sufficient to capture the pattern without overfitting the random noise.
04focus
Mapping the relationship between Age and FlowMotion Proficiency—where efficacy might peak at mid-age and curve downward thereafter.
05GLM Pivot
Alternatives
Knowing when to simplify back to a standard GLM if the GAM diagnostics reveal the relationship was actually linear all along.
06Effective DF (edf)
Significance
Reporting the 'edf'—a metric of wiggliness. An edf of 1.0 is a straight line; an edf of 5.0 is a highly complex, multi-inflection curve.
07Deviance Explained
Effect Size
Interpreting the percentage of 'Deviance' captured by the smooth terms—the non-linear equivalent of R-squared.
08The Curve Buffer
Sample Size
Accounting for the increased N required to stabilize complex splines compared to simple straight-line coefficients.
09Visual Narratives
Reporting
Providing Partial Effect Plots—the only valid way to communicate the non-linear story told by a GAM.
10mgcv Logic
Software
Executing 'gam(y ~ s(x))' commands, ensuring the smoothing parameter selection (REML) is optimized for discovery.
11focus
Identifying the 'Identity Loss' error—using a smoothing penalty so high that it crushes the true signal into a linear shadow.
12focus
Tracing the model back to Hastie and Tibshirani (1990) and the foundational work of Wood in the 'mgcv' framework.
01Hypothesis test logic

Hypotheses

Pragmatic null and alternative hypotheses defined in mathematical notation.

We ask not just 'is there a link?', but 'how much does Y change for every unit of X?'
Logic Core
Null · H₀

H₀: f(X) = β₀ (smooth function has no effect, reduces to intercept-only)

Alternative · Hₐ

Hₐ: f(X) ≠ β₀ (smooth function has non-zero effect)

Why it matters two-tailed

Tests are performed for each smooth term. Can test linear vs non-linear using approximate F-tests or AIC/BIC comparisons.

02Model diagnostics

Assumptions

The core mathematical criteria needed to ensure that statistical testing remains unbiased and valid.

Linearity is a strong claim. Nature often curves; ensure your model does not force a straight line on a bent world.
Integrity Shield
6
Assumptions
4
Critical / High Severity
How to check
Quick
Review study design; check for repeated measures, nested data structure, or time series
Rigorous
ACF plots for time series; ICC calculation for clustered data; examine residual autocorrelation
If violated
If clustered: use GAM with random effects (gamm in mgcv). If time series: include correlation structure via gamm with corCAR1 or corAR1. If spatial: use tensor product smooths with spatial coordinates. If repeated measures: add subject-specific random intercepts/slopes
How to check
Quick
Check outcome type: continuous → gaussian, binary → binomial, count → poisson/nb. Residual plots should show no systematic patterns
Rigorous
Deviance residuals vs fitted; Q-Q plots; overdispersion test for count data (deviance/df should be ~1)
If violated
Continuous with skew: try Gamma(link='log') or inverse.gaussian. Count with overdispersion: switch from poisson to negative binomial (family=nb()). Binary: usually binomial with logit link is correct. Zero-inflated: use GAMLSS (gamlss package). Heavy-tailed: use tw (Tweedie) family
How to check
Quick
Fit model with and without interaction smooths (te(), ti(), s(x1,x2)); compare AIC/BIC. Visual inspection of predictions across predictor space
Rigorous
Use tensor product interactions te(x1,x2) and test significance; examine marginal effects at different levels of other predictors
If violated
Add interaction smooths: te(x1,x2) for tensor product, ti() for pure interaction. Use varying coefficient models: s(x1, by=x2). Include parametric interactions for linear-by-smooth effects. Consider multivariate adaptive regression splines (MARS) if many interactions
How to check
Quick
Rule of thumb: n ≥ 10k observations per smooth term (where k is basis dimension). Check if edf (effective degrees of freedom) < k-1
Rigorous
k-index from gam.check() should be >1. Simulate data and check smooth recovery. Cross-validation (k-fold CV) to assess overfitting
If violated
Reduce basis dimensions: s(x, k=5) instead of default k=10. Use penalized regression splines (default in mgcv handles this). Switch to simpler model: polynomial regression or linear model if n very small. Increase sample size if possible. Use stronger penalties (gamma parameter in gam())
How to check
Quick
Residual vs fitted plots; should be random scatter. Partial residual plots for each smooth to check fit quality
Rigorous
Use gam.check() diagnostics; k-index and p-value tests. ACF of residuals should show no autocorrelation. Qq-plots for distributional fit
If violated
Increase basis dimension: s(x, k=15) or k=20. Try different basis types: s(x, bs='cr') (cubic spline, default), bs='tp' (thin plate), bs='ps' (P-splines). Add omitted variables. Include interaction smooths. Check for outliers affecting smooth
How to check
Quick
Use concurvity() function in mgcv; values >0.8 indicate problems. Check pairwise correlations of smooth predictions
Rigorous
Full concurvity check across all smooth terms; examine worst-case concurvity indices
If violated
Remove redundant smooth terms. Use tensor products te() to combine correlated predictors into single smooth. Center/scale predictors. Use ridge penalty. Never include perfectly collinear transformations (e.g., X and X² as separate smooths)
03Residual Forensics

Diagnostics

Checking residual plots and indices to examine model deviations and ensure standard error integrity.

Trust, but verify. The outliers often hold more truth than the averages.
System Health
Essential checks
  1. gam.check() output: basis dimension adequacy (k-index), residual plots, QQ-plots
  2. Partial effect plots: visualize each smooth function with confidence bands
  3. Concurvity check: concurvity(model) to detect collinearity among smooths
Recommended checks
  1. Compare model to linear version using AIC/BIC (anova(linear_model, gam_model))
  2. Cross-validation to assess predictive performance and overfitting
  3. Check effective degrees of freedom (edf) for each smooth; edf ≈ 1 suggests linear
  4. Residual autocorrelation plots (ACF) if time series or spatial data
  5. Influence diagnostics to detect outliers affecting smooth estimation
04Live Instances

Applied Minds

Review concrete study examples, data layout guidelines, and copy executable syntax scripts.

Theory is the map. Practice is the terrain. Simulation bridges the gap.
Applied Wisdom
Example 01

Non-linear Relationship Between Age and Cognitive Function

Research question: How does cognitive function change with age, accounting for education and gender? Design: Cross-sectional (n=400). Outcome: Cognitive test score (continuous, 0-100). Predictors: Age (non-linear relationship expected), education, gender. GAM captures U-shaped or inverted-U patterns that linear regression misses.

DesignCross-sectional
Outcome ScaleCognitive test score (continuous, 0-100)
# GAM: Non-linear age effects on cognitive function
library(mgcv)       # For GAM
library(ggplot2)
library(gratia)     # For GAM visualization

set.seed(2025)
n <- 400
data <- data.frame(
  age = runif(n, 20, 85),
  education = rnorm(n, 14, 3),
  gender = sample(c("Male", "Female"), n, replace=TRUE)
)
data$education <- pmax(8, pmin(22, data$education))

# Cognitive score: inverted-U with age, steeper decline after 65
age_effect <- 85 - 0.3*(data$age-45)^2/10 - 
  ifelse(data$age > 65, 2*(data$age-65), 0)
data$cognitive <- age_effect + 
  1.5*data$education +
  ifelse(data$gender=="Female", 3, 0) +
  rnorm(n, 0, 8)
data$cognitive <- pmax(0, pmin(100, data$cognitive))

# === STEP 1: Compare Linear vs GAM ===

# Linear model (misspecified)
lm_model <- lm(cognitive ~ age + education + gender, data=data)
summary(lm_model)

# GAM with smooth for age
gam_model <- gam(cognitive ~ s(age, k=10) + education + gender, 
                 data=data, method="REML")
summary(gam_model)

# Compare models
AIC(lm_model, gam_model)
anova(lm_model, gam_model, test="F")
# GAM should have significantly better fit

# === STEP 2: Check GAM Diagnostics ===

gam.check(gam_model)
# Check: k-index >1 (basis adequate)
# Check: residual plots show no pattern
# Check: QQ-plot shows normality

# Concurvity (collinearity for smooths)
concurvity(gam_model, full=TRUE)
# Values <0.8 indicate no problematic concurvity

# === STEP 3: Visualize Smooth Function ===

# Partial effect plot for age
plot(gam_model, select=1, shade=TRUE, shade.col="lightblue",
     main="Non-linear Effect of Age on Cognitive Function",
     xlab="Age(years)", ylab="s(Age)", rug=TRUE)

# Using gratia for nicer plots
draw(gam_model, residuals=TRUE)

# Manual prediction plot
age_seq <- seq(20, 85, length=100)
pred_data <- data.frame(
  age = age_seq,
  education = mean(data$education),
  gender = "Male"
)
pred <- predict(gam_model, newdata=pred_data, se.fit=TRUE)
pred_data$fit <- pred$fit
pred_data$lower <- pred$fit - 1.96*pred$se.fit
pred_data$upper <- pred$fit + 1.96*pred$se.fit

ggplot(pred_data, aes(x=age, y=fit)) +
  geom_line(color="blue", size=1.2) +
  geom_ribbon(aes(ymin=lower, ymax=upper), alpha=0.3, fill="blue") +
  geom_point(data=data, aes(x=age, y=cognitive), alpha=0.3) +
  labs(title="Predicted Cognitive Function by Age(GAM)",
       subtitle="Male with average education",
       x="Age(years)", y="Cognitive Score(0-100)") +
  theme_classic()

# === STEP 4: Test Smooth Significance ===

# Approximate F-test for smooth term
summary(gam_model)$s.table
# edf: effective degrees of freedom (1 = linear, >1 = non-linear)
# p-value: test if smooth differs from zero

# === STEP 5: Compare to Polynomial ===

poly_model <- lm(cognitive ~ poly(age, 3) + education + gender, data=data)
AIC(lm_model, poly_model, gam_model)
# GAM typically has lowest AIC

cat("\n=== Interpretation ===")
cat("\nGAM revealed significant non-linear age effect(edf=", 
    round(summary(gam_model)$s.table[1,"edf"], 2), ", p<.001).")
cat("\nCognitive function peaks around age 45-50, then declines,")
cat("\nwith accelerated decline after 65. Linear model(AIC=", 
    round(AIC(lm_model)), ") misses this pattern compared to GAM(AIC=",
    round(AIC(gam_model)), ").")
Interpretation Blueprint

GAM revealed significant non-linear age effect (edf=5.8, p<.001), capturing inverted-U pattern. Cognitive scores peak around age 45-50 (predicted score ~78), declining to ~55 by age 85. Linear model severely misspecified (AIC=2845 vs GAM AIC=2720, Δ=125). Education showed linear positive effect (+1.5 points per year, p<.001). Findings consistent with cognitive aging literature showing accelerated decline in late life (Salthouse, 2009).

05Tactical Pivots

Alternatives

Structured fallback pathways for choosing alternative tests when normality or slopes requirements fail.

When the path is blocked, pivot. Rigor is not rigidity; it is the intelligent adaptation to reality.
Adaptive Strategy
Measurement Precision Ladder Ideal · Curvilinear Continuous
Ratio
Maintain GAM logic. Capture the 'Wiggly Truth' of biological and clinical recovery paths.
Peak Signal
Interval
Ideal for Primary Scales. Ensure the 'Smoothing Spline' doesn't overfit random measurement noise.
Standard Robustness
Ordinal
Pivot to Ordinal GAM if the outcome is ranked—modeling the cumulative link using non-linear splines.
Threshold Loss
Nominal
Abandon GAM. Use Log-Linear Analysis to audit categorical synergy in multi-way grids.
Model Mismatch
Temporal Trajectory Audit Static Non-Linear Snapshot
Static Curve
Single point audit.
Stay with GAM. Utilize splines to identify peak treatment thresholds.
Repeated Curves
Trajectory wiggles.
Pivot to Generalized Additive Mixed Models (GAMM) to account for subject-specific non-linear recovery.
Adaptive Technical Safeguards · adaptive safeguards
relationship is actually linear
  • OLS Regression — Simplify the model if the 'Effective Degrees of Freedom' (edf) is near 1.0.
  • Linear Multiple Regression — Return to the most efficient parsimonious path.
over smoothing detected
  • Basis Dimension Audit — Increase 'k' to allow the model more flexibility to capture the signal.
  • REML Selection — Optimize the smoothing parameter to balance fit against parsimony.
high missing data
  • Multiple Imputation GAM — Mathematically reconstruct missing scores before fitting the non-linear curve.
06Adjusted Comparisons

Post-hoc

Group mean comparisons and correction controls (e.g. Tukey HSD, Bonferroni) to protect against Family-Wise Error Rates.

The omnibus test opens the door; post-hoc analysis explores the room.
Forensic Detail
Adjusted Comparisons
  • Compare different smoothing parameter selection methods (GCV, REML, ML)
  • Vary basis dimension (k) and check stability of smooth terms
  • Compare with parametric alternatives (polynomial regression)
  • Examine concurvity (GAM equivalent of multicollinearity)
  • Use gam.check() diagnostics for residual patterns
Interpretation Guidelines

GAMs model non-linear relationships. Traditional post-hoc tests are not directly applicable.

07Standardized scale impact

Effect Size

Understanding effect sizes (e.g., Cohen's d, Partial Eta-Squared) and clinical impact benchmarks.

Significance is noise. Magnitude is the signal. Measure the impact, not just the probability.
Impact Magnitude

Effective degrees of freedom quantify 'wiggliness' of smooth: edf ≈ 1 indicates linear relationship; edf > 1 indicates non-linearity. edf = 5 means smooth uses ~5 parameters. Maximum edf = k-1 where k is basis dimension

Analogous to R² but for GLMs. Proportion of deviance explained by model. Values typically lower than OLS R²

Visualize contribution of each smooth term holding others constant. Y-axis shows change in outcome (or log-odds, log-rate) per unit change in X

Recommended Metric: edf for each smooth (indicates non-linearity strength); partial effect plots with confidence bands
Small
0.2
Medium
0.5
Large
0.8
0.50
edf for each smooth (indicates non-linearity strength); partial effect plots with confidence bands
Recommended Measure
4
Available Metrics
ReportUse edf for each smooth (indicates non-linearity strength); partial effect plots with confidence bands to represent clinical impact magnitude.
08Statistical Power

Sample Size

Guidelines for minimum sample requirements and power analysis parameters.

An underpowered study is an ethical failure. Respect the data by collecting enough of it.
Power Protocol
Floor Requirements

The 'Wiggliness Buffer': A minimum of 25 participants per smoothing spline term is required. Flexible curves collapse into mathematical phantoms if the temporal or score depth is too shallow to allow the 'Bends' to emerge.

Effect SizeParametersRequired n
Small EffectLow Curvature (edf=1.5)n ≈ 450 total
Medium EffectModerate Curvature (edf=3.0)n ≈ 120 total
Large EffectHigh Curvature (edf=5.0)n ≈ 60 total
Key considerations

The 'Over-fitting Penalty': Every level of spline complexity (k) 'Consumes' power. If your N is small, use a low 'k' (e.g., k=3) to protect your discovery from measuring random sampling ripples as 'Real' curves.

G*Power StrategyBenchmark: Non-linear regression (GAM). Parameters: Degrees of Freedom (k), Non-linear signal (f²), α = .05, Power = .80. Note: GAM power is dictated by the complexity of the spline; complex curves require exponentially more N.
09APA narrative blueprint

Reporting

How to compile statistical results into publication prose matching APA and journal style guides.

The Beta coefficient is the currency of change. Interpret it in real-world units, not just standardized abstractions.
Narrative Arc
Reusable template

A generalized additive model (GAM) was fit using family and link function, e.g., 'Gaussian identity link' or 'Poisson log link'. Describe smooth terms: 'Smooth terms were included for X1 and X2 using cubic regression splines (k=10 basis functions).' Describe parametric terms: 'Gender was included as a categorical factor.' Model selection used REML for smoothing parameter estimation. Diagnostics confirmed adequate basis dimensions (k-index >1 for all smooths) and appropriate residual distribution. For each smooth: The effect of X1 was significantly non-linear (edf = X.X, p < .001), showing describe pattern: U-shaped, inverted-U, monotonic, etc.. The GAM explained X% of deviance and had better/similar fit compared to a linear model (ΔAIC = X.X, p < .001).

Essential statistics to report
  • Effective degrees of freedom (edf) for each smooth with p-values
  • Deviance explained (or adjusted R² for Gaussian)
  • AIC/BIC comparison to linear model
  • Basis dimension adequacy (k-index from gam.check)
  • Sample size and family/link
  • Description of smooth patterns (with plots)
10Exhibit Builder

Manuscript Lab

Copy standard summary tables and forensic reporting grids to outline analysis details.

Table 1: Generalized Additive Model for Non-Linear Trends
Parametric TermEstimateSEtp
(Intercept)25.40.8529.88< .001
Gender (Male)1.120.452.48.014
Note. Outcome: Cognitive Performance. Basis: Thin Plate Regression Splines. R² (adj) = .58.
s(Age) edf = 5.82High Non-linearity. Confirms that cognitive decline is not a straight line—it accelerates or plateaus at specific life stages.
R² (.58)Superior Fit. By allowing for non-linear wiggles, the model explains 58% of the variance, far more than a simple linear regression.
Header glossary

The 'Wiggle' Meter. edf = 1 is a straight line. edf > 1 indicates a non-linear, flexible curve. Higher = more complex relationship.

The Smoother. A mathematical function that allows the relationship between X and Y to change shape automatically based on data.

11Algorithmic Logic

Command Center

Syntax libraries and function parameters for executing calculations in stats packages.

Code your model to handle residuals. The errors tell you what your model missed.
Execution Engine
# 1. Fit GAM with Smoothers
model <- mgcv::gam(score ~ gender + s(age) + s(sleep), data = df)
summary(model)

# 2. Visualize Non-linear Splines
gratia::draw(model)
Library stack
R
mgcvgratiaggplot2
Python
pygam
Elite Forensic Strike

GAMs are the ultimate diagnostic tool. If you suspect your linear model is missing a curve, use a GAM to 'find' the shape of the relationship.

# Execute Basis Dimension Audit (Are the curves too wiggly?)
mgcv::gam.check(model)

# Compare GAM vs Linear OLS
performance::compare_performance(ols_mod, gam_mod)
12The Over-adjustment Trap

Common Mistakes

Analytical caveats and corrections to maintain modeling integrity.

Wisdom is learning from the failures of others. Anticipate the error before it occurs.
Defensive Logic
Why it's wrong
Default k (usually 10) may be too small for complex non-linear relationships or too large for small samples. Inadequate k undersmooths (misses true pattern), while excessive k overfits (high variance). gam.check() warnings indicate k too small
The correction
Always run gam.check() after fitting. If k-index <1 or p-value significant, increase k: s(x, k=15) or k=20. For small samples, reduce k to avoid overfitting: s(x, k=5). Check edf: if edf ≈ k-1, k may be too small. Use cross-validation to assess optimal k
Why it's wrong
Like all regression, GAM estimates associations, not causal effects. Non-linearity doesn't imply causation. Confounding, reverse causation, and omitted variables bias GAM estimates just as they bias linear models
The correction
Use causal inference designs (RCT, IV, RDD, propensity scores) for causal claims. In observational studies, state results as 'associations' not 'effects'. Control for confounders. Use sensitivity analyses. Be explicit about limitations
Why it's wrong
Concurvity occurs when smooth terms are highly correlated, leading to unstable coefficient estimates, inflated standard errors, and uninterpretable partial effects. Model may fail to converge or produce nonsensical smooths
The correction
Check concurvity(model, full=TRUE); values >0.8 problematic. Remove redundant smooths. Combine correlated predictors using tensor products: te(x1, x2). Use ridge penalties. Center/scale predictors. Consider domain knowledge to decide which terms to keep
Why it's wrong
GAMs require larger samples than linear models to estimate smooth functions reliably. With small n, smooths become unstable, overfitting is likely, and confidence intervals are too narrow. Standard k=10 basis requires ~100 observations
The correction
For n < 100: reduce basis dimension (k=5 or k=3), increase penalty (gamma parameter >1), or use simpler models (polynomial, linear). Bootstrap confidence intervals for robustness. Consider whether non-linearity is truly necessary or if linear model suffices
Why it's wrong
edf (effective degrees of freedom) ≈ 1 means the smooth is approximately linear, NOT that there's no effect. A smooth with edf=1.2 and p<.001 indicates a significant linear effect. Confusing edf with significance leads to missing real linear relationships
The correction
Check p-value for smooth, not just edf. If edf ≈ 1 and p < .05, there IS a significant effect (linear). If interested in non-linearity specifically, compare models: anova(lm_model, gam_model) tests whether non-linear terms improve fit beyond linear
Why it's wrong
Poisson and binomial GAMs assume mean-variance relationship. Real data often show overdispersion (variance > mean for Poisson). Ignoring overdispersion leads to underestimated standard errors, inflated significance, and anti-conservative inference
The correction
Check deviance/df ratio after fitting: >1.5 suggests overdispersion. Solutions: (1) Use quasi-Poisson: family=quasipoisson(); (2) Use negative binomial: family=nb(); (3) Use observation-level random effects in gamm(). Always report overdispersion check results
13Academic Lineage

References

Scholarly lineage and citation keys grounding the statistical framework.

We stand on the shoulders of giants. Honor the source of the method.
Academic Lineage
[1]
Hastie, T., & Tibshirani, R. (1990). Generalized Additive Models. Chapman and Hall/CRC.
Foundational textbook on GAM theory and practice
[2]
Wood, S. N. (2017). Generalized Additive Models: An Introduction with R (2nd ed.). Chapman and Hall/CRC.
Comprehensive modern treatment of GAMs with mgcv package focus
[3]
Salthouse, T. A. (2009). When does age-related cognitive decline begin? Neurobiology of Aging, 30(4), 507-514.
Documents non-linear cognitive aging trajectories. Basis for Example 1
doi: 10.1016/j.neurobiolaging.2008.09.023
[4]
Gasparrini, A., Guo, Y., Hashizume, M., et al. (2015). Mortality risk attributable to high and low ambient temperature: A multicountry observational study. The Lancet, 386(9991), 369-375.
Demonstrates non-linear weather-health relationships using distributed lag non-linear models. Basis for Example 2
doi: 10.1016/S0140-6736(14)62114-0
[5]
Wood, S. N. (2011). Fast stable restricted maximum likelihood and marginal likelihood estimation of semiparametric generalized linear models. Journal of the Royal Statistical Society: Series B, 73(1), 3-36.
Technical paper on REML smoothing parameter selection in mgcv
doi: 10.1111/j.1467-9868.2010.00749.x
Reality is rarely a straight line. If you force a curve into a linear mold, you are discarding the most important part of the truth. Let the splines speak.
The Interpretive Rigor Directive
statminds · GeneralizedMind reference · v2.2 · updated 2026-01-1715 of 15 sections