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

Решение физических и математических задач с Maxima

< Лекция 6 || Лекция 7: 123 || Лекция 8 >

7.3 Пример построения статистической модели

Рассмотрим построение задачи с практическим содержанием.

В табл. 7.1 приведены данные (взяты из статьи В. Ф. Очкова: http://twt.mpei.ac.ru/ochkov/) о зависимости цены подержанного автомобиля от его пробега и "возраста" (времени использования). В статье-первоисточнике задача исследования этой зависимости решалась средствами MathCad.

Рассмотрим её решение средствами Maxima.

Таблица 7.1. Стоимость подержанного автомобиля в зависимости от его возраста и пробега
Возраст (лет) Пробег (миль) Цена ($)
11.5 88000 1195
10.5 82000 1295
12.5 97000 800
8.5 51000 2295
9.5 79000 1995
13.5 120000 495
3.5 39000 4995
6.5 52000 2695
4.5 39000 3995
12.5 92000 795
7.5 41000 3495
10.5 77000 1595
12.5 83000 895
4.5 38000 3990
13.5 92000 795
13.5 103000 750
10.5 65000 1495
10.5 70000 1495
10.5 80000 1495
6.5 57000 2695
11.5 101000 895
10.5 78000 1295
9.5 84000 1995
4.5 46000 3675
11.5 108000 975
13.5 124000 850
6.5 56000 3495
9.5 67000 2495
6.5 43000 3400
11.5 78000 1295

В дальнейшем предполагается, что исходные данные для решения подготовлены в виде файла cars.txt. Для считывания используем пакет numericalio. В памяти данные представляются матрицей, а для построения отдельных графиков — списками (переменные age, mile, price — см. ниже).

(%i1)	load("draw")$
(%i2)	load("numericalio")$
(%i3)	data:read_matrix("cars1.txt")$
(%i4)	age:makelist(data[k,1], k, 1, 30)$
(%i5)	mile:makelist(data[k,2], k, 1, 30)$
(%i6)	price:makelist(data[k,3], k, 1, 30)$

Простейшую линейную регрессию можно построить, используя функцию simple_linear_regression (пакет stats). Построим зависимость цены автомобиля от его стоимости и пробега:

(%i21)	xy:makelist([age[k],price[k]], k, 1, 30)$
(%i22)	simple_linear_regression(xy);
(\%o22)\ \begin{pmatrix}SIMPLE\  LINEAR\  REGRESSION\cr model=5757.594446543255-392.7181715149224\,x\cr correlation=-.9688177942467208\cr v\_estimation=95364.34912839333\cr b\_conf\_int=[-431.5987157329751,-353.8376272968697]\cr hypotheses=H0: b = 0 ,H1: b \symbol{`\#} 0\cr statistic=20.69021212080514\cr distribution=[student\_t,28]\cr p\_value=0.0\end{pmatrix}

Построим аналогичную зависимость цены автомобиля от пробега, но не в линейной, а в экспоненциальной форме:

(%i26)	xy:makelist([mile[k],log(price[k])], k, 1, 30)$
(%i27)	simple_linear_regression(xy);
(\%o27)\ 
\begin{pmatrix}SIMPLE\ LINEAR\ REGRESSION\cr model=9.174960600286802-2.3747715120748164\,{10}^{-5}\,x\cr correlation=-.9301125564244438\cr v\_estimation=.05467789749118319\cr b\_conf\_int=[-2.7377780810631264\,{10}^{-5},-2.0117649430865062\,{10}^{-5}]\cr hypotheses=H0: b = 0 ,H1: b \symbol{`\#} 0\cr statistic=13.40058098403749\cr distribution=[student\_t,28]\cr p\_value=5.928590951498336\,{10}^{-14}\end{pmatrix}

Полученные зависимости представлены в виде выражений Maxima:

(%i28)	fun1:5757.6-392.7*x$(%i29) exp(9.175);
9652.768071616591\leqno{(\%o29) }
(%i30)	fun2:9653*exp(-2.375*10^(-5)*x);
9653\,{e}^{-2.3750000000000001\,{10}^{-5}\,x}\leqno{(\%o30) }

Проиллюстрируем полученные результаты графически ( рис. 7.3 и рис. 7.4):

Зависимость цены подержанного автомобиля от его возраста

увеличить изображение
Рис. 7.3. Зависимость цены подержанного автомобиля от его возраста
Зависимость цены подержанного автомобиля от его пробега

увеличить изображение
Рис. 7.4. Зависимость цены подержанного автомобиля от его пробега
(%i34)	draw2d(terminal=eps,key="Table",xlabel="Age",ylabel="Price",
	point_size = 3,point_type=3,points(age,price),
	key="price=f(age)",explicit(fun1,x,0,15));
(%i41)	draw2d(terminal=eps,key="Table",xlabel="Mile",ylabel="Price",
	point_size = 3,point_type=3,points(mile,price),
	key="price=f(mile)",explicit(fun2,x,0,125000));

Для построения модели в виде зависимости цены автомобиля от пробега и возраста одновременно целесообразно использовать более сложную функцию lsquares_estimates (пакет lsquares). Искомая модель была представлена уравнением:

Price = a + b*Age + c*Mile + d*Mile^2

Необходимые команды Maxima:

(%i5)	lsquares_estimates(data,[x,y,z],z=a+b*x+c*y+d*y^2,[a,b,c,d]);
(\%o5)\ [[a=\frac{36712000090549571}{5117101479342},b=-\frac{80056614985946}{284283415519},\\
\\
c=-\frac{194393701258481}{3411400986228000},d=\frac{2937180994967}{10234202958684000000}]]
(%i6)	float(%);
(\%o6)\  [[a=7174.37405506961,b=-281.6084604857839,\\
c=-0.056983539033745,d=2.8699655525931528\,{10}^{-7}]]

Следует отметить, что сильно нелинейные задачи решаются при помощи lsquares_estimate медленно, поэтому результаты построения модели сильно зависят от обоснованности постановки задачи оценивания. Графическая иллюстрация представлена на рис. 7.5.

Иллюстрация зависимости отклика (цены подержанного автомобиля) от двух независимых факторов (возраста и пробега автомобиля)

увеличить изображение
Рис. 7.5. Иллюстрация зависимости отклика (цены подержанного автомобиля) от двух независимых факторов (возраста и пробега автомобиля)
< Лекция 6 || Лекция 7: 123 || Лекция 8 >