Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

fitlm

線形回帰モデルを当てはめる

説明

mdl = fitlm(tbl) は、table またはデータセット配列 tbl 内の変数に対して当てはめた、線形回帰モデルを返します。既定では、fitlm は最後の変数を応答変数として取ります。

mdl = fitlm(X,y) は、データ行列 X に対して当てはめた、応答 y の線形回帰モデルを返します。

mdl = fitlm(___,modelspec) は、前の構文におけるいずれかの入力引数の組み合わせを使用して、モデル仕様を定義します。

mdl = fitlm(___,Name,Value) では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、カテゴリカルである変数、ロバスト回帰を実行する変数または観測値の重みを使用する変数を指定できます。

すべて折りたたむ

行列入力データセットを使用して線形回帰モデルを当てはめます。

行列入力データセットである carsmall データセットを読み込みます。

load carsmall
X = [Weight,Horsepower,Acceleration];

fitlm を使用して、線形回帰モデルを当てはめます。

mdl = fitlm(X,MPG)
mdl = 
Linear regression model:
    y ~ 1 + x1 + x2 + x3

Estimated Coefficients:
                    Estimate        SE          tStat        pValue  
                   __________    _________    _________    __________

    (Intercept)        47.977       3.8785        12.37    4.8957e-21
    x1             -0.0065416    0.0011274      -5.8023    9.8742e-08
    x2              -0.042943     0.024313      -1.7663       0.08078
    x3              -0.011583      0.19333    -0.059913       0.95236


Number of observations: 93, Error degrees of freedom: 89
Root Mean Squared Error: 4.09
R-squared: 0.752,  Adjusted R-Squared: 0.744
F-statistic vs. constant model: 90, p-value = 7.38e-27

モデルの表示には、モデル式、推定された係数、およびモデルの要約統計量が含まれています。

この表示のモデル式 y ~ 1 + x1 + x2 + x3 は、y=β0+β1X1+β2X2+β3X3+ϵ に対応します。

モデルの表示には、Coefficients プロパティに格納されている、推定された係数の情報も示されています。Coefficients プロパティを表示します。

mdl.Coefficients
ans=4×4 table
                    Estimate        SE          tStat        pValue  
                   __________    _________    _________    __________

    (Intercept)        47.977       3.8785        12.37    4.8957e-21
    x1             -0.0065416    0.0011274      -5.8023    9.8742e-08
    x2              -0.042943     0.024313      -1.7663       0.08078
    x3              -0.011583      0.19333    -0.059913       0.95236

Coefficient プロパティには、以下の列が含まれています。

  • Estimate — モデル内の対応する各項の係数推定値。たとえば、定数項 (intercept) の推定値は 47.977 です。

  • SE — 係数の標準誤差。

  • tStat — 各係数の t 統計量。モデル内の他の予測子が与えられた場合に、対応する係数が 0 ではないという対立仮説に対して係数が 0 であるという帰無仮説を検定するために使用します。tStat = Estimate/SE であることに注意してください。たとえば、切片の t 統計量は 47.977/3.8785 = 12.37 です。

  • pValue — 両側仮説検定の "t" 統計量に対する "p" 値。たとえば、x2t 統計量の p 値は 0.05 より大きいので、この項はモデル内の他の項に対して 5% の有意水準では有意ではありません。

モデルの要約統計量は以下のとおりです。

  • Number of observationsNaN 値が含まれていない行の数。この例では、XMPG の行数が 100 であり、異なる観測値についてデータ ベクトル MPG には 6 つの NaN 値、データ ベクトル Horsepower には 1 つの NaN 値があるので、Number of observations は 93 です。

  • Error degrees of freedomnp。ここで、n は観測値の個数、p はモデル内の係数の個数 (切片を含む) です。たとえば、モデルには 4 つの予測子があるため、Error degrees of freedom は 93 – 4 = 89 となります。

  • Root mean squared error — 平均二乗誤差の平方根。誤差分布の標準偏差の推定に使用します。

  • R-squared および Adjusted R-squared — それぞれ決定係数および調整後の決定係数。たとえば、R-squared 値からは、応答変数 MPG のばらつきの約 75% をこのモデルで説明できることがわかります。

  • F-statistic vs. constant model — 回帰モデルに対する F 検定の検定統計量。この検定では、定数項のみから構成される縮退したモデルより回帰モデルの方が有意に優れているかどうかを検定します。

  • p-value — モデルに対する F 検定の p 値。たとえば、p 値が 7.3816e-27 なので、このモデルは有意です。

これらの統計量はモデルのプロパティ (NumObservationsDFERMSE および Rsquared) に含まれており、関数 anova を使用して取得できます。

anova(mdl,'summary')
ans=3×5 table
                SumSq     DF    MeanSq      F         pValue  
                ______    __    ______    ______    __________

    Total       6004.8    92    65.269                        
    Model         4516     3    1505.3    89.987    7.3816e-27
    Residual    1488.8    89    16.728                        

plot を使用して、定数 (切片) 項を除くモデル全体に対する追加変数プロット (偏回帰のてこ比のプロット) を作成します。

plot(mdl)

Figure contains an axes object. The axes object with title Added variable plot for whole model, xlabel Adjusted whole model, ylabel Adjusted y contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Adjusted data, Fit: y=0.0449564*x, 95% conf. bounds.

標本データを読み込みます。

load carsmall

変数をテーブルに格納します。

tbl = table(Weight,Acceleration,MPG,'VariableNames',{'Weight','Acceleration','MPG'});

テーブルの最初の 5 行を表示します。

tbl(1:5,:)
ans=5×3 table
    Weight    Acceleration    MPG
    ______    ____________    ___

     3504           12        18 
     3693         11.5        15 
     3436           11        18 
     3433           12        16 
     3449         10.5        17 

ガロンあたりの走行マイル数 (MPG) に対して線形回帰モデルを当てはめます。ウィルキンソンの表記法を使用して、モデル式を指定します。

lm = fitlm(tbl,'MPG~Weight+Acceleration')
lm = 
Linear regression model:
    MPG ~ 1 + Weight + Acceleration

Estimated Coefficients:
                     Estimate         SE         tStat       pValue  
                    __________    __________    _______    __________

    (Intercept)         45.155        3.4659     13.028    1.6266e-22
    Weight          -0.0082475    0.00059836    -13.783    5.3165e-24
    Acceleration       0.19694       0.14743     1.3359       0.18493


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 4.12
R-squared: 0.743,  Adjusted R-Squared: 0.738
F-statistic vs. constant model: 132, p-value = 1.38e-27

この例の 'MPG~Weight+Acceleration' というモデルは、モデル仕様を 'linear' に設定することと同じです。たとえば、以下のようにします。

lm2 = fitlm(tbl,'linear');

モデル仕様に文字ベクトルを使用し、応答変数を指定しなかった場合、fitlmtbl 内の最後の変数を応答変数として、他の変数を予測子変数として受け入れます。

ウィルキンソンの表記法で指定したモデル式を使用して線形回帰モデルを当てはめます。

標本データを読み込みます。

load carsmall

変数をテーブルに格納します。

tbl = table(Weight,Acceleration,Model_Year,MPG,'VariableNames',{'Weight','Acceleration','Model_Year','MPG'});

重量と加速度を予測子変数として使用して、ガロンあたりの走行マイル数 (MPG) に線形回帰モデルを当てはめます。

lm = fitlm(tbl,'MPG~Weight+Acceleration')
lm = 
Linear regression model:
    MPG ~ 1 + Weight + Acceleration

Estimated Coefficients:
                     Estimate         SE         tStat       pValue  
                    __________    __________    _______    __________

    (Intercept)         45.155        3.4659     13.028    1.6266e-22
    Weight          -0.0082475    0.00059836    -13.783    5.3165e-24
    Acceleration       0.19694       0.14743     1.3359       0.18493


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 4.12
R-squared: 0.743,  Adjusted R-Squared: 0.738
F-statistic vs. constant model: 132, p-value = 1.38e-27

p 値は 0.18493 なので、AccelerationMPG に有意な影響を与えていないことがわかります。

Acceleration をモデルから削除し、予測子変数 Model_Year を追加することによりモデルの改善を試します。まず、Model_Year をカテゴリカル変数として定義します。

tbl.Model_Year = categorical(tbl.Model_Year);
lm = fitlm(tbl,'MPG~Weight+Model_Year')
lm = 
Linear regression model:
    MPG ~ 1 + Weight + Model_Year

Estimated Coefficients:
                      Estimate         SE         tStat       pValue  
                     __________    __________    _______    __________

    (Intercept)           40.11        1.5418     26.016    1.2024e-43
    Weight           -0.0066475    0.00042802    -15.531    3.3639e-27
    Model_Year_76        1.9291       0.74761     2.5804      0.011488
    Model_Year_82        7.9093       0.84975     9.3078    7.8681e-15


Number of observations: 94, Error degrees of freedom: 90
Root Mean Squared Error: 2.92
R-squared: 0.873,  Adjusted R-Squared: 0.868
F-statistic vs. constant model: 206, p-value = 3.83e-40

ウィルキンソンの表記法を使用して modelspec を指定すると、計画行列を変更せずにモデルを更新できます。fitlm は、式で指定されている変数のみを使用します。また、カテゴリカル変数 Model_Year に必要な 2 つのダミーの指標変数も作成します。

項行列を使用して線形回帰モデルを当てはめます。

table 入力の場合の項行列

モデルの変数が table に格納されている場合、項行列内の 0 の列は応答変数の位置を表します。

hospital データセットを読み込みます。

load hospital

変数をテーブルに格納します。

t = table(hospital.Sex,hospital.BloodPressure(:,1),hospital.Age,hospital.Smoker, ...
    'VariableNames',{'Sex','BloodPressure','Age','Smoker'});

項行列を使用して線形モデル 'BloodPressure ~ 1 + Sex + Age + Smoker' を表します。応答変数は table の 2 列目にあるので、項行列の 2 列目は応答変数を示す 0 の列でなければなりません。

T = [0 0 0 0;1 0 0 0;0 0 1 0;0 0 0 1]
T = 4×4

     0     0     0     0
     1     0     0     0
     0     0     1     0
     0     0     0     1

線形モデルを当てはめます。

mdl1 = fitlm(t,T)
mdl1 = 
Linear regression model:
    BloodPressure ~ 1 + Sex + Age + Smoker

Estimated Coefficients:
                   Estimate       SE        tStat        pValue  
                   ________    ________    ________    __________

    (Intercept)      116.14      2.6107      44.485    7.1287e-66
    Sex_Male       0.050106     0.98364    0.050939       0.95948
    Age            0.085276    0.066945      1.2738        0.2058
    Smoker_1           9.87      1.0346      9.5395    1.4516e-15


Number of observations: 100, Error degrees of freedom: 96
Root Mean Squared Error: 4.78
R-squared: 0.507,  Adjusted R-Squared: 0.492
F-statistic vs. constant model: 33, p-value = 9.91e-15

行列入力の場合の項行列

予測子変数と応答変数が行列と列ベクトルに格納されている場合、応答変数に対応する 0 を項行列の各行の終わりに含めなければなりません。

carsmall データセットを読み込み、予測子の行列を定義します。

load carsmall
X = [Acceleration,Weight];

項行列を使用して、'MPG ~ Acceleration + Weight + Acceleration:Weight + Weight^2' というモデルを指定します。このモデルには、変数 Acceleration および Weight の主効果および 2 次交互作用項と、変数 Weight の 2 次の項が含まれています。

T = [0 0 0;1 0 0;0 1 0;1 1 0;0 2 0]
T = 5×3

     0     0     0
     1     0     0
     0     1     0
     1     1     0
     0     2     0

線形モデルを当てはめます。

mdl2 = fitlm(X,MPG,T)
mdl2 = 
Linear regression model:
    y ~ 1 + x1*x2 + x2^2

Estimated Coefficients:
                    Estimate          SE         tStat       pValue  
                   ___________    __________    _______    __________

    (Intercept)         48.906        12.589     3.8847    0.00019665
    x1                 0.54418       0.57125    0.95261       0.34337
    x2               -0.012781     0.0060312    -2.1192      0.036857
    x1:x2          -0.00010892    0.00017925    -0.6076         0.545
    x2^2            9.7518e-07    7.5389e-07     1.2935       0.19917


Number of observations: 94, Error degrees of freedom: 89
Root Mean Squared Error: 4.1
R-squared: 0.751,  Adjusted R-Squared: 0.739
F-statistic vs. constant model: 67, p-value = 4.99e-26

5% の有意水準では、変数 Weight に対応する x2 の項と切片のみが有意です。

カテゴリカル予測子が含まれている線形回帰モデルを当てはめます。モデルの基準水準を制御するため、カテゴリカル予測子のカテゴリの順序を並べ替えます。次に、anovaを使用してカテゴリカル変数の有意性を検定します。

カテゴリカル予測子をもつモデル

carsmall データセットを読み込み、Model_Year の関数として MPG の線形回帰モデルを作成します。数値ベクトル Model_Year をカテゴリカル変数として扱うため、名前と値のペアの引数 'CategoricalVars' を使用して予測子を指定します。

load carsmall
mdl = fitlm(Model_Year,MPG,'CategoricalVars',1,'VarNames',{'Model_Year','MPG'})
mdl = 
Linear regression model:
    MPG ~ 1 + Model_Year

Estimated Coefficients:
                     Estimate      SE      tStat       pValue  
                     ________    ______    ______    __________

    (Intercept)        17.69     1.0328    17.127    3.2371e-30
    Model_Year_76     3.8839     1.4059    2.7625     0.0069402
    Model_Year_82      14.02     1.4369    9.7571    8.2164e-16


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 5.56
R-squared: 0.531,  Adjusted R-Squared: 0.521
F-statistic vs. constant model: 51.6, p-value = 1.07e-15

この表示のモデル式 MPG ~ 1 + Model_Year は、次の式に対応します。

MPG=β0+β1ΙYear=76+β2ΙYear=82+ϵ,

ΙYear=76ΙYear=82 は指標変数であり、それぞれ Model_Year の値が 76 および 82 である場合に値が 1 になります。変数 Model_Year には 3 種類の値が格納されます。これは、関数 unique を使用してチェックできます。

unique(Model_Year)
ans = 3×1

    70
    76
    82

fitlm は、基準水準として Model_Year の最小値 ('70') を選択し、2 つの指標変数 ΙYear=76 および ΙYear=82 を作成します。3 つの指標変数 (各水準について 1 つ) と切片項をモデルに含めると計画行列がランク落ちとなるので、このモデルには 2 つの指標変数のみが含まれています。

すべての指標変数をもつモデル

mdl のモデル式は、3 つの指標変数があり切片項はない次のようなモデルとして解釈できます。

y=β0Ιx1=70+(β0+β1)Ιx1=76+(β0+β2)Ιx2=82+ϵ.

または、手動で指標変数を作成しモデル式を指定することにより、3 つの指標変数があり切片項はないモデルを作成できます。

temp_Year = dummyvar(categorical(Model_Year));
Model_Year_70 = temp_Year(:,1);
Model_Year_76 = temp_Year(:,2);
Model_Year_82 = temp_Year(:,3);
tbl = table(Model_Year_70,Model_Year_76,Model_Year_82,MPG);
mdl = fitlm(tbl,'MPG ~ Model_Year_70 + Model_Year_76 + Model_Year_82 - 1')
mdl = 
Linear regression model:
    MPG ~ Model_Year_70 + Model_Year_76 + Model_Year_82

Estimated Coefficients:
                     Estimate      SE       tStat       pValue  
                     ________    _______    ______    __________

    Model_Year_70      17.69      1.0328    17.127    3.2371e-30
    Model_Year_76     21.574     0.95387    22.617    4.0156e-39
    Model_Year_82      31.71     0.99896    31.743    5.2234e-51


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 5.56

モデルの基準水準の選択

カテゴリカル変数のカテゴリの順序を変更することにより、基準水準を選択できます。まず、カテゴリカル変数 Year を作成します。

Year = categorical(Model_Year);

関数categoriesを使用して、カテゴリの順序をチェックします。

categories(Year)
ans = 3x1 cell
    {'70'}
    {'76'}
    {'82'}

Year を予測子変数として使用する場合、fitlm は 1 番目のカテゴリ '70' を基準水準として選択します。関数reordercatsを使用して Year を並べ替えます。

Year_reordered = reordercats(Year,{'76','70','82'});
categories(Year_reordered)
ans = 3x1 cell
    {'76'}
    {'70'}
    {'82'}

Year_reordered の 1 番目のカテゴリは '76' です。Year_reordered の関数として MPG の線形回帰モデルを作成します。

mdl2 = fitlm(Year_reordered,MPG,'VarNames',{'Model_Year','MPG'})
mdl2 = 
Linear regression model:
    MPG ~ 1 + Model_Year

Estimated Coefficients:
                     Estimate      SE        tStat       pValue  
                     ________    _______    _______    __________

    (Intercept)       21.574     0.95387     22.617    4.0156e-39
    Model_Year_70    -3.8839      1.4059    -2.7625     0.0069402
    Model_Year_82     10.136      1.3812     7.3385    8.7634e-11


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 5.56
R-squared: 0.531,  Adjusted R-Squared: 0.521
F-statistic vs. constant model: 51.6, p-value = 1.07e-15

mdl2 は、'76' を基準水準として使用し、2 つの指標変数 ΙYear=70 および ΙYear=82 を含めます。

カテゴリカル予測子の評価

mdl2 のモデル表示には、対応する係数がゼロに等しいかどうかをテストするための p 値が各項について含まれています。各 p 値は各指標変数を検定します。カテゴリカル変数 Model_Year を指標変数のグループとして調べるには、anovaを使用します。定数項を除くモデル内の各変数の ANOVA 統計量が含まれている成分 ANOVA 表を返すため、'components' (既定の設定) オプションを使用します。

anova(mdl2,'components')
ans=2×5 table
                  SumSq     DF    MeanSq      F        pValue  
                  ______    __    ______    _____    __________

    Model_Year    3190.1     2    1595.1    51.56    1.0694e-15
    Error         2815.2    91    30.936                       

成分 ANOVA 表には変数 Model_Yearp 値が含まれており、指標変数の p 値より小さくなっています。

線形回帰モデルを標本データに当てはめます。応答変数と予測子変数を指定し、対になっている交互作用項のみをモデルに含めます。

標本データを読み込みます。

load hospital

交互作用項をもつ線形モデルをデータに当てはめます。体重を応答変数として、性別、年齢および喫煙状況を予測子変数として指定します。また、性別と喫煙状況はカテゴリカル変数であることを指定します。

mdl = fitlm(hospital,'interactions','ResponseVar','Weight',...
    'PredictorVars',{'Sex','Age','Smoker'},...
    'CategoricalVar',{'Sex','Smoker'})
mdl = 
Linear regression model:
    Weight ~ 1 + Sex*Age + Sex*Smoker + Age*Smoker

Estimated Coefficients:
                         Estimate      SE        tStat        pValue  
                         ________    _______    ________    __________

    (Intercept)             118.7     7.0718      16.785     6.821e-30
    Sex_Male               68.336     9.7153      7.0339    3.3386e-10
    Age                   0.31068    0.18531      1.6765      0.096991
    Smoker_1               3.0425     10.446     0.29127       0.77149
    Sex_Male:Age         -0.49094    0.24764     -1.9825      0.050377
    Sex_Male:Smoker_1      0.9509     3.8031     0.25003       0.80312
    Age:Smoker_1         -0.07288    0.26275    -0.27737       0.78211


Number of observations: 100, Error degrees of freedom: 93
Root Mean Squared Error: 8.75
R-squared: 0.898,  Adjusted R-Squared: 0.892
F-statistic vs. constant model: 137, p-value = 6.91e-44

5% の有意水準では、年齢、喫煙状況、またはこれらの因子と患者の性別の交互作用によって患者の体重に有意な差が生じることはないようです。

hald データセットを読み込みます。これは、セメントの硬化熱に対してセメントの組成が与える影響を測定したデータです。

load hald

このデータセットには、変数 ingredients および heat が含まれています。行列 ingredients には、セメントに含まれている 4 種類の化学物質の組成率が格納されています。ベクトル heat には、各セメント標本に対する 180 日後の硬化熱の値が格納されています。

ロバスト線形回帰モデルをデータに当てはめます。

mdl = fitlm(ingredients,heat,'RobustOpts','on')
mdl = 
Linear regression model (robust fit):
    y ~ 1 + x1 + x2 + x3 + x4

Estimated Coefficients:
                   Estimate      SE        tStat       pValue 
                   ________    _______    ________    ________

    (Intercept)       60.09     75.818     0.79256      0.4509
    x1               1.5753    0.80585      1.9548    0.086346
    x2               0.5322    0.78315     0.67957     0.51596
    x3              0.13346     0.8166     0.16343     0.87424
    x4             -0.12052     0.7672    -0.15709     0.87906


Number of observations: 13, Error degrees of freedom: 8
Root Mean Squared Error: 2.65
R-squared: 0.979,  Adjusted R-Squared: 0.969
F-statistic vs. constant model: 94.6, p-value = 9.03e-07

詳細については、ロバスト近似と標準的な最小二乗近似の結果を比較しているロバスト回帰を使用した外れ値の影響の低減のトピックを参照してください。

10 分割交差検証を使用して、回帰モデルの平均絶対誤差を計算します。

carsmall データセットを読み込みます。予測子として変数 AccelerationDisplacement を指定し、応答として変数 Weight を指定します。

load carsmall
X1 = Acceleration;
X2 = Displacement;
y = Weight;

カスタム関数 regf (この例の終わりに掲載) を作成します。この関数は、学習データに回帰モデルを当てはめ、テスト セットで車両の重量を計算します。この関数は、車両の予測重量と真の値を比較して、平均絶対誤差 (MAE) と、テスト セットの車両の重量の範囲に調整された MAE を計算します。

メモ: この例のライブ スクリプト ファイルを使用している場合、関数 regf は既にファイルの終わりに含まれています。それ以外の場合は、この関数を .m ファイルの終わりに作成するか、MATLAB® パス上のファイルとして追加する必要があります。

既定では、crossval は 10 分割交差検証を実行します。X1X2、および y に含まれるデータから得られた学習セットとテスト セットの 10 個の分割のそれぞれについて、関数 regf を使用して MAE と調整済み MAE の値を計算します。MAE の平均値と調整済み MAE の平均値を求めます。

rng('default') % For reproducibility
values = crossval(@regf,X1,X2,y)
values = 10×2

  319.2261    0.1132
  342.3722    0.1240
  214.3735    0.0902
  174.7247    0.1128
  189.4835    0.0832
  249.4359    0.1003
  194.4210    0.0845
  348.7437    0.1700
  283.1761    0.1187
  210.7444    0.1325

mean(values)
ans = 1×2

  252.6701    0.1129

次のコードは、関数 regf を作成します。

function errors = regf(X1train,X2train,ytrain,X1test,X2test,ytest)
tbltrain = table(X1train,X2train,ytrain, ...
    'VariableNames',{'Acceleration','Displacement','Weight'});
tbltest = table(X1test,X2test,ytest, ...
    'VariableNames',{'Acceleration','Displacement','Weight'});
mdl = fitlm(tbltrain,'Weight ~ Acceleration + Displacement');
yfit = predict(mdl,tbltest);
MAE = mean(abs(yfit-tbltest.Weight));
adjMAE = MAE/range(tbltest.Weight);
errors = [MAE adjMAE];
end

入力引数

すべて折りたたむ

予測子変数と応答変数を含む入力データ。テーブルまたはデータセット配列として指定します。予測子変数は、数値、logical、categorical、文字または string にすることができます。応答変数は、数値または logical でなければなりません。

  • 既定では、fitlm は最後の変数を応答変数として、それ以外の変数を予測子変数として取ります。

  • 応答変数として異なる列を設定するには、名前と値のペア引数 ResponseVar を使用します。

  • 列のサブセットを予測子として使用するには、名前と値のペア引数 PredictorVars を使用します。

  • モデル仕様を定義するには、式または項行列を使用して引数 modelspec を設定します。式または項行列は、予測子または応答変数として使用する列を指定します。

table の変数名は、有効な MATLAB® 識別子である必要はありませんが、先頭または末尾に空白を含んではなりません。名前が有効でない場合、モデルの当てはめや調整の際に式を使用することはできません。以下に例を示します。

  • 式を使用して modelspec を指定することはできません。

  • 関数 addTerms または関数 removeTerms をそれぞれ使用するときに、式を使用して追加または削除する項を指定することはできません。

  • 名前と値のペアの引数 'Lower''Upper' を使用して関数 step または関数 stepwiselm をそれぞれ使用するときに、式を使用してモデルの下限と上限を指定することはできません。

関数 isvarname を使用して tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。

n 行 p 列の行列として指定される予測子変数。ここで、n は観測値の数、p は予測子変数の数です。X の各列が 1 つの変数を表し、各行が 1 つの観測値を表します。

既定では、明示的に削除しない限り、モデルには定数項があるので、1 の列を X に含めないでください。

データ型: single | double

n 行 1 列の数値ベクトルとして指定される応答変数。ここで、n は観測値の数です。y の各エントリは X の対応する行に対する応答です。

データ型: single | double

モデル仕様。次のいずれかの値を指定します。

  • モデルを指定する文字ベクトルまたは string スカラー。

    モデル タイプ
    'constant'モデルは定数 (切片) 項だけを含みます。
    'linear'切片と各予測子の線形項がモデルに含まれます。
    'interactions'切片、各予測子の線形項、および異なる予測子のペアすべての積がモデルに含まれます (二乗項はありません)。
    'purequadratic'切片項と各予測子の線形項および二乗項がモデルに含まれます。
    'quadratic'切片項、各予測子の線形項、二乗項、および異なる予測子のペアすべての積がモデルに含まれます。
    'polyijk'モデルは多項式であり、1 番目の予測子における次数 i までのすべての項、2 番目の予測子における次数 j までのすべての項が含まれます。3 番目以降の項についても同様です。0 ~ 9 の数値を使用して、各予測子の最大次数を指定します。モデルには交互作用項が含まれますが、各交互作用項の次数は、指定された次数の最大値を超えません。たとえば、'poly13' には、切片、x1、x2、x22、x23、x1*x2 および x1*x22 の各項が含まれます。x1 および x2 はそれぞれ 1 番目および 2 番目の予測子です。
  • モデル内の項を指定する t 行 (p + 1) 列の行列、つまり項の行列。t は項の個数、p は予測子変数の個数であり、+1 は応答変数に相当します。項行列は、予測子の個数が多いときに項をプログラムで生成する場合に便利です。

  • 次の形式の文字ベクトルまたは string スカラー

    'y ~ terms',

    ここで、termsウィルキンソンの表記法で表されます。式の変数名は tbl の変数名または Varnames によって指定された変数名でなければなりません。また、変数名は有効な MATLAB 識別子でなければなりません。

    tbl または X の項の順序によって、当てはめたモデルの項の順序が決定されます。そのため、モデルの項の順序は、指定した式での項の順序とは異なる場合があります。

例: 'quadratic'

例: 'y ~ x1 + x2^2 + x1:x2'

データ型: single | double | char | string

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'Intercept',false,'PredictorVars',[1,3],'ResponseVar',5,'RobustOpts','logistic' は定数項のないロバスト回帰モデルを指定します。ここで、アルゴリズムは既定の調整定数が指定されたロジスティック重み関数を使用し、1 番目と 3 番目の変数は予測子変数であり、5 番目の変数は応答変数です。

カテゴリカル変数のリスト。'CategoricalVars' と、テーブルまたはデータセット配列 tbl 内のカテゴリカル変数名が含まれている文字ベクトルの cell 配列または string 配列、またはどの列がカテゴリカルであるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルから構成されるコンマ区切りのペアとして指定します。

  • データがテーブルまたはデータセット配列 tbl に格納されている場合の既定では、fitlm はカテゴリカル値、論理値、文字配列、string 配列、および文字ベクトルの cell 配列をすべてカテゴリカル変数として扱います。

  • データが行列 X に格納されている場合、'CategoricalVars' の既定値は空の行列 [] です。つまり、カテゴリカルとして指定しない限り、カテゴリカルになる変数はありません。

たとえば、以下のいずれかを使用して、6 つのうちの 2 番目と 3 番目の変数をカテゴリカルとして指定できます。

例: 'CategoricalVars',[2,3]

例: 'CategoricalVars',logical([0 1 1 0 0 0])

データ型: single | double | logical | string | cell

近似から除外する観測値。'Exclude' と、近似から除外する観測値を示す論理インデックス ベクトルまたは数値インデックス ベクトルで構成されるコンマ区切りのペアとして指定します。

たとえば、以下のいずれかの例を使用して、6 つの観測値のうち観測値 2 および 3 を除外できます。

例: 'Exclude',[2,3]

例: 'Exclude',logical([0 1 1 0 0 0])

データ型: single | double | logical

当てはめにおける定数項 (切片) のインジケーター。'Intercept' と、モデルに定数項を含める true またはモデルから定数項を削除する false で構成されるコンマ区切りのペアとして指定します。

式または行列ではなく文字ベクトルまたは string スカラーを使用してモデルを指定する場合のみ、'Intercept' を使用します。

例: 'Intercept',false

当てはめで使用する予測子変数。'PredictorVars' と、テーブルまたはデータセット配列 tbl に格納されている変数の名前を表す文字ベクトルの cell 配列または string 配列、またはどの列が予測子変数であるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルから構成されるコンマ区切りのペアとして指定します。

string 値または文字ベクトルは、tbl に含まれている名前、または名前と値のペアの引数 'VarNames' を使用して指定した名前でなければなりません。

既定の設定は、X 内のすべての変数、または ResponseVar を除く、tbl 内のすべての変数です。

たとえば、以下のいずれかの例を使用して、2 番目と 3 番目の変数を予測子変数として指定できます。

例: 'PredictorVars',[2,3]

例: 'PredictorVars',logical([0 1 1 0 0 0])

データ型: single | double | logical | string | cell

当てはめで使用する応答変数。'ResponseVar' と、テーブルまたはデータセット配列 tbl 内の変数名が格納されている文字ベクトルまたは string スカラー、またはどの列が応答変数であるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルから構成されるコンマ区切りのペアとして指定します。通常、テーブルまたはデータセット配列 tbl を当てはめる場合に 'ResponseVar' を使用する必要があります。

たとえば、以下のいずれかの方法を使用して、6 つの変数のうち 4 番目の変数、つまり yield を応答変数として指定できます。

例: 'ResponseVar','yield'

例: 'ResponseVar',[4]

例: 'ResponseVar',logical([0 0 0 1 0 0])

データ型: single | double | logical | char | string

使用するロバスト近似タイプのインジケーター。'RobustOpts' と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。

  • 'off' — ロバスト近似を使用しない。fitlm は通常の最小二乗を使用します。

  • 'on' — 既定の調整定数で 'bisquare' 重み関数を使用するロバスト近似。

  • 文字ベクトルまたは string スカラー — 以下の表に記載されているロバスト近似重み関数の名前。fitlm は、表で指定されている、対応する既定の調整定数を使用します。

  • RobustWgtFun および Tune という 2 つのフィールドをもつ構造体。

    • RobustWgtFun フィールドには、次の表に記載されているロバスト近似重み関数の名前、またはカスタム重み関数の関数ハンドルを格納します。

    • Tune フィールドには、調整定数を格納します。Tune フィールドを設定しない場合、fitlm は対応する既定の調整定数を使用します。

    重み関数説明既定の設定の調整定数
    'andrews'w = (abs(r)<pi) .* sin(r) ./ r1.339
    'bisquare'w = (abs(r)<1) .* (1 - r.^2).^2 (biweight とも呼ばれます)4.685
    'cauchy'w = 1 ./ (1 + r.^2)2.385
    'fair'w = 1 ./ (1 + abs(r))1.400
    'huber'w = 1 ./ max(1, abs(r))1.345
    'logistic'w = tanh(r) ./ r1.205
    'ols'通常最小二乗 (重み関数なし)なし
    'talwar'w = 1 * (abs(r)<1)2.795
    'welsch'w = exp(-(r.^2))2.985
    関数ハンドルスケーリングされた残差のベクトル r を受け入れ、r と同じサイズの重みのベクトルを返す、カスタム重み関数1
    • 応答が正規分布に従っており、外れ値がない場合、組み込み重み関数の既定の調整定数を使用すると、統計的な効率が通常の最小二乗推定の約 95% である係数推定値が得られます。調整定数を小さくすると、大きな残差に割り当てられる重みの削減量が増え、調整定数を大きくすると、大きな残差に割り当てられる重みの削減量が減ります。

    • 重み関数の値 r は次のようになります。

      r = resid/(tune*s*sqrt(1–h)),

      resid は前回の反復の残差のベクトル、tune は調整定数、h は最小二乗近似のてこ比値のベクトル、s は以下によって与えられる誤差項の標準偏差の推定値です。

      s = MAD/0.6745.

      MAD は、残差の中央値に対する残差の中央絶対偏差です。定数 0.6745 は、推定を正規分布に対して不偏にします。X に p 個の列がある場合、中央値を計算するときに、最小のものから p 個の絶対偏差が除外されます。

ロバスト近似の場合、fitlm は M 推定を使用して推定式を定式化し、反復的に再重み付けした最小二乗 (IRLS) 法を使用してこの式を解きます。

例: 'RobustOpts','andrews'

変数の名前。'VarNames' と、X の列名が最初に、応答変数 y の名前が最後に含まれている文字ベクトルの cell 配列または string 配列から構成されるコンマ区切りのペアとして指定します。

テーブルまたはデータセット配列の変数には既に名前が設定されているため、'VarNames' はこれらの配列には適用されません。

変数名は、有効な MATLAB 識別子である必要はありませんが、先頭または末尾に空白を含んではなりません。名前が有効でない場合、モデルの当てはめや調整の際に式を使用することはできません。以下に例を示します。

  • 関数 addTerms または関数 removeTerms をそれぞれ使用するときに、式を使用して追加または削除する項を指定することはできません。

  • 名前と値のペアの引数 'Lower''Upper' を使用して関数 step または関数 stepwiselm をそれぞれ使用するときに、式を使用してモデルの下限と上限を指定することはできません。

'VarNames',varNames を指定する前に、関数 isvarname を使用して varNames の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。

例: 'VarNames',{'Horsepower','Acceleration','Model_Year','MPG'}

データ型: string | cell

観測値の重み。'Weights' と、非負のスカラー値の n 行 1 列のベクトル (n は観測値の数) で構成されるコンマ区切りのペアとして指定します。

データ型: single | double

出力引数

すべて折りたたむ

データに対する応答の最小二乗近似を表す線形モデル。LinearModel オブジェクトとして返されます。

名前と値のペア 'RobustOpts' の値が [] または 'ols' でない場合、このモデルは最小二乗近似ではありませんが、ロバスト近似関数を使用します。

詳細

すべて折りたたむ

項の行列

項行列 T は、モデル内の項を指定する t 行 (p + 1) 列の行列です。t は項の数、p は予測子変数の数であり、+1 は応答変数に相当します。T(i,j) の値は、項 i の変数 j の指数です。

たとえば、3つの予測子変数 x1x2x3 と応答変数 yx1x2x3y という順序で入力に含まれていると仮定します。T の各行は 1 つの項を表します。

  • [0 0 0 0] — 定数項 (切片)

  • [0 1 0 0]x2 (x1^0 * x2^1 * x3^0 と等価)

  • [1 0 1 0]x1*x3

  • [2 0 0 0]x1^2

  • [0 1 2 0]x2*(x3^2)

各項の最後の 0 は、応答変数を表します。一般に、項行列内のゼロの列ベクトルは、応答変数の位置を表します。行列と列ベクトルに予測子と応答変数がある場合、各行の最後の列に応答変数を示す 0 を含めなければなりません。

モデル仕様の式は 'y ~ terms' という形式の文字ベクトルまたは string スカラーです。

  • y は応答名です。

  • terms は、ウィルキンソンの表記法を使用してモデル内の予測子の項を表します。

予測子と応答変数を表現するには、table 入力 tbl の変数名、または VarNames を使用して指定された変数名を使用します。VarNames の既定値は {'x1','x2',...,'xn','y'} です。

以下に例を示します。

  • 'y ~ x1 + x2 + x3' は、切片がある 3 変数の線形モデルを指定します。

  • 'y ~ x1 + x2 + x3 – 1' は、切片がない 3 変数の線形モデルを指定します。既定では式に定数 (切片) 項が含まれることに注意してください。モデルから定数項を除外するには、–1 を式に含めなければなりません。

–1 を使用して項を明示的に削除しない限り、式は定数項を含みます。

ウィルキンソンの表記法

ウィルキンソンの表記法は、モデルに存在する項を記述します。この表記法は、モデルに存在する項に関係するものであり、それらの項の乗数 (係数) に関係するものではありません。

ウィルキンソンの表記法では、以下の記号を使用します。

  • + は、次の変数を含むことを意味します。

  • は、次の変数を含まないことを意味します。

  • : は、項の積である交互作用を定義します。

  • * は、交互作用と、より低い次数の項すべてを定義します。

  • ^ は、* を繰り返した場合とまったく同じ方法で予測子をべき乗にします。このため、^ には、より低い次数の項も含まれます。

  • () は、項をグループ化します。

次の表に、ウィルキンソンの表記法の代表的な例を示します。

ウィルキンソンの表記法標準表記の項
1定数 (切片) 項
x1^kk は正の整数x1, x12, ..., x1k
x1 + x2x1, x2
x1*x2x1, x2, x1*x2
x1:x2x1*x2 のみ
–x2x2 は含めない
x1*x2 + x3x1, x2, x3, x1*x2
x1 + x2 + x3 + x1:x2x1, x2, x3, x1*x2
x1*x2*x3 – x1:x2:x3x1, x2, x3, x1*x2, x1*x3, x2*x3
x1*(x2 + x3)x1, x2, x3, x1*x2, x1*x3

詳細は、ウィルキンソンの表記法を参照してください。

ヒント

  • LinearModel オブジェクト mdl のモデル プロパティにアクセスするには、ドット表記を使用できます。たとえば mdl.Residuals は、モデルの生の残差、ピアソン残差、スチューデント化残差および標準化残差の値が含まれているテーブルを返します。

  • モデルに学習をさせた後で、新しいデータについて応答を予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。

アルゴリズム

  • 主な近似アルゴリズムは QR 分解です。ロバスト近似の場合、fitlm は M 推定を使用して推定式を定式化し、反復的に再重み付けした最小二乗 (IRLS) 法を使用してこの式を解きます。

  • fitlm では、カテゴリカル予測子が次のように扱われます。

    • L 個の水準 (カテゴリ) があるカテゴリカル予測子をもつモデルには、L – 1 個の指標変数が含まれています。1 番目のカテゴリが基準水準として使用されるので、基準水準に対する指標変数はモデルに含まれません。カテゴリカル予測子のデータ型が categorical である場合、categories を使用してカテゴリの順序をチェックし、reordercats を使用してカテゴリを並べ替えることにより、基準水準をカスタマイズできます。指標変数の作成の詳細については、ダミー変数の自動作成を参照してください。

    • fitlm は、L – 1 個の指標変数のグループを単一の変数として扱います。指標変数を個別の予測子変数として扱うには、dummyvar を使用して指標変数を手動で作成します。そして、モデルを当てはめるときに、カテゴリカル変数の基準水準に対応するものを除く指標変数を使用します。カテゴリカル予測子 X について dummyvar(X) のすべての列と切片項を予測子として指定した場合、計画行列はランク落ちとなります。

    • L 個の水準をもつカテゴリカル予測子と連続予測子の間の交互作用項は、L – 1 個の指標変数と連続予測子の要素単位の積から構成されます。

    • L 個の水準をもつカテゴリカル予測子と M 個の水準をもつカテゴリカル予測子の間の交互作用項は、2 つのカテゴリカル予測子の水準について可能なすべての組み合わせを含めるため、(L – 1)*(M – 1) 個の指標変数から構成されます。

    • 指標の二乗はそれ自体に等しいので、より次数が高い項をカテゴリカル予測子に対して指定することはできません。

  • fitlm は、tblX および Y に含まれている NaN'' (空の文字ベクトル)、"" (空の string)、<missing>、および <undefined> 値を欠損値と見なします。fitlm は、欠損値がある観測値を当てはめで使用しません。当てはめたモデルの ObservationInfo プロパティは、fitlm が各観測値を当てはめで使用したかどうかを示します。

代替機能

  • 高次元データセットに対する計算時間を短縮するには、関数 fitrlinear を使用して線形回帰モデルを当てはめます。

  • 回帰を正則化するには、fitrlinearlassoridge または plsregress を使用します。

    • fitrlinear は、LASSO またはリッジ回帰を使用して、高次元データの回帰を正則化します。

    • lasso は、LASSO または Elastic Net を使用して、線形回帰の冗長な予測子を削除します。

    • ridge は、リッジ回帰を使用して、相関する項がある回帰を正則化します。

    • plsregress は、部分最小二乗を使用して、相関する項がある回帰を正則化します。

参照

[1] DuMouchel, W. H., and F. L. O'Brien. “Integrating a Robust Option into a Multiple Regression Computing Environment.” Computer Science and Statistics: Proceedings of the 21st Symposium on the Interface. Alexandria, VA: American Statistical Association, 1989.

[2] Holland, P. W., and R. E. Welsch. “Robust Regression Using Iteratively Reweighted Least-Squares.” Communications in Statistics: Theory and Methods, A6, 1977, pp. 813–827.

[3] Huber, P. J. Robust Statistics. Hoboken, NJ: John Wiley & Sons, Inc., 1981.

[4] Street, J. O., R. J. Carroll, and D. Ruppert. “A Note on Computing Robust Regression Estimates via Iteratively Reweighted Least Squares.” The American Statistician. Vol. 42, 1988, pp. 152–154.

拡張機能

バージョン履歴

R2013b で導入