Preface

This is the Second Edition of Nonlinear Nonparametric Statistics: Using Partial Moments, updated and expanded by Fred Viole in 2026, building upon the foundational 2013 work with David Nawrocki.

This book presents the Nonlinear Nonparametric Statistics (NNS) framework as a coherent toolkit for modeling dependence, uncertainty, prediction, and decision-making without imposing restrictive distributional assumptions.

The chapters are organized to move from foundational concepts to practical modeling workflows:

  • first principles of nonlinear dependence and directional relationships,
  • nonparametric methods for regression, classification, and density-based tasks,
  • time-series forecasting frameworks for univariate and multivariate settings,
  • and implementation guidance for applied research and production analytics.

The central theme is consistent throughout: when data are asymmetric, heavy-tailed, nonlinear, or regime-sensitive, useful structure can still be extracted directly from the data-generating process using directional and nonparametric methods.

Executive Summary

This book is designed for readers who want mathematically grounded methods that remain practical in real-world settings where classical assumptions can fail.

At a high level, the NNS framework emphasizes:

  • distribution-agnostic modeling rather than strict parametric family selection,
  • directional dependence and causation diagnostics instead of purely symmetric association summaries,
  • nonlinear predictive systems that can adapt to heterogeneous signal structures,
  • and modular workflows in R so methods can be combined for exploratory analysis, forecasting, and risk assessment.

Readers can use the text in two ways:

  1. Sequentially, as a complete conceptual arc from core definitions to advanced forecasting systems.
  2. As a reference, by jumping directly to method-specific chapters and accompanying implementation examples.

Whether your domain is economics, finance, operations, policy, or scientific research, the goal is the same: to provide robust, interpretable, and applied nonparametric tools for difficult data.

About the Examples Repository

This book is designed to be used alongside the companion examples repository:

The repository is organized as a practical application layer. Conceptual and theoretical development lives in the book, while reproducible scripts and end-to-end demonstrations live in the examples.

A useful way to navigate both resources together is:

  1. Read the chapter for the theoretical framework and notation.
  2. Open the matching section in examples/README.md for runnable code patterns.
  3. Adapt those scripts to your own data and evaluate with your domain constraints.

The examples repository is intended for hands-on implementation, not as a substitute for the proofs and derivations developed in the text. Keep the repository disclaimer in mind when applying any script directly to production or policy settings; examples are instructional templates and should be validated, stress-tested, and context-calibrated before operational use.

About the Python Code

The NNS framework is also available as a Python package. Throughout the book, each R example is complemented by an equivalent Python workflow so that readers can follow the material in either language. The Python blocks show the functional calls only; outputs and figures are shown once through the R examples and are not reprinted.

The distribution package is ovvo-nns and the import package is nns:

pip install ovvo-nns
import nns

Source code and documentation live in the companion repository:

Conventions used by the Python code in this book:

  • Naming. R’s dot-separated names become snake_case: NNS.dep is nns_dep, LPM.VaR is lpm_var, Co.LPM is co_lpm, PM.matrix is pm_matrix, and so on. Argument names follow the same rule (seasonal.factor becomes seasonal_factor).
  • Inputs and outputs. Functions accept NumPy arrays and return NumPy arrays, Python scalars, or plain dictionaries keyed by the same names as the R list elements (for example fit["Point.est"]).
  • Randomness. NumPy’s default_rng replaces set.seed; because the generators differ, seeded Python runs reproduce the structure of the R examples, not their bit-identical draws. Many nns functions also accept an explicit random_seed argument.
  • Plotting. Where an R example’s purpose is a figure, the Python workflow either passes plot=True or calls the matching helper from nns.plotting (for example plot_nns_part, plot_nns_reg).