ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

fitlm

線形回帰モデルの作成

構文

  • mdl = fitlm(ds)
  • mdl = fitlm(ds,modelspec)
  • mdl = fitlm(X,y)
  • mdl = fitlm(X,y,modelspec)
  • mdl = fitlm(___,Name,Value)

説明

mdl = fitlm(ds) は、データセット配列 ds の変数に線形モデルの近似を返します。既定では、fitlm は最後の変数を応答変数として取ります。

mdl = fitlm(ds,modelspec) は、データセット配列 ds の変数に近似するため、modelspec で指定した線形型モデルを返します。

mdl = fitlm(X,y) はデータ行列 X に、応答 y の線形モデルの近似を返します。

mdl = fitlm(X,y,modelspec) は、データ行列 X に近似する線形モデル (応答 ymodelspec で指定したタイプ) を返します。

mdl = fitlm(___,Name,Value) は、1 つまたは複数の Name,Value のペアの引数によって指定された追加オプションを使用して線形モデルを返します。

たとえば、カテゴリカルである変数、ロバスト回帰を実行する変数または観測値の重みを使用する変数を指定できます。

すべて展開する

カテゴリカル予測子と 2 次項による線形回帰

2 次線形回帰モデルをデータセット配列の変数に近似します。このデータには、連続およびカテゴリカル予測子変数が含まれます。

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

load carsmall

連続予測子変数 Weight および応答変数 MPG を含むデータセット配列を構築します。ノミナル予測子変数 Year を追加します。

ds = dataset(MPG,Weight);
ds.Year = nominal(Model_Year);

YearWeight および Weight2 の関数として MPG の近似モデルを作成します。WeightWeight2 の低い次数の項であるため、式に明示的に含む必要はありません。詳細は、「」を参照してください。

mdl = fitlm(ds,'MPG ~ Year + Weight^2')
mdl = 

Linear regression model:
    MPG ~ 1 + Weight + Year + Weight^2

Estimated Coefficients:
                   Estimate      SE            tStat      pValue    
    (Intercept)        54.206        4.7117     11.505    2.6648e-19
    Weight          -0.016404     0.0031249    -5.2493    1.0283e-06
    Year_76            2.0887       0.71491     2.9215     0.0044137
    Year_82            8.1864       0.81531     10.041    2.6364e-16
    Weight^2       1.5573e-06    4.9454e-07      3.149     0.0022303

Number of observations: 94, Error degrees of freedom: 89
Root Mean Squared Error: 2.78
R-squared: 0.885,  Adjusted R-Squared 0.88
F-statistic vs. constant model: 172, p-value = 5.52e-41

fitlm は、ノミナル変数 Year のダミー (インジケーター) 変数を 2 つ作成します。ダミー変数 Year_76 は、モデル年度が 1976 の場合に値 1 を取り、そうでない場合に値 0 を取ります。ダミー変数 Year_82 は、モデル年度が 1982 の場合に値 1 を取り、そうでない場合に値 0 を取ります。1970 は基準の年です (ダミー変数についての詳細は、「ダミー指示変数」を参照してください)。近似モデルは以下のとおりです。

変数の指定と式の使用の同時操作

応答変数および予測子変数を特定すると同時に、線形回帰の式を使用してモデルを指定します。

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

load hospital

交互作用項をもつ線形モデルをデータに近似させます。名前と値のペアの引数を使用して、どの変数が応答変数であるかを示し、連続およびカテゴリカル予測子を特定します。

mdl = fitlm(hospital,'Weight~1+Age*Sex*Smoker-Age:Sex:Smoker','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

tStat の t 統計量と pValue の p 値は、年齢や喫煙状況、あるいはこれらの要因と性別との交互作用に基づき、有意水準 5% における患者の体重に有意な差異がないように見えます。

ロバスト線形回帰モデル

ロバスト近似を使用して Hald データの線形回帰モデルで近似します。

データを読み込みます。

load hald
X = ingredients; % Predictor variables
y = heat; % Response

データをロバスト線形モデルで近似します。

mdl = fitlm(X,y,'linear','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

入力引数

すべて展開する

ds - 入力データデータセット配列

データセット配列として指定される入力データ。modelspecformula の場合、予測子および応答として使用される変数が指定されます。それ以外の場合、予測子変数と応答変数を指定しないときは、既定では、最後の変数が応答変数で、その他の変数が予測子変数になります。

予測子変数は数値、あるいは論理またはカテゴリカルなどのグループ化変数の型にできます (「グループ化変数」を参照してください)。応答は数値または論理でなければなりません。

応答変数として異なる列を設定するには、名前と値のペア引数 ResponseVar を使用します。列のサブセットを予測子として使用するには、名前と値のペア引数 PredictorVars を使用します。

データ型:single | double | logical

X - 予測子変数行列

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

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

データ型:single | double | logical

y - 応答変数ベクトル

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

データ型:single | double

modelspec - モデル仕様モデルに名前を付ける文字列 | t 行 (p + 1) 列の項行列 | 'Y ~ terms' の形式の文字列

モデル仕様。以下のいずれかとして指定します。選択したモデルが stepwiselm の開始モデルになります。

  • モデルに名前を付ける文字列。

    文字列モデル タイプ
    'constant'モデルは定数 (切片) 項だけを含みます。
    'linear'モデルは各予測子に対して切片と線形項を含みます。
    'interactions'モデルは、切片、線形項、異なる予測子のペアのすべての積 (二乗項なし) を含みます。
    'purequadratic'モデルは、切片、線形項、二乗項を含みます。
    'quadratic'モデルは、切片、線形項、交互作用、二乗項を含みます。
    'polyijk'モデルは、すべての項が最初の予測子で次数 i までで、2 番目の予測子で次数 j までであるといった多項式です。数字 0 から 9 までを使用します。たとえば、'poly2111' には、1 つの定数のほかにすべての線形項と積項があり、また、予測子 1 の二乗の項を含んでいます。

  • モデル内に含める項を指定する t 行 (p + 1) 列の行列。つまり項行列であり、t は項の数、p は予測子変数の数、+ 1 は応答変数を示します。

  • 次の形式でを表す文字列。

    'Y ~ terms',

    termsウィルキンソンの表記法で指定します。

例: 'quadratic'

例: 'y ~ X1 + X2^2 + X1:X2'

名前/値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

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

'CategoricalVars' - カテゴリカル変数文字列のセル配列 | 論理インデックス ベクトルまたは数値インデックス ベクトル

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

  • データがデータセット配列 ds の場合、既定では、すべてのカテゴリカル変数または論理変数、文字配列、文字列のセル配列がカテゴリカル変数として扱われます。

  • データが行列 X の場合、この名前と値のペア引数の既定値は空の行列 [] になります。つまり、指定しない限り、カテゴリカルになる変数はありません。

たとえば、以下のいずれかの例を使用して、6 つの観測値のうち観測値 2 および 3 をカテゴリカルとして指定できます。

例: 'CategoricalVars',[2,3]

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

データ型:single | double | logical

'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 で構成されるコンマ区切りのペアとして指定します。

式または行列ではなく、文字列を使用してモデルを指定する場合にのみ、'Intercept' を使用します。

例: 'Intercept',false

'PredictorVars' - 予測子変数文字列のセル配列 | 論理インデックス ベクトルまたは数値インデックス ベクトル

近似で使用する予測子変数。'PredictorVars' と、データセット配列 ds の変数名の文字列のセル配列、あるいはどの列が予測子変数であるかを示す論理インデックス ベクトルまたは数値インデックス ベクトルで構成されるコンマ区切りのペアとして指定します。

文字列は、データセット配列 ds にある名前または名前と値のペア引数 'VarNames' を使用して指定した名前にしてください。

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

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

例: 'PredictorVars',[2,3]

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

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

'ResponseVar' - 応答変数データセット配列 ds の最後の列 (既定の設定) | 変数名の文字列 | 論理インデックス ベクトルまたは数値インデックス ベクトル

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

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

例: 'ResponseVar','yield'

例: 'ResponseVar',[4]

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

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

'RobustOpts' - ロバスト近似タイプのインジケーター'off' (既定の設定) | 'on' | 文字列 | 文字列または関数ハンドルをもつ構造体

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

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

  • 'on' — ロバスト近似を使用する。ロバスト近似を使用する場合は、重み関数 'bisquare' が既定です。

  • 文字列 — 以下のテーブルから取得したロバスト近似重み関数の名前。fitlm は、テーブルにある対応する既定の調整定数を使用します。

  • 以下のテーブルから取得したロバスト近似重み関数の名前とオプションのスカラー Tune フィールドを含む文字列 RobustWgtFun をもつ構造体 — fitlm は、重み関数 RobustWgtFun と構造体から取得した調整定数 Tune を使用します。このテーブルからロバスト近似重み関数の名前を選択できます。Tune フィールドを指定しない場合、近似関数は対応する既定の調整定数を使用します。

    重み関数既定の設定の調整定数
    'andrews'w = (abs(r)<pi) .* sin(r) ./ r1.339
    'bisquare' (既定)w = (abs(r)<1) .* (1 - r.^2).^24.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 = resid/(tune*s*sqrt(1-h)),

    resid は、以前の反復の残差のベクトル、h は最小二乗近似のレバレッジ値のベクトル、s は以下によって与えられる誤差項目の標準偏差の推定です。

    s = MAD/0.6745.

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

    応答が外れ値のない正規分布をもつ場合、既定の設定の調整定数は、通常最小二乗推定のように統計的に効率の良い約 95% の係数推定を出力します。調整定数を小さくすると、大きな残差に割り当てられる重みの削減量が増え、調整定数を大きくすると、大きな残差に割り当てられる重みの削減量が減ります。

  • 関数ハンドル RobustWgtFun とオプションのスカラー Tune フィールドをもつ構造体 — カスタムの重み関数を指定できます。fitlm は、重み関数 RobustWgtFun と構造体から取得した調整定数 Tune を使用します。残差のベクトルを受け付ける関数ハンドルとして RobustWgtFun を指定すると、同じサイズの重みのベクトルが返されます。近似関数は残差をスケーリングし、調整定数 (既定の設定は、1) と誤差の標準偏差の推定値で割った後、重み関数を呼び出します。

例: 'RobustOpts','andrews'

'VarNames' - 近似の変数の名前{'x1','x2',...,'xn','y'} (既定の設定) | 文字列のセル配列

近似の変数の名前。'VarNames' と、X の列名を最初に含み、応答変数 y の名前を最後に含む文字列のセル配列で構成されるコンマ区切りのペアとして指定します。

'VarNames' は、データセット配列の変数には適用されません。それは、それらの変数には既に名前があるためです。

たとえば、データ内で、自動車の馬力、加速度、モデル年度が予測子変数であり、ガロンあたりの走行マイル数 (MPG) が応答変数である場合は、以下のように変数に名前を付けることができます。

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

データ型:cell

'Weights' - 観測値の重みones(n,1) (既定の設定) | 非負のスカラー値の n 行 1 列のベクトル

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

データ型:single | double

出力引数

すべて展開する

mdl - 線形モデルLinearModel オブジェクト

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

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

線形モデル オブジェクト mdl のプロパティとメソッドについては、LinearModel クラスのページを参照してください。

詳細

すべて展開する

項の行列

項行列は、モデル内の項を指定する t 行 (p + 1) 列の行列です。t は項の数、p は予測子変数の数、+ 1 は応答変数を示します。T(i,j) の値は、項 i の変数 j の指数です。ABC の 3 つの予測子変数があると仮定します。

[0 0 0 0] % Constant term or intercept
[0 1 0 0] % B; equivalently, A^0 * B^1 * C^0
[1 0 1 0] % A*C
[2 0 0 0] % A^2
[0 1 2 0] % B*(C^2)

各項の最後の 0 は、応答変数を表します。一般に、以下のようになります。

  • データセット配列に変数がある場合、データセット配列内の応答変数の位置に応じて 0 で応答変数を表さなければなりません。次の例はこれを説明します。

    標本データを読み込み、データセット配列を定義します。

    load hospital
    ds = dataset(hospital.Sex,hospital.BloodPressure(:,1),hospital.Age,...
    hospital.Smoker,'VarNames',{'Sex','BloodPressure','Age','Smoker'});

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

    T = [0 0 0 0;1 0 0 0;0 0 1 0;0 0 0 1]
    
    T =
    
         0     0     0     0
         1     0     0     0
         0     0     1     0
         0     0     0     1

    データセット配列を再定義します。

    ds = dataset(hospital.BloodPressure(:,1),hospital.Sex,hospital.Age,...
    hospital.Smoker,'VarNames',{'BloodPressure','Sex','Age','Smoker'});
    

    これで、応答変数はデータセット配列の最初の項になりました。項行列を使用して、同じ線形モデル 'BloodPressure ~ 1 + Sex + Age + Smoker' を指定します。

    T = [0 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]
    T =
    
         0     0     0     0
         0     1     0     0
         0     0     1     0
         0     0     0     1
  • 行列および列ベクトルに予測子と応答変数がある場合、各項の最後に応答変数を示す 0 がなければなりません。次の例はこれを説明します。

    標本データを読み込み、予測子の行列を定義します。

    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 =
    
         0     0     0
         1     0     0
         0     1     0
         1     1     0
         0     2     0
    

    線形モデルを近似します。

    mdl = fitlm(X,MPG,T)
    mdl = 
    
    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

    変数 Weight に対応する切片および x2 の項のみが 5% の有意水準を示しています。

    ここで、定数モデルを開始モデルとし、交互作用項をもつ線形モデルを上位モデルとして、ステップワイズ回帰を実行します。

    T = [0 0 0;1 0 0;0 1 0;1 1 0];
    mdl = stepwiselm(X,MPG,[0 0 0],'upper',T)
    1. Adding x2, FStat = 259.3087, pValue = 1.643351e-28
    
    mdl = 
    
    Linear regression model:
        y ~ 1 + x2
    
    Estimated Coefficients:
                       Estimate      SE           tStat      pValue    
        (Intercept)        49.238       1.6411     30.002    2.7015e-49
        x2             -0.0086119    0.0005348    -16.103    1.6434e-28
    
    Number of observations: 94, Error degrees of freedom: 92
    Root Mean Squared Error: 4.13
    R-squared: 0.738,  Adjusted R-Squared 0.735
    F-statistic vs. constant model: 259, p-value = 1.64e-28

    ステップワイズ回帰の結果は、前の手順の fitlm の結果と整合性があります。

モデル仕様の式は次のような形式の文字列です

'Y ~ terms',

ここで

  • Y は応答名です。

  • terms は次のものを含みます

    • 変数名

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

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

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

    • * は、交互作用とすべての低い順序の項を定義します

    • ^ は、* で繰り返されるとおりに予測子をべき乗にし、^ は低い次数の項も含みます

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

    メモ:   式には既定で定数 (切片) 項が含まれます。モデルから定数項を除外するには、式に -1 を含めます。

次に例を示します。

'Y ~ A + B + C' は切片のある 3 変数線形モデルを意味します。
'Y ~ A + B + C - 1' は切片のない 3 変数線形モデルです。
'Y ~ A + B + C + B^2' は切片と B^2 項のある 3 変数モデルです。
'Y ~ A + B^2 + C' は、B^2B 項を含むので、前の例と同じです。
'Y ~ A + B + C + A:B'A*B 項を含みます。
'Y ~ A*B + C'A*B = A + B + A:B なので前の例と同じです。
'Y ~ A*B*C - A:B:C' には 3 因子交互作用を除き、ABC 間のすべての交互作用があります。
'Y ~ A*(B + C + D)' には線形項があり、さらに他の変数のそれぞれとの A の積があります。

ウィルキンソンの表記法

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

ウィルキンソンの表記法標準表記の因子
1定数 (切片) 項
A^kk は正の整数A, A2, ..., Ak
A + BA, B
A*BA, B, A*B
A:BA*B のみ
-BB は含めないでください
A*B + CA, B, C, A*B
A + B + C + A:BA, B, C, A*B
A*B*C - A:B:CA, B, C, A*B, A*C, B*C
A*(B + C)A, B, C, A*B, A*C

Statistics Toolbox™ 表記は、-1 を使用して項を明示的に削除しない限り、常に定数項を含みます。

参考

|

この情報は役に立ちましたか?