exponenta event banner

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

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

См. также

|

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

Подробнее