Missing, Nonfinite, Censored, and Truncated Values
Install and import#
npm install fintech-algorithmsimport { 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#
| Name | Type | Notes |
|---|---|---|
input | D00Input | A 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#
{
"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#
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.
References#
- Working with Missing Data
- Censoring
- Evidence boundary