fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Missing, Nonfinite, Censored, and Truncated Values

Install and import#

bash
npm install fintech-algorithms
ts
import { missingNonfiniteCensoredAndTruncatedValues } from "fintech-algorithms/foundations/data-variables-samples-and-measurement/missing-nonfinite-censored-and-truncated-values";

Signature#

missingNonfiniteCensoredAndTruncatedValues(input)

Tallies the ways a table's value column can fail to be an ordinary number, separating missing entries, non-finite ones and censored rows.

Parameters#

NameTypeNotes
inputD00InputA plain object. Every F03 topic first reads rows, which must be a non-empty array of row objects, and derives the sorted union of every key seen across them before any per-topic branch runs. This topic reads each row's value and censored fields, and reads truncationRule at the top level as a flag for whether a truncation rule was applied at all.

Returns#

{ missing: number; nonfinite: number; censored: number; truncated: boolean }

missing counts rows whose value is null or undefined, nonfinite counts numeric values that are infinite or NaN, and censored counts rows whose censored field is truthy. truncated is simply whether truncationRule was supplied and truthy, not a count.

Errors#

  • When input is not a plain object — throws TypeError
  • When rows is missing, empty, or not an array — throws RangeError

Complexity: time O(r * c), space O(r * c).

Worked example#

verified This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.

Input#

input
{
  "rows": [
    {
      "entity": "A",
      "timestamp": "2025-01-01T00:00:00Z",
      "value": 10,
      "rating": "low"
    },
    {
      "entity": "A",
      "timestamp": "2025-01-02T00:00:00Z",
      "value": null,
      "rating": "medium",
      "censored": true
    },
    {
      "entity": "B",
      "timestamp": "2025-01-01T00:00:00Z",
      "value": 12,
      "rating": "high"
    }
  ],
  "ordinalColumns": ["rating"],
  "populationSize": 100,
  "frameSize": 80,
  "keyColumns": ["entity", "timestamp"],
  "truncationRule": "values below 5 excluded",
  "measurements": [9.9, 10, 10.1, 10],
  "referenceValue": 10,
  "vintages": [
    {
      "availableAt": "2025-02-01T00:00:00Z",
      "value": 100
    },
    {
      "availableAt": "2025-03-01T00:00:00Z",
      "value": 102
    },
    {
      "availableAt": "2025-04-01T00:00:00Z",
      "value": 101
    }
  ],
  "asOf": "2025-03-15T00:00:00Z",
  "provenance": {
    "source": "teaching.csv",
    "owner": "Fintech Builder",
    "license": "CC-BY-4.0",
    "retrievedAt": "2026-08-10",
    "transformations": ["parse", "validate"]
  }
}

Call#

missingNonfiniteCensoredAndTruncatedValues(input)

Returns#

object with 2 fields: missing, nonfinite

{
  "missing": 1,
  "nonfinite": 0
}

Diagrams#

Missing, Nonfinite, Censored, and Truncated Values — article hero
Missing, Nonfinite, Censored, and Truncated Values — concept anatomy
Missing, Nonfinite, Censored, and Truncated Values — mistake contrast
Missing, Nonfinite, Censored, and Truncated Values — teaching map

How it works#

This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.

Read the article →

References#

  • Working with Missing Data
  • Censoring
  • Evidence boundary

The rest of the Data, Variables, Samples, and Measurement family#