npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

linear-regression-model

v1.4.2

Published

A npm package to make it easier to deal with a bunch of values, and try to model them in one of the most used mathematical models

Downloads

34

Readme

linear-regression-model

An npm package to make it easier to deal with a handful of values, and try to model them in one of the most used mathematical models, with an R-like accuracy algorithm

npm logo

Setup

Requirements:

  • Node.js installed The ideal version, to run the package, is LTS(16.13 by the time it is being published), however, older versions shouldn't have any issues, as the package does not use any other npm packages, or fancy, new methods, not supported by older versions

  • Installing the module

npm install linear-regression-model
  • Importing the module

First, there is the Linear Regression model between two different datasets, in relation to each other Which will look like something similar to this:

import {LinearModel} from 'linear-regression-model'
// or
const {LinearModel} = require("linear-regression-model");
// if it is preferred not to use destructuring, or constants use
// var LinearModel = require("linear-regression-model-model").LinearModel;

Or if the use case for this is pending more to the behavior of one single dataset overtime, this will be more fitting:

import {LinearModelOverTime} from 'linear-regression-model'
// or
const {LinearModelOverTime} = require("linear-regression-model");
// if it is preferred not to use destructuring, or constants use
// var LinearModel = require("linear-regression-model").LinearModelOverTime;

And to use the Correlation class, it will be some like this:

 import {Correlation} from 'linear-regression-model'
 // or
 const {Correlation} = require("linear-regression-model");
 // if it is preferred not to use destructuring, or constants use
 // var Correlation = require("linear-regression-model").Correlation;

Although if your use case is the overtime behaviour, i would advise the use of the method in the LinearModelOverTime class But if you are using the LinearModel class, it is really up to you

Instantiate the classes

const lm = new LinearModel([1, 2, 3, 2, 3, 4], [3, 4, 5, 4, 5, 6]);
// mandatory to pass two, same sized, all number, arrays, being the
// orientation (x, y), being x the independent variable and y the
// dependent: y changes according to how x changes, basically

or

const lm = new LinearModelOverTime([1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6]);
// mandatory to pass one, all number, array, being the orientation y, the
//dependent variable: y changes according to how x changes, the later is
// generated automatically for a better representation of the behavior overtime

or

 const corr = new Correlation([1, 2, 3, 2, 3, 4], [3, 4, 5, 4, 5, 6]);
// mandatory to pass two, same sized, all number, arrays, being the
// orientation (x, y), being x the independent variable and y the
// dependent: y changes according to how x changes, basically

Let it be clear, it is necessary to pass all number arrays, with more than 1 value, in order for the algorithm to work properly, it will try to convert all the elements to numbers, but if that is not possible, the code will crash.

Methods

Both the classes have similar methods, the biggest difference between the classes being if the X axis dataset is informed or generated, therefore, the method will be showed using the LinearModel class, the use for the LinearModelOverTime class is the exact same though

LinearModel and LinearModelOverTime

  • getDataset
 lm.getDataset()
 // returns the dataset Informed in the Y axis
  • getXAxisValues
 lm.getXAxisValues()
 // returns the dataset in the X axis, informed previously or not
  • (static) radsToDegs
 LinearModel.radsToDegs(rad)
 // converts an angle in radians to degrees
 // returns the angle in degrees
  • (static) getMean
 LinearModel.getMean(dataset)
 // Utility method to calculate the mean of a dataset
  • (static) getMode
 LinearModel.getMode(dataset)
 // Utility method to calculate the mode of a dataset
  • (static) getMedian
 LinearModel.getMedian(dataset)
 // Utility method to calculate the median of a dataset
  • getDatasetLength
 lm.getDatasetLength()
 // returns the dataset length
  • getSumOfDatasetValues
 lm.getSumOfDatasetValues()
 // returns the sum of all the elements in the dataset on y azis
  • getSumOfXValues
 lm.getSumOfXValues()
 // returns the sum of all the elements in the dataset on x azis
  • getSlope
 lm.getSlope()
 // returns the slope of the equation: the "m" on the y = mx + n function
 // which is the tangent of the inclination angle
  • getAngleInRadians
 lm.getAngleInRadians()
 // returns the inclination angle in radians, like 3/4 meaning  3/4 rad
  • getAngleInDegrees
 lm.getAngleInDegrees()
 // returns the inclination angle in degrees, like 43°,
 // for example 3/4 rad ~~ 43°
  • getDatasetBehavior
 lm.getDatasetBehavior()
 // returns the overall macro behaviour of the dataset
  • getDatasetBehavioralIntensity
 lm.getDatasetBehavioralIntensity()
 // returns the intensity of the behaviour previously measured
  • getLinearCoefficient
 lm.getDatasetBehavioralIntensity()
 // returns the intensity of the behaviour previously measured
  • getLinearCoefficient
 lm.getLinearCoefficient()
 // returns the linear coefficient of the equation: the "n"
 //on the y = mx + n function
  • getCoefficients
 lm.getCoefficients()
 // returns both the linear coefficient and the slope
 //of the equation: the "m" and the "n" on y = mx + n
  • getLinearEquation
 lm.getLinearEquation()
 // returns both the function as a string to be displayed
 // and an actual js function to make predictions, for example
 // function(x): returns Y, using the same method as the dataset
  • getR2
 lm.getR2()
 // returns the coefficient of determination(R²) to find
 // the accuracy of the linear regression just calculated

Correlation

  • getCorrelation
 lm.getCorrelation()
 // returns the correlation between the datasets
  • getCorrelationInterpretation
 lm.getCorrelationInterpretation()
 // returns the interpretation of the correlation index
 // between the datasets

Correlation (class)

  • (static) getMean
 Correlation.getMean(dataset)
 // returns the mean of the dataset
  • (static) getDifferenceFromMeanAndElements
 Correlation.getDifferenceFromMeanAndElements(dataset)
 // returns the difference between the mean and the elements
 // of the dataset, so can be used to calculate variance
 // or standard deviation, for example
  • getCorrelation
 corr.getCorrelation()
 // returns the correlation between the datasets
  • getCorrelationWay
 corr.getCorrelationWay()
 // returns the way/sign the two datasets are correlated
 // to each other
  • getCorrelationIntensity
 corr.getCorrelationIntensity()
 // returns the intensity of the correlation between the datasets
  • getCorrelationInterpretation
 corr.getCorrelationInterpretation()
 // returns the interpretation of the correlation index
 // between the datasets

Contributing

Well, since this is a really simple package, contributing is always welcome, just as much as creating issues experienced with the package

In order to better organize this contributions, it would be ideal that all PRs follow the template:

PR Template

WHAT: A brief description of the improvements

WHY: A explanation on why those changes were needed, necessary, or at least, why is was on the best interest of the package users

CHANGES: List of changes made, can be the name of the commits made, or a simple changes list

Commits

Ideally the commits should make use of the convention of Conventional Commits Something i recommend is the usage of either the Commitizen terminal extension or the Commit Message Editor VSCode Extension