Разделение данных в группы и вычисляет статистику

Этот пример показывает, как разделить данные из файла данных 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

Смотрите также

|

Связанные примеры

Больше о

Была ли эта тема полезной?