Решение физических и математических задач с Maxima
7.3 Пример построения статистической модели
Рассмотрим построение задачи с практическим содержанием.
В табл. 7.1 приведены данные (взяты из статьи В. Ф. Очкова: http://twt.mpei.ac.ru/ochkov/) о зависимости цены подержанного автомобиля от его пробега и "возраста" (времени использования). В статье-первоисточнике задача исследования этой зависимости решалась средствами MathCad.
Рассмотрим её решение средствами Maxima.
Возраст (лет) | Пробег (миль) | Цена ($) |
---|---|---|
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. В памяти данные представляются матрицей, а для построения отдельных графиков — списками (переменные — см. ниже).
(%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)$
Простейшую линейную регрессию можно построить, используя функцию (пакет stats). Построим зависимость цены автомобиля от его стоимости и пробега:
(%i21) xy:makelist([age[k],price[k]], k, 1, 30)$ (%i22) simple_linear_regression(xy);
Построим аналогичную зависимость цены автомобиля от пробега, но не в линейной, а в экспоненциальной форме:
(%i26) xy:makelist([mile[k],log(price[k])], k, 1, 30)$ (%i27) simple_linear_regression(xy);
Полученные зависимости представлены в виде выражений Maxima:
(%i28) fun1:5757.6-392.7*x$(%i29) exp(9.175);
(%i30) fun2:9653*exp(-2.375*10^(-5)*x);
Проиллюстрируем полученные результаты графически ( рис. 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). Искомая модель была представлена уравнением:
Необходимые команды Maxima:
(%i5) lsquares_estimates(data,[x,y,z],z=a+b*x+c*y+d*y^2,[a,b,c,d]);
(%i6) float(%);
Следует отметить, что сильно нелинейные задачи решаются при помощи медленно, поэтому результаты построения модели сильно зависят от обоснованности постановки задачи оценивания. Графическая иллюстрация представлена на рис. 7.5.
увеличить изображение
Рис. 7.5. Иллюстрация зависимости отклика (цены подержанного автомобиля) от двух независимых факторов (возраста и пробега автомобиля)