Changelog
This book is a living document. Major additions and changes are recorded here so returning readers can see what is new. It is developed openly on GitHub, where the full commit history lives in detail; this page is the readable summary.
2026
New parts and chapters
- Preparing Our Data part added - the Data Reduction chapter (fewer, better measures; reliability to power).
- Latent Variable Models part added - CFA/SEM, Measurement Invariance, Latent Class, and IRT & Generalizability.
- Causal Inference part added - DAGs and the back-door criterion, from the Statistical Rethinking course.
- Beyond the Normal Curve part added - resampling, robust methods, and Bayesian inference.
- Displaying Data part added - Graphics and Tables.
- Statistics in the Wild apprenticeship part added - The Sports Page and four case studies (depression profiles, building a measure, missing data).
- The Methods in Practice showcase added - the authors’ published work, organized by method.
- The Coding Categorical Predictors chapter and the Rasch chapter (honoring Ben Wright, using his Knox Cube Test data).
Enrichments to existing chapters
- Anscombe’s quartet and the residual bridge added to the covariance chapter.
- Types of sums of squares (variance partitioning) added to multiple regression.
- Measurement models (parallel, tau-equivalent, congeneric), a generalizability-theory framing, and “Variance Is the Fuel” (restriction of range) added to the reliability chapter.
- POMP scoring added to the z-distribution chapter.
- The replication-crisis Bayes calculation and estimation-versus-testing asides woven through the inference chapters.
Four languages, every chapter
- Every chapter that computes anything now shows it in R, SPSS, Julia, and Python - 109 code tabsets in all. The R tab is the live one; the other three are static equivalents you can paste into your own environment.
- Where a language genuinely cannot do a procedure, its tab says so and points to what can. Base SPSS has no power analysis (SamplePower or G*Power), no latent class analysis (Latent GOLD, Mplus, or
poLCA), and no Rasch calibration (Winsteps, ConQuest, oreRm/TAM). Naming the gap is more useful than faking syntax that would not run.
The code itself
- Every running example rewritten in the tidyverse.
dplyrandtibblein place ofdata.frameand$-indexing,ggplot2in place of the last base plots,purrr::map_*in place ofsapply/replicate/apply,readrin place ofread.csv, andbroomfor printing model results. The statistical engines (lm,aov,glm,factanal,prcomp) are still base R, and so is every from-scratch derivation. - Two decimal places everywhere, via a shared
round2()helper, so results are readable and consistent. P-values are the deliberate exception: three decimals, with anything below .001 reported as< .001, because a p-value rounded to0.00reads as a certainty no p-value ever has. - A setup page documenting the packages and reprinting the three shared helpers in full.
Presentation and back matter
- Light and dark reading modes with a navbar toggle (defaulting to light), framed figure cards, tidy tables, and larger key-term callouts with a 🔑 marker.
- A voice pass across the whole book for clear, supportive prose.
- Inviting cover, author biographies, and a to-be-written foreword.
- This back matter added: the changelog, the required-packages setup page, and the R / SPSS / Julia / Python code-tabs appendix.
Origins
The book began as a set of chapter drafts and an introduction, and grew into a full graduate methods text drawn from the authors’ decades of teaching and research in the social and behavioral sciences.