Skip to content

Intervals

Confidence and prediction intervals for uncertainty quantification.

Confidence and Prediction Intervals

Type Represents Width Use
Confidence Uncertainty in mean curve Narrow Where is the true trend?
Prediction Uncertainty for new points Wide Where will new data fall?

Estimate uncertainty in the smoothed curve itself.

const { Lowess } = require('fastlowess-wasm');
const n = 100;
const x = Float64Array.from({ length: n }, (_, i) => i * 2 * Math.PI / (n - 1));
const y = Float64Array.from(x, (xi, i) => Math.sin(xi) + (((i * 7 + 3) % 17) / 17 - 0.5) * 0.6);
const model = new Lowess({fraction: 0.5, confidence_intervals: 0.95});
const result = model.fit(x, y);
result.y.slice(0, 3).forEach((y, i) => {
console.log(`x=${result.x[i].toFixed(4)}: y=${y.toFixed(4)} [${result.confidence_lower[i].toFixed(4)}, ${result.confidence_upper[i].toFixed(4)}]`);
});
console.log(`... (${result.y.length - 3} more)`);
x=0.0000: y=0.1181 [0.0551, 0.1812]
x=0.0635: y=0.1502 [0.0762, 0.2243]
x=0.1269: y=0.1833 [0.1205, 0.2461]
... (97 more)

Estimate where new observations might fall.

const { Lowess } = require('fastlowess-wasm');
const n = 100;
const x = Float64Array.from({ length: n }, (_, i) => i * 2 * Math.PI / (n - 1));
const y = Float64Array.from(x, (xi, i) => Math.sin(xi) + (((i * 7 + 3) % 17) / 17 - 0.5) * 0.6);
const model = new Lowess({fraction: 0.5, prediction_intervals: 0.95});
const result = model.fit(x, y);
console.log(`Prediction bounds: [${result.prediction_lower[0]}, ${result.prediction_upper[0]}]`);
Prediction bounds: [-0.35046106311855035, 0.5866944919326049]

Request both types simultaneously:

const { Lowess } = require('fastlowess-wasm');
const n = 100;
const x = Float64Array.from({ length: n }, (_, i) => i * 2 * Math.PI / (n - 1));
const y = Float64Array.from(x, (xi, i) => Math.sin(xi) + (((i * 7 + 3) % 17) / 17 - 0.5) * 0.6);
const model = new Lowess({fraction: 0.5,
confidence_intervals: 0.95,
prediction_intervals: 0.95});
const result = model.fit(x, y);
console.log("CI lower[0]:", result.confidence_lower[0].toFixed(4));
CI lower[0]: 0.0551

Common levels and their z-values:

Level z-value Interpretation
0.90 1.645 90% of intervals contain true value
0.95 1.960 95% of intervals contain true value
0.99 2.576 99% of intervals contain true value
const { Lowess } = require('fastlowess-wasm');
const n = 100;
const x = Float64Array.from({ length: n }, (_, i) => i * 2 * Math.PI / (n - 1));
const y = Float64Array.from(x, (xi, i) => Math.sin(xi) + (((i * 7 + 3) % 17) / 17 - 0.5) * 0.6);
// 99% confidence interval
const model = new Lowess({confidence_intervals: 0.99});
const result = model.fit(x, y);
console.log("CI lower[0]:", result.confidence_lower[0].toFixed(4));
CI lower[0]: 0.0789

Access standard errors directly (available when intervals are computed):

const { Lowess } = require('fastlowess-wasm');
const n = 100;
const x = Float64Array.from({ length: n }, (_, i) => i * 2 * Math.PI / (n - 1));
const y = Float64Array.from(x, (xi, i) => Math.sin(xi) + (((i * 7 + 3) % 17) / 17 - 0.5) * 0.6);
const model = new Lowess({confidence_intervals: 0.95});
const result = model.fit(x, y);
result.standard_errors.slice(0, 5).forEach((se, i) => {
console.log(`Point ${i}: SE = ${se.toFixed(4)}`);
});
console.log(`... (${result.standard_errors.length - 5} more)`);
Point 0: SE = 0.0339
Point 1: SE = 0.0392
Point 2: SE = 0.0345
Point 3: SE = 0.0407
Point 4: SE = 0.0410
... (95 more)

Feature Batch Streaming Online
Confidence intervals
Prediction intervals
Standard errors