Моделирование с Maxima
6.2.4 Расчёт коэффициентов линейной регрессии
Коэффициенты и оценка статистической значимости для простейшей линейной регрессии могут оцениваться при помощи функции из пакета stats. Функция вычисляет коэффициенты и параметры линейной регрессии (т.е. только простейшей).
Синтаксис вызова: или .
Опции функции (уровень значимости, обычно 0.95, см. выше) и (по умолчанию , имя независимой переменной). Рассматриваемая функция выводит большое количество статистических параметров:
- 'model: полученное уравнение регрессии;
- 'means: среднее;
- 'variances: дисперсии обоих переменных;
- 'correlation: коэффициент корреляции;
- 'adc: коэффициент детерминации;
- 'a_estimation: оценка параметра ;
- 'a_conf_int: доверительный интервал для ;
- оценка параметра b;
- 'b_conf_int: доверительный интервал для ;
- 'hypotheses: нулевая и альтернативная гипотеза относительно параметра ;
- 'statistic: статистические характеристики выборки, использованные для проверки нулевой гипотезы;
- 'distribution: распределение выборки;
- 'p_value: величина вероятности для проверки гипотезы о статистической значимости ;
- 'v_estimation: оценка остаточной дисперсии;
- 'v_conf_int: доверительный интервал для остаточной дисперсии
- 'cond_mean_conf_int: доверительный интервал для среднего;
- 'new_pred_conf_int: доверительный интервал для нового предсказания;
- 'residuals: список, содержащий остатки.
По умолчанию на консоль выводятся только параметры 1, 4, 14, 9, 10, 11, 12, и 13 в этом списке. Остальные параметры скрыты, но доступ к ним обеспечивается при помощи функций или .
Задаёмся исходными данными
(%i9) s:[[125,140.7], [130,155.1], [135,160.3], [140,167.2], [145,169.8]]$
Вычисляем коэффициенты и прочие параметры регрессии
(%i10) z:simple_linear_regression(s,conflevel=0.99);
(%i11) z:simple_linear_regression(s,conflevel=0.95);
Некоторые дополнительные параметры:
(%i5) take_inference(model,z), x=133;
(%i6) take_inference(means,z);
(%i7) take_inference(new_pred_conf_int,z), x=133;
Графическая иллюстрация построенной линейной зависимости см. на рис.6.5. Использованная команда:
(%i11) plot2d([[discrete,s], take_inference(model,z)], [x,120,150],[style,[points],[lines]],[gnuplot_term,ps], [gnuplot_out_file, "regress.eps"])$
6.2.5 Использование метода наименьших квадратов
Пакет Maxima включает мощный модуль для линейного и нелинейного оценивания параметров различных моделей с использованием метода наименьших квадратов — пакет lsqares.
Основная функция пакета lsqares — это функция .
Синтаксис вызова: или
Функция предназначена для оценки параметров, лучше всего соответствующих уравнению в переменных и по набору данных D, которые определяются методом методом наименьших квадратов. Функция сначала пытается отыскать точное решение, и если это не удаётся, ищет приблизительное решение. Возвращаемое значение — список вида . Элементы списка обеспечивают минимум среднеквадратичной ошибки. Данные должны быть матрицей. Каждый ряд — одна запись или один случай, каждый столбец соответствует значениям некоторой переменной.
Список переменных дает название для каждого столбца (даже для столбцов, которые не входят в анализ). Список параметров содержит названия параметров, для которых отыскиваются оценки. Уравнение является выражением или уравнением в переменных и ; если записано не в форме уравнения, его рассматривают как уравнение . Если некоторое точное решение может быть найдено при помощи , данные могут содержать и нечисловые значения.
Дополнительные аргументы определены как уравнения и передаются "дословно" функции , которая используется, чтобы найти оценки численным методом, когда точный результат не найден. Однако, если никакое точное решение не найдено, у каждого элемента должно быть числовое значение, в том числе константы (такие как и ) или числовые литералы (целые числа, рациональные, с плавающей точкой, и с плавающей точкой повышенной точности). Численные расчеты выполняются с обычной арифметикой с плавающей точкой, таким образом все другие виды чисел преобразуются к значениям с плавающей точкой. Для работы с необходимо загрузить эту функцию командой load().
Пример (точное решение):
(%i1) load (lsquares)$ (%i2) M:matrix([1,1,1],[3/2,1,2],[9/4,2,1],[3,2,2],[2,2,1]);
(%i3) lsquares_estimates(M,[z,x,y],(z+D)^2=A*x+B*y+C,[A,B,C,D]);
Другой пример (точное решение отсутствует, отыскивается приближенное):
(%i1) load (lsquares)$ M : matrix ([1, 1], [2, 7/4], [3, 11/4], [4, 13/4]);
(%i3) lsquares_estimates(M,[x,y],y=a*x^b+c,[a,b,c],initial=[3,3,3], iprint=[-1,0]);
Для расчёта невязок для уравнения при подстановке в него данных, содержащихся в матрице , можно использовать функцию (смысл параметров тот же, что и для функции ).
Пример использования функции и (те же данные, что использованы для расчёта параметров простой линейной регрессии):
(%i1) load (lsquares)$ (%i2) s:[[125,140.7],[130,155.1],[135,160.3],[140,167.2],[145,169.8]];
(%i3) D:apply(matrix,s);
(%i4) a : lsquares_estimates(D,[y,x],y = A+B*x, [A,B]);
(%i5) float(%);
(%i6) lsquares_residuals (D, [y,x], y = A + B*x, first(a));
Остальные функции, входящие в состав пакета lsquares, по синтаксису использования и идее реализации аналогичны приведенным (см. документацию разработчика).