MathCAD: intercept, slope и линейная регрессия
Интерполяция данных одной формулой всегда актуальна, особенно если речь об "эконометрике" и подобных любимых экономистами заморочках, активно использующих классический регрессионный анализ на уровне построения уравнения прямой :)
Между тем, в MathCAD по заданным векторам значений X
и Y
как раз и можно непосредственно найти коэффициенты регрессионной прямой y=a+b*x
функциями intercept
("отрезок, отсекаемый с оси") и slope
("наклон").
Просто у них принято изучать intercept equation of a line x/a + y/b = 1, уравнение прямой в отрезках, отсекаемых на координатных осях.
Вообще говоря, эти функции не предполагают, что данные отсортированы по возрастанию значений X
, не предполагает этого и встроенный инструмент построения графиков, но без сортировки на больших размерностях пакет может тормозить, так что отсортируем пару векторов (X, Y)
очевидным кодом
M:=csort(augment(X,Y),0) (X Y):=(M<0> M<1>)
Вместе с вводом начальных данных эта часть расчёта будет выглядеть так:
Определение данных и сортировка по возрастанию значений X
Непосредственный поиск коэффициентов регрессионной прямой функциями intercept
и slope
будет следующим шагом:
Линейная аппроксимация через функции "отсечка" и "наклон", непосредственно возвращающие коэффициенты регрессионной прямой (то же, что МНК первого порядка)
Конечно, вы понимаете, что тот же результат будет и при использовании алгоритма МНК 1 порядка.
Вот таким красивым кодом найдём номер точки с максимальным отклонением от прямой, которую потом покажем на графике отдельным рядом. В эконометрике максимальное отклонение называется безумным словом нотна:
Найдём номер точки с максимальным отклонением от прямой
Строго говоря, код выше работает только если искомый номер элемента - единственный. В общем случае (максимальных расстояний несколько) следует пользоваться примерно таким решением. Оно не программистски красивое, зато надёжное.
Наконец, построим график. Заметим, что не следует путать прямую регрессии, она же прямая МНК 1 порядка, с кусочно-линейной интерполяцией, которую мы могли бы выполнить просто строкой кода
linterp(X,Y,X)
Добавил её четвёртым рядом данных на график.
Построение графика с отметкой отдельной категорией самой дальней точки
Скачать этот пример в архиве .zip с документом MathCAD 15 (22 Кб)
16.09.2015, 15:38 [20329 просмотров]