Построение линейной регрессии и невязки в Maxima с помощью gnuplot
Мотивация
Я использую TeXmacs для написания математических заданий и Maxima в качестве программы CAS. Недавно я узнал, как использовать gnuplot через Maxima.
Вопросы
- Теперь мне нужно построить линию линейной регрессии, используя некоторые координаты/данные таблицы.
- И было бы неплохо иметь возможность получить функцию линейной регрессии или
f(x) = a+bx
из тех же данных. Приятно иметь - не обязательно. - Мне также нужно нарисовать остаточный график на основе тех же данных. Возможно, получение
r^2
ценить.
Исследовано
Я прочитал /questions/19647594/pri-ispolzovanii-gnuplot-kak-mozhno-vyivesti-uravnenie-stroki-v-zagolovke-stroki/19647598#19647598 , который отвечает, как нарисовать линию регрессии в gnuplot, но я не знаю, как перенести это на plot2d
Функция в Максиме .
Я также прочитал этот вопрос/ответ, в котором объясняется, как рассчитать уравнение линейной регрессии с помощью Maxima, но, честно говоря, я недостаточно хорош в математике, чтобы понять, что на самом деле происходит.
Я обнаружил, что могу строить линейные регрессии с помощью GeoGebra, но не вижу способа нарисовать остаточный график или получитьf(x) = mx+b
по предоставленным мною данным (могу посчитатьf(x) = ax+b
по наблюдениям, но было бы неплохо получить точные цифры).
Пояснительные изображения
Таблица данных и линия линейной регрессии в TI Nspire.
Таблица данных, линия линейной регрессии и график остатков в TI Nspire.
1 ответ
Вот схема решения. Есть функция вstats
пакет, который выполняет большую часть работы.
Пусть и будут двумя списками, содержащими ваши данные.linear_regression
ожидает матрицу из двух или более столбцов. Чтобы склеить списки в матрицу, вы можете сказать:xy: addcol(matrix(), x, y);
(Есть и другие способы сделать это.)
Чтобы получить объект, содержащий коэффициенты, остатки и другие элементы, вы можете сказать:results: linear_regression(xy);
Чтобы получить остатки:myresiduals: take_inference('residuals, results);
Чтобы получить коэффициенты:coeffs: take_inference('b_estimation, results);
Теперь, используя коэффициенты, вы можете построить функцию, представляющую линию регрессии:myline: subst(['b = coeffs[1], 'm = coeffs[2]], lambda([x], m*x + b));
(Обязательно проверьте коэффициенты — возможно, я их перепутал. Может быть, дело вcoeffs[2]
а потомcoeffs[1]
? Вам стоит проверить.)
На данный момент у вас естьx
,y
,residuals
, иmyline
. Составьте их все вместе:
plot2d ([[discrete, x, y], [discrete, x, residuals], myline], ['x, lmin(x) - 1, lmax(x) + 1]);
Чтобы получить дополнительную информацию, см.:? linear_regression