Этот пример показывает, как разделить данные из файла данных 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 346 categorical Height 100x1 800 double LastName 100x1 12416 cell Location 100x1 15008 cell SelfAssessedHealthStatus 100x1 592 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. пол
содержит категориальные значения, и T.smoker
содержит логические значения. Типы данных этих табличных переменных совпадают с типами данных Пола
и Курильщика
соответственно.
Вычислите индекс массы тела (BMI) для четырех групп пациентов. Задайте функцию, которая берет Height
и Weight
как его два входных параметра, и это вычисляет BMI.
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