nominal
и ordinal
типы данных массива не рекомендуются. Чтобы представлять упорядоченный и неупорядоченные дискретные, нечисловые данные, используйте Категориальные массивы (MATLAB) тип данных вместо этого.
В этом примере показано, как категоризировать числовые данные в категориальный порядковый массив с помощью ordinal
. Это полезно для дискретизации текущих данных.
Загрузка демонстрационных данных.
Массив набора данных, hospital
, содержит переменные, измеренные на выборке пациентов. Вычислите минимум, медиану и максимум переменной Age
.
load hospital
quantile(hospital.Age,[0,.5,1])
ans = 1×3
25 39 50
Терпеливые возрасты лежат в диапазоне от 25 до 50.
Преобразуйте числовой массив в порядковый массив.
Пациенты группы в категории возраста Under 30
, 30-39,
Over 40
.
hospital.AgeCat = ordinal(hospital.Age,{'Under 30','30-39','Over 40'},... [],[25,30,40,50]); getlevels(hospital.AgeCat)
ans = 1x3 ordinal array
Under 30 30-39 Over 40
Последний входной параметр к ordinal
имеет конечные точки для категорий. Первая категория начинается в 25 лет, второе в 30 лет, и так далее. Последняя категория содержит возрасты 40 и выше, поэтому начинается в 40 и заканчивается в 50 (максимальный возраст в наборе данных). Чтобы задать три категории, необходимо задать четыре конечных точки (последняя конечная точка является верхней границей последней категории).
Исследуйте категории.
Отобразите категорию возраста и возраста для второго пациента.
dataset({hospital.Age(2),'Age'},... {hospital.AgeCat(2),'AgeCategory'})
ans = Age AgeCategory 43 Over 40
Когда вы дискретизируете числовой массив в категории, категориальный массив теряет всю информацию о фактических числовых значениях. В этом примере, AgeCat
не является числовым, и вы не можете восстановить значения необработанных данных с него.
Категоризируйте числовой массив в квартили.
Переменная Weight
имеет измерения веса для демонстрационных пациентов. Категоризируйте терпеливые веса в четыре категории квартилем.
p = 0:.25:1; breaks = quantile(hospital.Weight,p); hospital.WeightQ = ordinal(hospital.Weight,{'Q1','Q2','Q3','Q4'},... [],breaks); getlevels(hospital.WeightQ)
ans = 1x4 ordinal array
Q1 Q2 Q3 Q4
Исследуйте категории.
Отобразите вес и квартиль веса для второго пациента.
dataset({hospital.Weight(2),'Weight'},... {hospital.WeightQ(2),'WeightQuartile'})
ans = Weight WeightQuartile 163 Q3
Итоговая статистика, сгруппированная по категориям уровни.
Вычислите среднее систолическое и диастолическое кровяное давление для каждого возраста и весовой категории.
grpstats(hospital,{'AgeCat','WeightQ'},'mean','DataVars','BloodPressure')
ans = AgeCat WeightQ GroupCount mean_BloodPressure Under 30_Q1 Under 30 Q1 6 123.17 79.667 Under 30_Q2 Under 30 Q2 3 120.33 79.667 Under 30_Q3 Under 30 Q3 2 127.5 86.5 Under 30_Q4 Under 30 Q4 4 122 78 30-39_Q1 30-39 Q1 12 121.75 81.75 30-39_Q2 30-39 Q2 9 119.56 82.556 30-39_Q3 30-39 Q3 9 121 83.222 30-39_Q4 30-39 Q4 11 125.55 87.273 Over 40_Q1 Over 40 Q1 7 122.14 84.714 Over 40_Q2 Over 40 Q2 13 123.38 79.385 Over 40_Q3 Over 40 Q3 14 123.07 84.643 Over 40_Q4 Over 40 Q4 10 124.6 85.1
Переменная BloodPressure
матрица с двумя столбцами. Первый столбец является систолическим кровяным давлением, и второй столбец является диастолическим кровяным давлением. Группа в выборке с самым высоким средним диастолическим кровяным давлением, 87.273
, в возрасте 30–39 и в самом высоком квартиле веса, 30-39_Q4
.