fitlm
線形回帰モデルを当てはめる
説明
では、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
変数をテーブルに格納します。
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');
モデル仕様に文字ベクトルを使用し、応答変数を指定しなかった場合、fitlm
は tbl
内の最後の変数を応答変数として、他の変数を予測子変数として受け入れます。
指定モデル式を使用する線形回帰の当てはめ
ウィルキンソンの表記法で指定したモデル式を使用して線形回帰モデルを当てはめます。
標本データを読み込みます。
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 なので、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
変数をテーブルに格納します。
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 = 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 つの指標変数 および を含めます。
カテゴリカル予測子の評価
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
入力引数
tbl
— 入力データ
テーブル | データセット配列
予測子変数と応答変数を含む入力データ。テーブルまたはデータセット配列として指定します。予測子変数は、数値、logical、categorical、文字または string にすることができます。応答変数は、数値または logical でなければなりません。
既定では、
fitlm
は最後の変数を応答変数として、それ以外の変数を予測子変数として取ります。応答変数として異なる列を設定するには、名前と値のペア引数
ResponseVar
を使用します。列のサブセットを予測子として使用するには、名前と値のペア引数
PredictorVars
を使用します。モデル仕様を定義するには、式または項行列を使用して引数
modelspec
を設定します。式または項行列は、予測子または応答変数として使用する列を指定します。
table の変数名は、有効な MATLAB® 識別子である必要はありませんが、先頭または末尾に空白を含んではなりません。名前が有効でない場合、モデルの当てはめや調整の際に式を使用することはできません。以下に例を示します。
式を使用して
modelspec
を指定することはできません。関数
addTerms
または関数removeTerms
をそれぞれ使用するときに、式を使用して追加または削除する項を指定することはできません。名前と値のペアの引数
'Lower'
と'Upper'
を使用して関数step
または関数stepwiselm
をそれぞれ使用するときに、式を使用してモデルの下限と上限を指定することはできません。
関数 isvarname
を使用して tbl
の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName
を使用してそれらを変換できます。
X
— 予測子変数
行列
n 行 p 列の行列として指定される予測子変数。ここで、n は観測値の数、p は予測子変数の数です。X
の各列が 1 つの変数を表し、各行が 1 つの観測値を表します。
既定では、明示的に削除しない限り、モデルには定数項があるので、1 の列を X
に含めないでください。
データ型: single
| double
y
— 応答変数
数値ベクトル
n 行 1 列の数値ベクトルとして指定される応答変数。ここで、n は観測値の数です。y
の各エントリは X
の対応する行に対する応答です。
データ型: single
| double
modelspec
— モデル仕様
'linear'
(既定値) | モデルを指定する文字ベクトルまたは string スカラー | t 行 (p + 1) 列の項行列 | 'y ~ terms'
という形式の文字ベクトルまたは string スカラー式
モデル仕様。次のいずれかの値を指定します。
モデルを指定する文字ベクトルまたは string スカラー。
値 モデル タイプ 'constant'
モデルは定数 (切片) 項だけを含みます。 'linear'
切片と各予測子の線形項がモデルに含まれます。 'interactions'
切片、各予測子の線形項、および異なる予測子のペアすべての積がモデルに含まれます (二乗項はありません)。 'purequadratic'
切片項と各予測子の線形項および二乗項がモデルに含まれます。 'quadratic'
切片項、各予測子の線形項、二乗項、および異なる予測子のペアすべての積がモデルに含まれます。 'poly
ijk
'モデルは多項式であり、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
— カテゴリカル変数のリスト
string 配列 | 文字ベクトルの cell 配列 | 論理インデックス ベクトルまたは数値インデックス ベクトル
カテゴリカル変数のリスト。'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
— 除外する観測値
論理インデックス ベクトルまたは数値インデックス ベクトル
近似から除外する観測値。'Exclude'
と、近似から除外する観測値を示す論理インデックス ベクトルまたは数値インデックス ベクトルで構成されるコンマ区切りのペアとして指定します。
たとえば、以下のいずれかの例を使用して、6 つの観測値のうち観測値 2 および 3 を除外できます。
例: 'Exclude',[2,3]
例: 'Exclude',logical([0 1 1 0 0 0])
データ型: single
| double
| logical
Intercept
— 定数項のインジケーター
true
(既定値) | false
当てはめにおける定数項 (切片) のインジケーター。'Intercept'
と、モデルに定数項を含める true
またはモデルから定数項を削除する false
で構成されるコンマ区切りのペアとして指定します。
式または行列ではなく文字ベクトルまたは string スカラーを使用してモデルを指定する場合のみ、'Intercept'
を使用します。
例: 'Intercept',false
PredictorVars
— 予測子変数
string 配列 | 文字ベクトルの cell 配列 | 論理インデックス ベクトルまたは数値インデックス ベクトル
当てはめで使用する予測子変数。'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 スカラー | 論理インデックス ベクトルまたは数値インデックス ベクトル
当てはめで使用する応答変数。'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'
(既定値) | 'on'
| 文字ベクトル | string スカラー | 構造体
使用するロバスト近似タイプのインジケーター。'RobustOpts'
と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。
'off'
— ロバスト近似を使用しない。fitlm
は通常の最小二乗を使用します。'on'
— 既定の調整定数で'bisquare'
重み関数を使用するロバスト近似。文字ベクトルまたは string スカラー — 以下の表に記載されているロバスト近似重み関数の名前。
fitlm
は、表で指定されている、対応する既定の調整定数を使用します。RobustWgtFun
およびTune
という 2 つのフィールドをもつ構造体。RobustWgtFun
フィールドには、次の表に記載されているロバスト近似重み関数の名前、またはカスタム重み関数の関数ハンドルを格納します。Tune
フィールドには、調整定数を格納します。Tune
フィールドを設定しない場合、fitlm
は対応する既定の調整定数を使用します。
重み関数 説明 既定の設定の調整定数 'andrews'
w = (abs(r)<pi) .* sin(r) ./ r
1.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) ./ r
1.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
— 変数の名前
{'x1','x2',...,'xn','y'}
(既定値) | string 配列 | 文字ベクトルの cell 配列
変数の名前。'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
— 観測値の重み
ones(n,1)
(既定値) | 非負のスカラー値の n 行 1 列のベクトル
観測値の重み。'Weights'
と、非負のスカラー値の n 行 1 列のベクトル (n は観測値の数) で構成されるコンマ区切りのペアとして指定します。
データ型: single
| double
出力引数
mdl
— 線形モデル
LinearModel
オブジェクト
データに対する応答の最小二乗近似を表す線形モデル。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
は、ウィルキンソンの表記法を使用してモデル内の予測子の項を表します。
予測子と応答変数を表現するには、table 入力 tbl
の変数名、または VarNames
を使用して指定された変数名を使用します。VarNames
の既定値は {'x1','x2',...,'xn','y'}
です。
以下に例を示します。
'y ~ x1 + x2 + x3'
は、切片がある 3 変数の線形モデルを指定します。'y ~ x1 + x2 + x3 – 1'
は、切片がない 3 変数の線形モデルを指定します。既定では式に定数 (切片) 項が含まれることに注意してください。モデルから定数項を除外するには、–1
を式に含めなければなりません。
–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
は、モデルの生の残差、ピアソン残差、スチューデント化残差および標準化残差の値が含まれているテーブルを返します。モデルに学習をさせた後で、新しいデータについて応答を予測する 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 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
この関数は、メモリ超過のデータに対し tall 配列をサポートしますが、いくつかの制限があります。
fitlm
に対する入力引数のいずれかが tall 配列である場合、他の入力もすべて tall 配列でなければなりません。これには、名前と値のペア'Weights'
および'Exclude'
で指定する空でない変数も含まれます。名前と値のペア
'RobustOpts'
では tall 配列はサポートされていません。tall データの場合、
fitlm
はLinearModel
オブジェクトと同じプロパティのほとんどが含まれているCompactLinearModel
オブジェクトを返します。主な違いは、コンパクトなオブジェクトがメモリ要件の影響を受けやすいということです。コンパクトなオブジェクトは、データ、またはデータと同じサイズの配列を含むプロパティを含みません。コンパクトなオブジェクトには、以下のLinearModel
のプロパティは格納されません。Diagnostics
Fitted
ObservationInfo
ObservationNames
Residuals
Steps
Variables
次を使用して
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 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2013b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)