メインコンテンツ

fitlm

線形回帰モデルの当てはめ

説明

mdl = fitlm(tbl) は、入力データに当てはめた線形回帰モデルを返します。入力 table tbl の変数について、fitlm は最後の変数を応答として扱います。

mdl = fitlm(tbl,ResponseVarName) は、応答データが格納された table 変数を指定します。

mdl = fitlm(tbl,y) は、tbl の変数を予測子に使用し、y を応答に使用します。

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

変数を table に格納します。

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

table の最初の 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

変数を table に格納します。

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

変数を table に格納します。

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 = 3×1 cell
    {'70'}
    {'76'}
    {'82'}

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

Year_reordered = reordercats(Year,{'76','70','82'});
categories(Year_reordered)
ans = 3×1 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

入力引数

すべて折りたたむ

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

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

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

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

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

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

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

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

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

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

応答として使用する変数の名前。string スカラーまたは文字ベクトルとして指定します。ResponseVarName は、tbl のどの変数に応答データが格納されているかを示します。ResponseVarName を指定する場合、入力引数 tbl も指定しなければなりません。

データ型: char | string

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

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

データ型: single | double

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

データ型: single | double

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

  • モデルの名前を含む文字ベクトルまたは string スカラー。

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

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

    "y ~ terms",

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

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

modelspec を指定する場合、名前と値の引数 PredictorVars を使用して予測子変数を指定することはできません。

例: 'quadratic'

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

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

名前と値の引数

すべて折りたたむ

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

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

カテゴリカル予測子のリスト。table tbl 内のカテゴリカル予測子名が含まれている string 配列または文字ベクトルの cell 配列、またはどの予測子の列がカテゴリカルであるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルとして指定します。

  • 予測子データが table 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

当てはめから除外する観測値。当てはめから除外する観測値を示す論理インデックス ベクトルまたは数値インデックス ベクトルとして指定します。

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

例: Exclude=[2,3]

例: Exclude=logical([0 1 1 0 0 0])

データ型: single | double | logical

当てはめにおける定数項 (切片) のインジケーター。モデルに定数項を含める場合は true、モデルから定数項を削除する場合は 0 false として指定します。

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

例: Intercept=false

当てはめで使用する予測子変数。table tbl に格納されている変数の名前を表す string 配列または文字ベクトルの cell 配列、またはどの列が予測子変数であるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルとして指定します。

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

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

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

PredictorVars を指定する場合、入力引数 modelspec を使用して項の行列を指定することはできません。

例: PredictorVars=[2,3]

例: PredictorVars=logical([0 1 1 0 0 0])

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

当てはめで使用する応答変数。table tbl 内の変数名が格納されている文字ベクトルまたは string スカラー、またはどの列が応答変数であるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルとして指定します。通常、table 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 は、推定を正規分布に対して不偏にします。Xp 個の列がある場合、中央値を計算するときに、最小のものから p 個の絶対偏差が除外されます。

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

例: 'RobustOpts','andrews'

変数の名前。X の列名が最初に、応答変数 y の名前が最後に含まれている string 配列または文字ベクトルの cell 配列として指定します。

table の変数には既に名前が設定されているため、VarNames はそれらの変数には適用されません。

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

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

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

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

例: VarNames=["Horsepower","Acceleration","Model_Year","MPG"]

データ型: string | cell

観測値の重み。非負のスカラー値の n 行 1 列のベクトル (n は観測値の数) として指定します。

データ型: single | double

出力引数

すべて折りたたむ

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

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

詳細

すべて折りたたむ

ヒント

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

  • モデルに学習をさせた後で、新しいデータについて応答を予測する 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 で導入

すべて展開する