New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@pnwatt/loess

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@pnwatt/loess

Fork of JavaScript implementation of the Locally-Weighted Regression package originally written in C by Cleveland, Grosse and Shyu (1992). This fork updates dependencies to fix security issues.

latest
Source
npmnpm
Version
1.3.5
Version published
Weekly downloads
1
-85.71%
Maintainers
1
Weekly downloads
 
Created
Source

loess

Fork of a JavaScript implementation of the Locally-Weighted Regression package originally written in C by Cleveland, Grosse and Shyu (1992). This fork addresses security issues with project dependencies. The dependencies have been updated to fix the security issues.

Getting started

First install the package:

npm install @pnwatt/loess --save

Load in your data:

var data = require("./myData.json");

Instantiate a LOESS model with the data:

var Loess = require("loess");
var options = { span: 0.5, band: 0.8, degree: 1 };
var model = new Loess(data, options);

Fit model by calling the .predict( ) method on the model object:

var fit = model.predict();
console.log(fit.fitted);
// do something else with fit.fitted

To fit model on a new set of points, pass a data object into .predict( )

var newData = {
  x: [1, 2, 3, 4, 5],
  x2: [6, 7, 8, 9, 10],
};

fit = model.predict(newData);

var upperLimit = fit.fitted.map((yhat, idx) => yhat + fit.halfwidth[idx]);
var lowerLimit = fit.fitted.map((yhat, idx) => yhat - fit.halfwidth[idx]);
// plot upperLimit and lowerLimit

Alternatively, use .grid( ) method to generate a grid of equally spaced points:

newData = model.grid([20, 20]);

fit = model.predict(newData);

Usage

screenshot1

screenshot2

Find out more by visiting my demo app:

https://loess.netlify.com/

Documentation

class Loess {
  constructor (data: object, options: object) {
    // arguments
    data /*required*/ = {
      y: [number],
      x: [number],
      x2: [number], // optional
      w: [number]  // optional
    }

    options /*optional*/ = {
      span: number, // 0 to inf, default 0.75
      band: number, // 0 to 1, default 0
      degree: [0, 1, 2] || ['constant', 'linear', 'quadratic'] // default 2
      normalize: boolean, // default true if degree > 1, false otherwise
      robust: boolean, // default false
      iterations: integer //default 4 if robust = true, 1 otherwise
    }

    // return a LOESS model object with the following properties
    this.y = data.y
    this.x = [data.x, data.x2] // predictor matrix
    this.n = this.y.length // number of data points
    this.d = this.x.length // dimension of predictors
    this.bandwidth = options.span * this.n // number of data points used in local regression
    this.options = options
  }

  predict (data: object) {
    // arguments
    data /*optional*/ = {
      x: [number],
      x2: [number]
    } // default this.x

    return {
      fitted: [number], // fitted values for the specified data points
      halfwidth: [number] // fitted +- halfwidth is the uncertainty band
    }
  }

  grid (cuts: [integer]) {
    return {
      x_cut: [number], // equally-spaced data points
      x_cut2: [number],
      x: [number], // all combination of x_cut and x_cut2, forming a grid
      x2: [number]
    }
  }
}

Note:

  • data should be passed into the constructor function as json with keys y, x and optionally x2 and w. Values being the arrays of response, predictor variables, and observation weights.
  • If no data is supplied to .predict( ) method, default is to perform fitting on the original dataset the model is constructed with.
  • span refers to the percentage number of neighboring points used in local regression.
  • band specifies how wide the uncertainty band should be. The higher the value, the greater number of points encompassed by the uncertainty band. Setting to 0 will return only fitted values.
  • By default LOESS model will perform local fitting using the quadratic function. Overwrite this by setting the degree option to "linear" or "constant". Lower degree fitting function computes faster.
  • For multivariate data, normalize option defaults to true. This means normalization is applied before performing proximity calculation. Data is transformed by dividing the factors by their 10% trimmed sample standard deviation. Turn off this option if dealing with geographical data.
  • Set robust option to true to turn on iterative robust fitting procedure. Applicable for estimates that have non-Gaussian errors. More iterations requires longer computation time.
  • When using .grid( ), cuts refers to the number of equally spaced points required along each axis.
  • dist is intentionally checked in to avoid the need to build when installing directly from GitHub.

Credits

William S. Cleveland, Susan J. Devlin
Locally Weighted Regression: An Approach to Regression Analysis by Local Fitting
Journal of the American Statistical Association, Vol. 83, No. 403. (Sep., 1988), pp. 596-610.

William S. Cleveland, Eric Grosse, Ming-Jen Shyu
A Package of C and Fortran Routines for Fitting Local Regression Models (20 August 1992)
Source code available at http://www.netlib.org/a/dloess

Keywords

statistic

FAQs

Package last updated on 30 Aug 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts