Компания ALT Linux
Опубликован: 24.03.2015 | Доступ: свободный | Студентов: 553 / 138 | Длительность: 19:00:00
Лекция 6:

Моделирование с Maxima

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >

6.2.4 Расчёт коэффициентов линейной регрессии

Коэффициенты и оценка статистической значимости для простейшей линейной регрессии могут оцениваться при помощи функции simple_linear_regression из пакета stats. Функция вычисляет коэффициенты и параметры линейной регрессии y = a_0 + a_1 \cdot x (т.е. только простейшей).

Синтаксис вызова: simple_linear_regression(x) или simple_linear_regression(x,option_1).

Опции функции simple_linear_regression: conflevel (уровень значимости, обычно 0.95, см. выше) и regressor (по умолчанию x, имя независимой переменной). Рассматриваемая функция выводит большое количество статистических параметров:

  1. 'model: полученное уравнение регрессии;
  2. 'means: среднее;
  3. 'variances: дисперсии обоих переменных;
  4. 'correlation: коэффициент корреляции;
  5. 'adc: коэффициент детерминации;
  6. 'a_estimation: оценка параметра a;
  7. 'a_conf_int: доверительный интервал для a;
  8. 'b_estimation: оценка параметра b;
  9. 'b_conf_int: доверительный интервал для b;
  10. 'hypotheses: нулевая и альтернативная гипотеза относительно параметра b;
  11. 'statistic: статистические характеристики выборки, использованные для проверки нулевой гипотезы;
  12. 'distribution: распределение выборки;
  13. 'p_value: величина вероятности для проверки гипотезы о статистической значимости b;
  14. 'v_estimation: оценка остаточной дисперсии;
  15. 'v_conf_int: доверительный интервал для остаточной дисперсии
  16. 'cond_mean_conf_int: доверительный интервал для среднего;
  17. 'new_pred_conf_int: доверительный интервал для нового предсказания;
  18. 'residuals: список, содержащий остатки.

По умолчанию на консоль выводятся только параметры 1, 4, 14, 9, 10, 11, 12, и 13 в этом списке. Остальные параметры скрыты, но доступ к ним обеспечивается при помощи функций items_inference или take_inference.

Задаёмся исходными данными

(%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);
\begin{pmatrix}
SIMPLE\  LINEAR\  REGRESSION\cr 
model=1.405999999999986\  x-31.18999999999804\cr 
correlation=0.96116852552552\cr 
v\_estimation=13.57966666666665\cr 
b\_conf\_int=[0.044696336625253,2.767303663374718]\cr 
hypotheses=H0: b = 0,\  H1: b \symbol{`\#} 0\cr 
statistic=6.032686683658114\cr 
distribution=[student\_t,3]\cr 
p\_value=0.0038059549413203
\end{pmatrix}\leqno{(\%o10) }
(%i11)	z:simple_linear_regression(s,conflevel=0.95);
\begin{pmatrix}
SIMPLE\  LINEAR\  REGRESSION\cr 
model=1.405999999999986\  x-31.18999999999804\cr 
correlation=0.96116852552552\cr 
v\_estimation=13.57966666666665\cr 
b\_conf\_int=[0.66428743645021,2.147712563549759]\cr 
hypotheses=H0: b = 0,\  H1: b \symbol{`\#} 0\cr 
statistic=6.032686683658114\cr 
distribution=[student\_t,3]\cr 
p\_value=0.0038059549413203
\end{pmatrix}\leqno{(\%o11) }

Некоторые дополнительные параметры:

(%i5)	take_inference(model,z), x=133;
155.808\leqno{(\%o5) }
(%i6)	take_inference(means,z);
[135.0,158.62]\leqno{(\%o6) }
(%i7)	take_inference(new_pred_conf_int,z), x=133;
[132.0728595995113,179.5431404004887]\leqno{(\%o7) }

Графическая иллюстрация построенной линейной зависимости см. на рис.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.5. Простая линейная регрессия

6.2.5 Использование метода наименьших квадратов

Пакет Maxima включает мощный модуль для линейного и нелинейного оценивания параметров различных моделей с использованием метода наименьших квадратов — пакет lsqares.

Основная функция пакета lsqares — это функция lsquares_estimates.

Синтаксис вызова: lsquares_estimates(D,x,e,a) или lsquares_estimates(D,x,e,a,initial = L,tol = t)

Функция предназначена для оценки параметров, лучше всего соответствующих уравнению e в переменных x и a по набору данных D, которые определяются методом методом наименьших квадратов. Функция lsquares_estimates сначала пытается отыскать точное решение, и если это не удаётся, ищет приблизительное решение. Возвращаемое значение — список вида [a = ... , b = ... , c = ... ]. Элементы списка обеспечивают минимум среднеквадратичной ошибки. Данные D должны быть матрицей. Каждый ряд — одна запись или один случай, каждый столбец соответствует значениям некоторой переменной.

Список переменных x дает название для каждого столбца D (даже для столбцов, которые не входят в анализ). Список параметров содержит названия параметров, для которых отыскиваются оценки. Уравнение eявляется выражением или уравнением в переменных x и a; если e записано не в форме уравнения, его рассматривают как уравнение e = 0. Если некоторое точное решение может быть найдено при помощи solve, данные D могут содержать и нечисловые значения.

Дополнительные аргументы lsquares_estimates определены как уравнения и передаются "дословно" функции lbfgs, которая используется, чтобы найти оценки численным методом, когда точный результат не найден. Однако, если никакое точное решение не найдено, у каждого элемента D должно быть числовое значение, в том числе константы (такие как \%pi и \%e) или числовые литералы (целые числа, рациональные, с плавающей точкой, и с плавающей точкой повышенной точности). Численные расчеты выполняются с обычной арифметикой с плавающей точкой, таким образом все другие виды чисел преобразуются к значениям с плавающей точкой. Для работы с lsquares_estimates необходимо загрузить эту функцию командой load(lsquares).

Пример (точное решение):

(%i1)	load (lsquares)$
(%i2)	M:matrix([1,1,1],[3/2,1,2],[9/4,2,1],[3,2,2],[2,2,1]);
(\%o2)\  \begin{pmatrix}1 & 1 & 1\cr \frac{3}{2} & 1 & 2\cr \frac{9}{4} & 2 & 1\cr 3 & 2 & 2\cr 2 & 2 & 1\end{pmatrix}
(%i3)	lsquares_estimates(M,[z,x,y],(z+D)^2=A*x+B*y+C,[A,B,C,D]);
(\%o3)\  [[A=-\frac{59}{16},B=-\frac{27}{16},C=\frac{10921}{1024},D=-\frac{107}{32}]]

Другой пример (точное решение отсутствует, отыскивается приближенное):

(%i1)	load (lsquares)$
	M : matrix ([1, 1], [2, 7/4], [3, 11/4], [4, 13/4]);
(\%o2)\  \begin{pmatrix}1 & 1\cr 2 & \frac{7}{4}\cr 3 & \frac{11}{4}\cr 4 & \frac{13}{4}\end{pmatrix}
(%i3) lsquares_estimates(M,[x,y],y=a*x^b+c,[a,b,c],initial=[3,3,3], iprint=[-1,0]);
(\%o3)\  [[a=1.375751433061394,b=.7148891534417651,\\
c=-.4020908910062951]]

Для расчёта невязок для уравнения e при подстановке в него данных, содержащихся в матрице D, можно использовать функцию lsquares_residuals(D,x,e,a) (смысл параметров тот же, что и для функции lsquares_estimates).

Пример использования функции lsquares_estimates и lsquares_residuals (те же данные, что использованы для расчёта параметров простой линейной регрессии):

(%i1)	load (lsquares)$
(%i2)	s:[[125,140.7],[130,155.1],[135,160.3],[140,167.2],[145,169.8]];
(\%o2)\  [[125,140.7],[130,155.1],[135,160.3],[140,167.2],[145,169.8]]
(%i3)	D:apply(matrix,s);
(\%o3)\  \begin{pmatrix}
125 & 140.7\cr 130 & 155.1\cr 135 & 160.3\cr 140 & 167.2\cr 145 & 169.8
\end{pmatrix}
(%i4)	a : lsquares_estimates(D,[y,x],y = A+B*x, [A,B]);
[[A=\frac{8231525}{267474},B=\frac{87875}{133737}]]\leqno{(\%o4) }
(%i5)	float(%);
[[A=30.77504729431646,B=0.65707321085414]]\leqno{(\%o5) }
(%i6)	lsquares_residuals (D, [y,x], y = A + B*x, first(a));
(\%o6)\  [1.774751938506171,-2.687102297793416,-1.103882994234965,\\
-0.63768814912851,2.653921502650718]

Остальные функции, входящие в состав пакета lsquares, по синтаксису использования и идее реализации аналогичны приведенным (см. документацию разработчика).

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >