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

В этом примере показано, как разделить данные из 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 соответственно.

Вычислите индекс массы тела (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

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

|

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

Больше о