Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

データのグループへの分割と統計値の計算

この例では、patients.mat データ ファイルからのデータをグループに分割する方法を説明します。次に、患者のグループについて、平均体重とボディマス指数、および血圧測定値の分散を計算する方法を説明します。また、その結果をテーブルにまとめる方法も説明します。

患者データの読み込み

100 名の患者から収集されたサンプル データを読み込みます。

load patients

Gender および SelfAssessedHealthStatus を categorical 配列に変換します。

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 は、Smoker から作成されたグループ番号のベクトル G を返します。関数 splitapplyG を使用して、Weight を 2 つのグループに分割します。splitapply は関数 mean を各グループに適用し、平均体重をベクトルに連結します。

findgroups は、グループ識別子のベクトルを 2 番目の出力引数として返します。Smoker には論理値が含まれているので、グループ識別子は論理値です。最初のグループの患者は非喫煙者で、2 番目のグループの患者は喫煙者です。

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

GenderSmoker とを一意に組み合わせた場合、女性の非喫煙者、女性の喫煙者、男性の非喫煙者、男性の喫煙者の 4 つの患者グループに識別されます。この 4 つのグループとその平均体重をテーブルにまとめます。

[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 には categorical 値が含まれ、T.smoker には logical 値が含まれています。これらの table 変数のデータ型は、それぞれ GenderSmoker のデータ型に一致します。

患者の 4 つのグループのボディマス指数 (BMI) を計算します。Height および Weight を 2 つの入力引数として受け取り、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 を使用して、女性の非喫煙者、女性の喫煙者、男性の非喫煙者および男性の喫煙者の各グループの患者数を数えます。次に、S および G の論理インデックス付けを使用して、健康状態が Poor または Fair であると申告する患者のみを数えます。これらの 2 組の数から、各グループの割合を計算します。

[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

健康状態が Poor または Fair であると申告する患者と、健康状態が Good または Excellent であると申告する患者の Diastolic 測定値の標準偏差を比べます。

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

参考

|

関連するトピック