ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

線形回帰ワークフロー

この例では、線形回帰モデルの近似方法を示します。典型的なワークフローは、データのインポート、回帰の近似、品質テスト、品質改善のための修正、そして共有という流れです。

手順 1. データをテーブルにインポートする。

hospital.xls は、実験計画における患者の名前、性別、年齢、体重、血圧および治療日のデータが含まれている Excel® スプレッドシートです。最初にデータをテーブルに読み取ります。

patients = readtable('hospital.xls',...
    'ReadRowNames',true);

データの 1 行目を調べます。

patients(1,:)
ans =

  1x11 table

                name      sex    age    wgt    smoke    sys    dia    trial1    trial2    trial3    trial4
               _______    ___    ___    ___    _____    ___    ___    ______    ______    ______    ______

    YPL-320    'SMITH'    'm'    38     176      1      124    93       18       -99       -99       -99  

[sex] と [smoke] フィールドにはそれぞれ 2 つの選択肢があるようです。そのため、これらのフィールドをカテゴリカルに変更します。

patients.smoke = categorical(patients.smoke,0:1,{'No','Yes'});
patients.sex = categorical(patients.sex);

手順 2. 近似モデルを作成する。

この作業の目的は、患者の年齢、体重、性別および喫煙状況の関数として最大血圧をモデル化することです。'age''wgt''sex' および 'smoke' の関数として 'sys' の線形式を作成します。

modelspec = 'sys ~ age + wgt + sex + smoke';
mdl = fitlm(patients,modelspec)
mdl = 


Linear regression model:
    sys ~ 1 + sex + age + wgt + smoke

Estimated Coefficients:
                   Estimate        SE        tStat        pValue  
                   _________    ________    ________    __________

    (Intercept)       118.28      7.6291      15.504    9.1557e-28
    sex_m            0.88162      2.9473     0.29913       0.76549
    age              0.08602     0.06731       1.278       0.20438
    wgt            -0.016685    0.055714    -0.29947       0.76524
    smoke_Yes          9.884      1.0406       9.498    1.9546e-15


Number of observations: 100, Error degrees of freedom: 95
Root Mean Squared Error: 4.81
R-squared: 0.508,  Adjusted R-Squared 0.487
F-statistic vs. constant model: 24.5, p-value = 5.99e-14

性別、年齢および体重の予測子は 値がかなり高く、これらの予測子の一部が不要である可能性を示唆しています。

手順 3. 外れ値を特定して削除する。

近似から除外する外れ値がデータ内に存在するかどうかを確認します。残差をプロットします。

plotResiduals(mdl)

値が 12 より大きいデータは外れ値の可能性がありますが、実際には外れ値ではないかもしれません。外れ値を特定して削除する方法を、次に説明します。

外れ値を検出する。

outlier = mdl.Residuals.Raw > 12;
find(outlier)
ans =

    84

外れ値を削除する。

mdl = fitlm(patients,modelspec,...
    'Exclude',84);

mdl.ObservationInfo(84,:)
ans =

  1x4 table

               Weights    Excluded    Missing    Subset
               _______    ________    _______    ______

    WXM-486       1        true        false     false 

観測 84 はモデル内に存在しなくなります。

手順 4. モデルを簡略化する。

同等の予測精度をもちながら、予測子がより少ない簡潔なモデルの取得を試みます。step で一度に 1 つの項を追加または削除し、より優れたモデルを探究します。step では最大 10 のステップを実行できます。

mdl1 = step(mdl,'NSteps',10)
1. Removing wgt, FStat = 4.6001e-05, pValue = 0.9946
2. Removing sex, FStat = 0.063241, pValue = 0.80199

mdl1 = 


Linear regression model:
    sys ~ 1 + age + smoke

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)     115.11       2.5364    45.383    1.1407e-66
    age            0.10782     0.064844    1.6628       0.09962
    smoke_Yes       10.054      0.97696    10.291    3.5276e-17


Number of observations: 99, Error degrees of freedom: 96
Root Mean Squared Error: 4.61
R-squared: 0.536,  Adjusted R-Squared 0.526
F-statistic vs. constant model: 55.4, p-value = 1.02e-16

step は 2 つのステップを実行しました。これは、1 つの項を加算または減算しても、さらなるモデルの改良は期待できないことを意味します。

学習データで簡素化したモデルの効果をプロットします。

plotResiduals(mdl1)

残差は元のモデルとほぼ同じくらい少ないことがわかります。

手順 5. 新しいデータへの応答を予測する。

新しい対象者が 4 人いるとします。各人の年齢は 25 歳、30 歳、40 歳、65 歳で、1 人目と 3 人目が喫煙者です。mdl1 を使用して最大血圧を予測します。

ages = [25;30;40;65];
smoker = {'Yes';'No';'Yes';'No'};
systolicnew = feval(mdl1,ages,smoker)
systolicnew =

  127.8561
  118.3412
  129.4734
  122.1149

予測するためには、mdl1 が使用する変数のみが必要です。

手順 6. モデルを共有する。

他のユーザーが予測のためにこのモデルを使用できるようにすることができます。線形モデルの項にアクセスします。

coefnames = mdl1.CoefficientNames
coefnames =

  1x3 cell array

    {'(Intercept)'}    {'age'}    {'smoke_Yes'}

モデル式を表示します。

mdl1.Formula
ans = 

sys ~ 1 + age + smoke

項の係数にアクセスします。

coefvals = mdl1.Coefficients(:,1); % table
coefvals = table2array(coefvals)
coefvals =

  115.1066
    0.1078
   10.0540

モデルは sys = 115.1066 + 0.1078*age + 10.0540*smoke です。ここで smoke の値は、喫煙者が 1、非喫煙者が 0 です。