Simple Ordinary Least Squares Regression
Install and import#
npm install fintech-algorithmsimport { simpleOrdinaryLeastSquaresRegression } from "fintech-algorithms/foundations/dependence-regression-and-model-foundations/simple-ordinary-least-squares-regression";Signature#
simpleOrdinaryLeastSquaresRegression(input)Fits a single-predictor ordinary least squares line of input.y on input.x and returns the fitted coefficients with the in-sample fitted values.
Parameters#
| Name | Type | Notes |
|---|---|---|
input | D00Input | One record holding the predictor series x and the outcome series y, aligned position by position.x: non-empty list of finite numbers, at least two, not all identical · y: finite numbers, same length as x |
Returns#
D00Output
An object with intercept, slope (covariance over the predictor's sample variance) and predictions (the fitted value at each observed x).
Errors#
- When x or y is missing, empty, or contains a non-finite number — throws RangeError
- When x and y have different lengths, or fewer than two observations — the least-squares fit is computed for every topic in the family before the topic branch is taken — throws RangeError
- When x is constant, which leaves the regression slope undefined — throws RangeError
Complexity: time O(n),
space O(n).
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#
{
"x": [1, 2, 3, 4, 5, 6],
"y": [2, 3, 5, 4, 6, 7],
"groups": ["A", "A", "A", "B", "B", "B"],
"predictX": 7,
"otherPredictor": [2, 4, 5, 8, 9, 13]
}Call#
simpleOrdinaryLeastSquaresRegression(input)Returns#
object with 2 fields: intercept, slope
{
"intercept": 1.2000000000000002,
"slope": 0.9428571428571428
}Diagrams#
Calculation flow#
Reasoning flow — D00-F09-A06
flowchart LR
A["Synthetic input + metadata"] --> B{"Contract valid?"}
B -->|No| C["Reject or route with reason"]
B -->|Yes| D["Apply Simple Ordinary Least Squares Regression"]
D --> E["Formula: b1=Σ(x−x̄)(y−ȳ)/Σ(x−x̄)²; b0=ȳ−b1x̄"]
E --> F["Verified fixture output"]
F --> G{"Interpretation within boundary?"}
G -->|Yes| H["Report value + convention + audit"]
G -->|No| I["Add companion view or narrower claim"]
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#
- Linear Least Squares Regression — NIST/SEMATECH e-Handbook
- Correlation — NIST/SEMATECH e-Handbook
- Historical-example decision