fitlm
線形回帰モデルの当てはめ
構文
説明
は、応答データが格納された table 変数を指定します。mdl = fitlm(tbl,ResponseVarName)
は、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、カテゴリカルである変数、ロバスト回帰を実行する変数または観測値の重みを使用する変数を指定できます。mdl = fitlm(___,Name=Value)
例
行列入力データ セットを使用して線形回帰モデルを当てはめます。
行列入力データ セットである 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 は、 に対応します。
モデルの表示には、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" 値。たとえば、x2の t 統計量の p 値は 0.05 より大きいので、この項はモデル内の他の項に対して 5% の有意水準では有意ではありません。
モデルの要約統計量は以下のとおりです。
Number of observations—NaN値が含まれていない行の数。この例では、XとMPGの行数が 100 であり、異なる観測値についてデータ ベクトルMPGには 6 つのNaN値、データ ベクトルHorsepowerには 1 つのNaN値があるので、Number of observationsは 93 です。Error degrees of freedom— n – p。ここで、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 なので、このモデルは有意です。
これらの統計量はモデルのプロパティ (NumObservations、DFE、RMSE および 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)

標本データを読み込みます。
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');モデル仕様に文字ベクトルを使用し、応答変数を指定しなかった場合、fitlm は tbl 内の最後の変数を応答変数として、他の変数を予測子変数として受け入れます。
ウィルキンソンの表記法で指定したモデル式を使用して線形回帰モデルを当てはめます。
標本データを読み込みます。
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 なので、Acceleration は MPG に有意な影響を与えていないことがわかります。
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 は、次の式に対応します。
,
と は指標変数であり、それぞれ Model_Year の値が 76 および 82 である場合に値が 1 になります。変数 Model_Year には 3 種類の値が格納されます。これは、関数 unique を使用してチェックできます。
unique(Model_Year)
ans = 3×1
70
76
82
fitlm は、基準水準として Model_Year の最小値 ('70') を選択し、2 つの指標変数 および を作成します。3 つの指標変数 (各水準について 1 つ) と切片項をモデルに含めると計画行列がランク落ちとなるので、このモデルには 2 つの指標変数のみが含まれています。
すべての指標変数をもつモデル
mdl のモデル式は、3 つの指標変数があり切片項はない次のようなモデルとして解釈できます。
.
または、手動で指標変数を作成しモデル式を指定することにより、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 つの指標変数 および を含めます。
カテゴリカル予測子の評価
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_Year の p 値が含まれており、指標変数の 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 データ セットを読み込みます。予測子として変数 Acceleration と Displacement を指定し、応答として変数 Weight を指定します。
load carsmall
X1 = Acceleration;
X2 = Displacement;
y = Weight;カスタム関数 regf (この例の終わりに掲載) を作成します。この関数は、学習データに回帰モデルを当てはめ、テスト セットで車両の重量を計算します。この関数は、車両の予測重量と真の値を比較して、平均絶対誤差 (MAE) と、テスト セットの車両の重量の範囲に調整された MAE を計算します。
メモ: この例のライブ スクリプト ファイルを使用している場合、関数 regf は既にファイルの終わりに含まれています。それ以外の場合は、この関数を .m ファイルの終わりに作成するか、MATLAB® パス上のファイルとして追加する必要があります。
既定では、crossval は 10 分割交差検証を実行します。X1、X2、および 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
n 行 p 列の行列として指定される予測子変数。ここで、n は観測値の数、p は予測子変数の数です。X の各列が 1 つの変数を表し、各行が 1 つの観測値を表します。
既定では、明示的に削除しない限り、モデルには定数項が含まれるので、1 の列を 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の項の順序によって、当てはめたモデルの項の順序が決定されます。そのため、モデルの項の順序は、指定した式での項の順序とは異なる場合があります。詳細については、式を参照してください。
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 は、推定を正規分布に対して不偏にします。Xに p 個の列がある場合、中央値を計算するときに、最小のものから p 個の絶対偏差が除外されます。
ロバスト近似の場合、fitlm は M 推定を使用して推定式を定式化し、反復的に再重み付けした最小二乗 (IRLS) 法を使用してこの式を解きます。
例: 'RobustOpts','andrews'
変数の名前。X の列名が最初に、応答変数 y の名前が最後に含まれている string 配列または文字ベクトルの cell 配列として指定します。
table の変数には既に名前が設定されているため、VarNames はそれらの変数には適用されません。
変数名は、有効な MATLAB 識別子である必要はありませんが、先頭または末尾に空白を含んではなりません。名前が有効でない場合、モデルの当てはめや調整の際に式を使用することはできません。以下に例を示します。
関数
addTermsまたは関数removeTermsをそれぞれ使用するときに、式を使用して追加または削除する項を指定することはできません。名前と値の引数
LowerとUpperを使用してstep関数またはstepwiselm関数をそれぞれ使用するときに、式を使用してモデルの下限と上限を指定することはできません。
VarNames を指定する前に、isvarname 関数を使用して変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。
例: VarNames=["Horsepower","Acceleration","Model_Year","MPG"]
データ型: string | cell
観測値の重み。非負のスカラー値の n 行 1 列のベクトル (n は観測値の数) として指定します。
データ型: single | double
出力引数
データに対する応答の最小二乗近似を表す線形モデル。LinearModel オブジェクトとして返されます。
名前と値のペア 'RobustOpts' の値が [] または 'ols' でない場合、このモデルは最小二乗近似ではありませんが、ロバスト近似関数を使用します。
詳細
"項行列" T は、モデル内の項を指定する t 行 (p + 1) 列の行列です。ここで、t は項の数、p は予測子変数の数であり、+1 は応答変数に相当します。T(i,j) の値は、項 i の変数 j の指数です。
たとえば、3 つの予測子変数 x1、x2、x3 と応答変数 y が x1、x2、x3、y という順序で入力に含まれていると仮定します。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 を含めなければなりません。
モデル仕様の式は ' という形式の文字ベクトルまたは string スカラーです。y ~ terms'
yは応答名です。termsは、ウィルキンソンの表記法を使用してモデル内の予測子の項を表します。
予測子変数と応答変数を表現するには、入力引数 tbl の変数名、または名前と値の引数 VarNames を使用して指定された変数名を使用します。
たとえば、VarNames が ["x1","x2",...,"xn","y"] の場合、次のようになります。
"y ~ x1 + x2 + x3"は、切片がある 3 変数の線形モデルを指定します。"y ~ x1 + x2 + x3 – 1"は、切片がない 3 変数の線形モデルを指定します。既定では式に定数 (切片) 項が含まれることに注意してください。モデルから定数項を除外するには、–1を式に含めなければなりません。
ウィルキンソンの表記法は、モデル内の項を記述します。この表記法は、モデルに含まれる項に関係するものであり、それらの項の乗数 (係数) に関係するものではありません。
ウィルキンソンの表記法では、以下の記号を使用します。
+は、次の変数を含むことを意味します。–は、次の変数を含まないことを意味します。:は、項の積である交互作用を定義します。*は、交互作用と、より低い次数の項すべてを定義します。^は、*を繰り返した場合とまったく同じ方法で予測子をべき乗にします。このため、^には、より低い次数の項も含まれます。()は、項をグループ化します。
次の表に、ウィルキンソンの表記法の代表的な例を示します。
| ウィルキンソンの表記法 | 標準表記の項 |
|---|---|
1 | 定数 (切片) 項 |
x1^k、k は正の整数 | x1, x12, ..., x1k |
x1 + x2 | x1, x2 |
x1*x2 | x1, x2, x1*x2 |
x1:x2 | x1*x2 のみ |
–x2 | x2 は含めない |
x1*x2 + x3 | x1, x2, x3, x1*x2 |
x1 + x2 + x3 + x1:x2 | x1, x2, x3, x1*x2 |
x1*x2*x3 – x1:x2:x3 | x1, x2, x3, x1*x2, x1*x3, x2*x3 |
x1*(x2 + x3) | x1, x2, x3, x1*x2, x1*x3 |
詳細は、ウィルキンソンの表記法を参照してください。
ヒント
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は、tbl、XおよびYに含まれているNaN、''(空の文字ベクトル)、""(空の string)、<missing>、および<undefined>値を欠損値と見なします。fitlmは、欠損値がある観測値を当てはめで使用しません。当てはめたモデルのObservationInfoプロパティは、fitlmが各観測値を当てはめで使用したかどうかを示します。
代替機能
高次元データ セットに対する計算時間を短縮するには、関数
fitrlinearを使用して線形回帰モデルを当てはめます。回帰を正則化するには、
fitrlinear、lasso、ridgeまたは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.
拡張機能
この関数は、メモリ超過のデータに対し tall 配列をサポートしますが、いくつかの制限があります。
fitlmに対する入力引数のいずれかが tall 配列である場合、他の入力もすべて tall 配列でなければなりません。これには、名前と値のペア'Weights'および'Exclude'で指定する空でない変数も含まれます。名前と値のペア
'RobustOpts'では tall 配列はサポートされていません。tall データの場合、
fitlmはLinearModelオブジェクトと同じプロパティのほとんどが含まれているCompactLinearModelオブジェクトを返します。主な違いは、コンパクトなオブジェクトがメモリ要件の影響を受けやすいということです。コンパクトなオブジェクトは、データ、またはデータと同じサイズの配列を含むプロパティを含みません。コンパクトなオブジェクトには、以下のLinearModelのプロパティは格納されません。DiagnosticsFittedObservationInfoObservationNamesResidualsStepsVariables
次を使用して
LM = fitlm(X,Y)によって返されるコンパクトなオブジェクトから残差を直接計算できます。RES = Y - predict(LM,X); S = LM.RMSE; histogram(RES,linspace(-3*S,3*S,51))
カテゴリカル因子を含む低い次数の項が
CompactLinearModelオブジェクトに存在しない場合、次のようになります。plotEffectsおよびplotInteractionメソッドはサポートされません。'components'オプションがあるanovaメソッドはサポートされません。
詳細は、メモリに収まらないデータの tall 配列を参照してください。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2013b で導入fitlm で、ジェフリーズ事前分布によるペナルティ付きの尤度推定がサポートされるようになりました。ジェフリーズ事前分布を使用して、可分データ セットや少数の標本に一般化線形回帰モデルを当てはめるときの係数推定バイアスを減らすことができます。尤度推定にペナルティを課すには、名前と値の引数 LikelihoodPenalty を "jeffreys-prior" に設定します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)