В этом примере показано, как разделить данные из patients.mat
файл данных в группы. Затем показано, как вычислить средние веса и индексы массы тела и отклонения в показаниях артериального давления для групп пациентов. В нем также показано, как суммировать результаты в таблице.
Загрузка выборочных данных собранной от 100 пациентов.
load patients
Преобразование Gender
и SelfAssessedHealthStatus
в категориальные массивы.
Gender = categorical(Gender); SelfAssessedHealthStatus = categorical(SelfAssessedHealthStatus); whos
Name Size Bytes Class Attributes Age 100x1 800 double Diastolic 100x1 800 double Gender 100x1 330 categorical Height 100x1 800 double LastName 100x1 11616 cell Location 100x1 14208 cell SelfAssessedHealthStatus 100x1 560 categorical Smoker 100x1 100 logical Systolic 100x1 800 double Weight 100x1 800 double
Разделите пациентов на некурящих и курильщиков, используя Smoker
переменная. Вычислите средний вес для каждой группы.
[G,smoker] = findgroups(Smoker); meanWeight = splitapply(@mean,Weight,G)
meanWeight = 2×1
149.9091
161.9412
The findgroups
функция возвращает G
, вектор чисел групп, созданный из Smoker
. The splitapply
функция использует G
чтобы разделить Weight
в две группы. splitapply
применяет mean
функция для каждой группы и объединяет средние веса в вектор.
findgroups
возвращает вектор идентификаторов групп в качестве второго выходного аргумента. Идентификаторы групп являются логическими значениями, потому что Smoker
содержит логические значения. Пациенты в первой группе являются некурящими, а пациенты во второй группе - курильщиками.
smoker
smoker = 2x1 logical array
0
1
Разделите веса пациентов по полу и статусу курильщика и вычислите средние веса.
G = findgroups(Gender,Smoker); meanWeight = splitapply(@mean,Weight,G)
meanWeight = 4×1
130.3250
130.9231
180.0385
181.1429
Уникальные комбинации между Gender
и Smoker
идентифицировать четыре группы пациентов: Женщины-некурящие, курильщицы-женщины, некурящие мужчины и курильщики-мужчины. Результирующие четыре группы и их средние веса в таблице.
[G,gender,smoker] = findgroups(Gender,Smoker); T = table(gender,smoker,meanWeight)
T=4×3 table
gender smoker meanWeight
______ ______ __________
Female false 130.32
Female true 130.92
Male false 180.04
Male true 181.14
T.gender
содержит категориальные значения и T.smoker
содержит логические значения. Типы данных этих табличных переменных совпадают с типами данных Gender
и Smoker
соответственно.
Рассчитать индекс массы тела (ИМТ) для четырех групп пациентов. Задайте функцию, которая принимает Height
и Weight
как свои два входных параметров, и который вычисляет ИМТ.
meanBMIfcn = @(h,w)mean((w ./ (h.^2)) * 703); BMI = splitapply(meanBMIfcn,Height,Weight,G)
BMI = 4×1
21.6721
21.6686
26.5775
26.4584
Вычислите долю пациентов, которые сообщают о своем здоровье как Poor
или Fair
. Во-первых, используйте splitapply
подсчитать количество пациентов в каждой группе: Женщины-некурящие, курильщицы-женщины, некурящие-мужчины и курильщики-мужчины. Затем считайте также только тех пациентов, которые сообщают о своем здоровье Poor
или Fair
, использование логической индексации на S
и G
. Из этих двух наборов отсчётов вычислите дробь для каждой группы.
[G,gender,smoker] = findgroups(Gender,Smoker); S = SelfAssessedHealthStatus; I = ismember(S,{'Poor','Fair'}); numPatients = splitapply(@numel,S,G); numPF = splitapply(@numel,S(I),G(I)); numPF./numPatients
ans = 4×1
0.2500
0.3846
0.3077
0.1429
Сравните стандартное отклонение в Diastolic
показания тех пациентов, которые сообщают о Poor
или Fair
здоровье и те пациенты, которые сообщают о Good
или Excellent
здоровье.
stdDiastolicPF = splitapply(@std,Diastolic(I),G(I)); stdDiastolicGE = splitapply(@std,Diastolic(~I),G(~I));
Сбор результатов в таблицу. Для этих пациентов женщин-некурящих, которые сообщают Poor
или Fair
здоровье показывает самое широкое изменение показаний артериального давления.
T = table(gender,smoker,numPatients,numPF,stdDiastolicPF,stdDiastolicGE,BMI)
T=4×7 table
gender smoker numPatients numPF stdDiastolicPF stdDiastolicGE BMI
______ ______ ___________ _____ ______________ ______________ ______
Female false 40 10 6.8872 3.9012 21.672
Female true 13 5 5.4129 5.0409 21.669
Male false 26 8 4.2678 4.8159 26.578
Male true 21 3 5.6862 5.258 26.458