https://github.com/heofs/trendline
Generate a trend line using linear regression
https://github.com/heofs/trendline
hacktoberfest javascript linear-regression node npm prediction statistics trendline
Last synced: about 1 year ago
JSON representation
Generate a trend line using linear regression
- Host: GitHub
- URL: https://github.com/heofs/trendline
- Owner: heofs
- License: mit
- Created: 2020-05-28T07:27:50.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-10-08T10:19:27.000Z (over 2 years ago)
- Last Synced: 2025-04-13T21:40:07.341Z (about 1 year ago)
- Topics: hacktoberfest, javascript, linear-regression, node, npm, prediction, statistics, trendline
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/trendline
- Size: 325 KB
- Stars: 18
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Trendline.js
A lightweight JavaScript library to generate a trend line using linear regression. Display the trendline using something like [D3.js](https://d3js.org/) or [Recharts](https://recharts.org/).
## Example
```js
import { createTrend } from 'trendline';
// OR
// const { createTrend } = require('trendline');
const data = [
{ y: 2, x: 1 },
{ y: 4, x: 2 },
{ y: 5, x: 3 },
{ y: 4, x: 4 },
{ y: 5, x: 5 },
];
// Takes the following arguments (dataset, xKey, yKey)
const trend = createTrend(data, 'x', 'y');
console.log(trend);
// { slope: 0.6, yStart: 2.2, calcY: [Function: calcY] }
```
## The object returned from `createTrend`
The object has the following 3 properties.
`slope`, a number representing how sharply the trend increases.
`yStart`, a number showing where the trend line starts on the Y axis.
`calcY`, a function to calculate what the Y value is based on the X value.
### Illustrating `calcY`
```js
const data = [
{ y: 2, x: 1 },
{ y: 4, x: 2 },
{ y: 5, x: 3 },
{ y: 4, x: 4 },
{ y: 5, x: 5 },
];
const trend = createTrend(data, 'x', 'y');
console.log(trend.yStart); // 2.2
// yStart is representing the Y value when X is 0
// This will always returns true.
console.log(trend.calcY(0) === trend.yStart); // True
```
## Example use with Recharts
```jsx
import React from 'react';
import { createTrend } from 'trendline';
import { LineChart, Line, XAxis, YAxis } from 'recharts';
const Graph = () => {
const { weightData } = useAPI();
const weights = weightData.map((data) => data.weight);
const yMax = Math.max(...weights);
const yMin = Math.min(...weights);
const timestamps = weightData.map((data) => data.dateTime);
const xMax = Math.max(...timestamps);
const xMin = Math.min(...timestamps);
const trendData = () => {
const trend = createTrend(weightData, 'dateTime', 'weight');
return [
{ weight: trend.calcY(xMin), dateTime: xMin },
{ weight: trend.calcY(xMax), dateTime: xMax },
];
};
return (
setMessage('')}
>
);
};
```
## Contributing
I appreciate anyone who wants to contribute to the project.
If you find any improvements to be made to the library, feel free to raise a PR for it on GitHub.