Gtld linearRegression
Перейти к навигации
Перейти к поиску
Краткое описание
Функция предназначена для формирования трендов с постоянной (линейной) скоростью изменения.
Cодержание функции может дополняться!
Синтаксис
Стандартная конструкция выглядит таким образом:
let __lin = linearRegression(data, forecastSteps = 3);
Аргументы
data- исходный массив данных;forecastSteps- количество точек прогноза;
Содержание функции
function linearRegression(data, forecastSteps = 3) {
const n = data.length; //длина массива данных
// Проверка на достаточный объём данных. Для линейной регрессии требуется минимум 2 точки данных
if (n < 2) return {};
let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;
// Подготовка данных: x — время (индексы), y — значения параметра вибрации
for (let i = 0; i < n; i++) {
sumX += i;
sumY += data[i];
sumXY += i * data[i];
sumX2 += i ** 2;
}
// Расчёт знаменателя с проверкой на ноль
const denominator = n * sumX2 - sumX ** 2;
if (Math.abs(denominator) < 1e-10) {
gtl.log.info('Внимание!', 'Невозможно выполнить регрессию: знаменатель близок к нулю');
return {}
}
// Расчёт коэффициентов
const a = (n * sumXY - sumX * sumY) / denominator; // Наклон
const b = (sumY - a * sumX) / n; // Сдвиг
// Создаём результат с исходными данными
const result = [...data];
// Добавляем прогноз на заданное количество шагов
for (let i = n; i < n + forecastSteps; i++) {
result.push(a * i + b);
}
return {
slope: a,
intercept: b,
forecastCount: forecastSteps,
result: result,
equation: `y = ${a.toFixed(4)}x + ${b.toFixed(4)}`
};
}