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

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

См. также

|

Похожие примеры

Подробнее о