В этом примере показано, как разделить данные из 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
findgroups функция возвращает G, вектор номеров групп, созданных из Smoker. 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./numPatientsans = 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