Построение линейной регрессии и невязки в Maxima с помощью gnuplot

Мотивация

Я использую TeXmacs для написания математических заданий и Maxima в качестве программы CAS. Недавно я узнал, как использовать gnuplot через Maxima.

Вопросы

  1. Теперь мне нужно построить линию линейной регрессии, используя некоторые координаты/данные таблицы.
  2. И было бы неплохо иметь возможность получить функцию линейной регрессии илиf(x) = a+bxиз тех же данных. Приятно иметь - не обязательно.
  3. Мне также нужно нарисовать остаточный график на основе тех же данных. Возможно, получение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.

Статистические расчеты -> Линейная регрессия в 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

Другие вопросы по тегам