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

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

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

6.2 Статистические методы анализа данных

6.2.1 Ввод-вывод матричных данных

Для чтения и записи матричных или потоковых данных в составе Maxima предусмотрен пакет numericalio.

Функции пакета рассчитаны на ввод/вывод данных, каждое поле которых предполагается атомом (в смысле Lisp), т.е. целых чисел, чисел с плавающей точкой, строк или символов. Атомы воспринимаются numericalio так же, как при интерактивном вводе в консоли или выполнении batch-файла. Возможно использование различных символов-сепараторов для разделения полей данных (параметр separator_flag).

Основные функции пакета numericalio:

  • read_matrix(file_name) (другие формы вызова — read_matrix (file_name, separator_flag), read_matrix (S), read_matrix (S, separator_flag)). Функция read_matrix считывает матрицу из файла. Здесь file_name — имя файла, из которого считываются данные, S — имя потока. Если не указан separator_flag, данные предполагаются разделёнными пробелами. Функция возвращает считанный объект.
  • read_list(file_name) (другие формы — read_list (file_name, separator_flag), read_list (S), read_list (S, separator_flag)) — считывает список из файла или из потока.
  • write_data(X,file_name) (другие формы — write_data(object, file_name, separator_flag), write_data (X, S), write_data (object, S, separator_flag)) — осуществляет вывод объекта object (списка, матрицы, массива Lisp или Maxima и др.) в файл file_name (или объекта X в поток S). Матрицы выводятся по столбцам и строкам с использованием пробела или другого символаразделителя (см. separator_flag).

Наряду с указанными простыми функциями, используются более специфичные: read_lisp_array, read_maxima_array, read_hashed_array, read_nested_list, предназначенные для считывания массивов в формате Lisp или Maxima, особенности применения которых не рассматриваются в данной книге.

6.2.2 Функции Maxima для расчёта описательной статистики

Система Maxima содержит ряд функций для выполнения статистических расчётов (описательной статистики), объединённые в пакет descriptive. Функции, входящие в состав descriptive, позволяют выполнить расчёт дисперсии, среднеквадратичного отклонения, медианы, моды и т.п. Названия функций и краткое описание выполняемых ими действий приведены в табл. 6.1.

Таблица 6.1. Функции пакета descriptive
Функция Выполняемые действия Синтаксис вызова и примечания
mean Вычисление среднего mean(list) или mean(matrix)
geometric_mean Вычисление среднего геометрического geometric_mean(list) или geometric_mean(matrix)
harmonic_mean Вычисление среднего гармонического harmonic_mean(list) или harmonic_mean(matrix)
cor Вычисляет корреляционную матрицу cor(matrix) или cor(matrix, logical_value) logical_value равна true или false (при расчёте по ковариационной матрице)
cov, cov1 Вычисляет ковариационную матрицу cov1(matrix), cov(matrix)
median Вычисляет медиану median(list), median(matrix)
std, std1 Вычисляет среднеквадратичное отклонение (корень квадратный из var или var1) аналогично var
var, var1 Вычисляет дисперсию случайной величины var1(matrix), var(matrix), var1(list), var(list)
central_moment Вычисляет центральный момент порядка k central_moment(list, k), central_moment(matrix, k)
noncentral_moment Вычисляет момент порядка k noncentral_moment(list, k), noncentral_moment (matrix, k)
skewness Вычисление асимметрии skewness(list), skewness(matrix)
kurtosis Вычисление эксцесса kurtosis(list), kurtosis(matrix)
quantile Вычисление p-квантиля
quantile(list, p), quantile(matrix, p)
maxi, mini Выбор наибольшего и наименьшего значения в выборке соответственно maxi(list), maxi(matrix), mini(list), mini(matrix)
mean_deviation, median_deviation Сумма абсолютных отклонений от среднего или медианы соответственно Аналогично mean, median
range Размах вариации выборки range(list), range(matrix)
list_correlations Возвращает список, включающий две матрицы — матрицу, обратную ковариационной, и матрицу частных коэффициентов корреляции list_correlations(matrix), list_correlations (matrix, logical_value), где logical_value равна true или false (при расчёте по ковариационной матрице)
subsample Аналог функции submatrix
global_variances Возвращает список, содержащий различные виды дисперсии global_variances(matrix)

Построение графических иллюстраций производится при помощи функций scatterplot (непосредственная визуализация данных), histogram (строит гистограмму), barsplot (также строит гистограмму, но по дискретным или нечисловым данным), boxplot (график Бокса- Вискера), piechart (круговая диаграмма). Синтакисис вызова и параметры функций во многом аналогичны компонентам пакета draw (см. примеры ниже).

Основные общие опции (унаследованные от draw):

  • terminal — устройство, на которое выводится диаграмма (возможные значения — eps и png, по умолчанию диаграмма выводится на экран, другие варианты);
  • file_name — имя файла, в который выводить гистограмму (расширение устанавливается по опции terminal)
  • title — основной заготовок;
  • xlabel, ylabel — названия (метки) осей,

Рассмотрим пример использования функций пакета descriptive для статистической обработки массивов данных. Данные берем из файлов, входящих в состав пакета descriptive (файлы biomed.data, wind.data и др.). Перед началом работы загружаем необходимые пакеты descriptive и numericalio. При помощи функции read_matrix считывается матрица, содержащая 100 строк и 5 столбцов.

(%i1)	load(descriptive)$ load(numericalio)$
	s:read_matrix (file_search ("wind.data"))$
	length(s);
(%o4)	100
(%i5)	mean(s); /* рассчитываем среднее значение. При обработке
		матрицы получаем список средних по столбцам.*/
[9.948499999999999,10.1607,10.8685,15.7166,14.8441]\leqno{(\%o5) }
(%i6)	median(s);
[10.06,9.855,10.73,15.48,14.105]\leqno{(\%o6) }
(%i7)	var(s);
(\%o7)\  [17.22190675000001,14.98773651000001,15.47572875,\\
32.17651044000001,24.42307619000001]
(%i8)	std(s);
(\%o8)\  [4.149928523480858,3.871399812729242,3.933920277534866,\\
5.672434260526957,4.941970881136392]
(%i9)	mini(s);
[0.58,0.5,2.67,5.25,5.17]\leqno{(\%o9) }
(%i10)	maxi(s);
[20.25,21.46,20.04,29.63,27.63]\leqno{(\%o10) }
(%i11)	mini(%); /* При обработке списка и поиске в нём минимального
		элемента получаем одно значение! */
(\%o11)\  20.04

Для построения диаграмм разброса (xy-диаграмм) предназначена функция scatterplot. Синтаксис вызова:

scatterplot (list)\\
scatterplot (list, option_1, option_2, \dots)\\
scatterplot (matrix)\\
scatterplot (matrix, option_1, option_2, \dots)

Данные для функции scatterplot могут представляться вектором (списком) или матрицей. Одномерные массивы рассматриваются как временные ряды с равноотстоящими точками.

Основные опции, специфичные для данной функции:

  • point_size — размер точки на графике (целое положительное число);
  • point_type — вид точки (отсутствие точек — none (-1), dot (0), plus (1), multiply (2), asterisk (3), square (4), filled_square (5), circle (6), filled_circle (7), up_triangle (8), filled_up_triangle (9), down_triangle (10), filled_down_triangle (11), diamant (12), filled_diamant (13));
  • color — цвет точки (тот же набор цветов, что и в пакете draw);
  • grid — наличие сетки на графике (true/false).

Для построения гистограмм используется функция histogram (синтаксис вызова аналогичен scatterplot и основные опции идентичны опциям scatterplot). Рассмотрим дополнительные опции, специфичные для histogram:

  • nclasses (по умолчанию 10) — число классов гистограммы, или список с указанием пределов классов и их число, или только пределы;
  • frequency — указывает масштаб шкалы ординат, возможные значения: абсолютный, относительный и процентный (default, absolute, persent);
  • htics (default, auto) — формат промежуточных делений на гистограмме, возможные значения — auto, endpoints, intervals, или список меток;

При построении гистограммы доступны также локальные и глобальные опции пакета draw.

Для графического представления описательной статистики служит диаграмма Бокса-Уискера ("ящик-с-усами"), которая является удобным способом наглядно представить статистические данные пятью параметрами: наименьшее и наибольшее значения выборки, нижний, средний и верхний квартили. На данной диаграмме могут быть показаны и выбросы (если они есть).

Для построения диаграмм Бокса-Уискера используется функция boxplot. Синтаксис вызова: boxplot(data) или boxplot(data,option_1,option_2,...).

Параметр data — список или матрица с несколькими столбцами. Опции функции boxplot идентичны опциям scatterplot.

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

Достаточно распространённым способом графического изображения структуры статистических совокупностей является секторная диаграмма, так как идея целого очень наглядно выражается кругом, который представляет всю совокупность. Относительная величина каждого значения изображается в виде сектора круга, площадь которого соответствует вкладу этого значения в сумму значений. Этот вид графиков строится в Maxima функцией piechart.

Рассмотрим примеры использования графических утилит пакета descriptive.

Для дальнейшего использования считываем данные из файла wind.data (это тестовый файл в составе пакета descriptive, содержит матрицу 100х5).

(%i1)	load(descriptive)$ load(numericalio)$
	s:read_matrix (file_search("wind.data"))$
(%i4)	x:makelist(s[k][1],k,1,length(s))$
(%i5)	y:makelist(s[k][2],k,1,length(s))$
(%i6)	m:makelist([x[k],y[k]],k,1,100)$
(%i7)	xy:apply('matrix,m)$
Точечный график

Рис. 6.1. Точечный график

Строим график (точечный) зависимости y от x (см. рис.6.1). Результаты сохраняются в файле maxima_out.eps (имя файла — по умолчанию, он создаётся в домашнем каталоге пользователя). Необходимые команды:

(%i8)	scatterplot(xy,terminal=eps);

Считывая данные из файла pidigits.data, строим гистограмму частотного распределения десятичных знаков числа π (см. рис.6.2). Результаты сохраняются в файле histogram.eps (имя файла задаётся опцией file_name = "histogram", он создаётся в домашнем каталоге пользователя). Необходимые команды:

load (descriptive)$ s1 : read_list (file_search ("pidigits.data"))$
histogram (s1, nclasses=8, title="pi digits", xlabel="digits",
	ylabel="Absolute frequency", fill_color=grey, fill_density=0.6,
	terminal=eps, file_name="histogram")$

Следующий пример — график Бокса-Уискера с аннотациями по осям (см. рис.6.3). Необходимые команды (результат сохраняется в файле boxwisker.eps, англоязычные наименования заменены на русские переводы):

(%i10)	boxplot(s,title = "Test plot", xlabel = "Seasons",
	terminal=eps,file_name="boxwisker")$
Гистограмма

Рис. 6.2. Гистограмма

Пример построения столбчатой диаграммы с использованием функции barsplot — на рис.6.4. График построен командой (результат сохраняется в файл barsplot.eps):

load (descriptive)$
l1:makelist(random(8),k,1,50)$
l2:makelist(random(8),k,1,100)$
barsplot(l1,l2, box_width=1/2, fill_density=3/4,sample_keys=["A","B"],
	bars_colors=[grey10,grey50], terminal=eps, file_name="barsplot")$

Основные опции команды barsplot:

  • box_width — относительная ширина прямоугольников (по умолчанию 3/4, величина в пределах [0, 1]);
  • grouping — индикатор, показывающий, как представляются множественные образцы (возможные значения clustered и stacked);
  • groups_gap — натуральное число, представляющее разрыв между двумя соседними группами (относительная величина, по умолчанию 1);
  • bars_colors — список цветов для множественных образцов (по умолчанию [ ]);
  • start_at — указывает начало графика по оси x (по умолчанию 0).
График Бокса-Уискера

Рис. 6.3. График Бокса-Уискера

С функцией barsplot можно использовать и опции пакета draw.

Для построения круговых (секторных) диаграмм используется функция piechart.

Пример использования piechart:

load (descriptive)$
s1 : read_list (file_search ("pidigits.data"))$
piechart(s1, xrange=[-1.1, 1.3], yrange=[-1.1, 1.1],
	title="Digit frequencies in pi")$

Цвета секторов и радиус диаграммы описываются опциями sector_colors и pie_radius.

Гистограмма распределения в группах

Рис. 6.4. Гистограмма распределения в группах

К сожалению, базовая программа вывода графики Maxima — gnuplot — написана очень давно, и воспринимает кириллические символы только в кодировках KOI8-R или KOI8-U (в последних версиях — и utf8). Возможным решением (принятым для построения графиков в этой книге) является создание файла .gnuplot, содержащего следующие команды: set encoding koi8r или set encoding utf8.

Однако и в этом случае может возникнуть необходимость в редактировании файла maxout.gnuplot, содержащего команды для построения последнего графика.

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