このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
データのグループへの分割と統計値の計算
この例では、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
を返します。関数 splitapply
は G
を使用して、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
Gender
と Smoker
とを一意に組み合わせた場合、女性の非喫煙者、女性の喫煙者、男性の非喫煙者、男性の喫煙者の 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 変数のデータ型は、それぞれ Gender
と Smoker
のデータ型に一致します。
患者の 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