メインコンテンツ

fitglm

一般化線形回帰モデルの作成

説明

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

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

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

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

mdl = fitglm(___,modelspec) は、modelspec で指定したタイプの一般化線形回帰モデルを返します。

mdl = fitglm(___,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使用して一般化線形回帰モデルを返します。

たとえば、カテゴリカルである変数、応答変数の分布、使用するリンク関数を指定できます。

すべて折りたたむ

2 次交互作用モデルを使用し、年齢、体重、性別を関数とする喫煙可能性の論理二項モデルを作成します。

patients 標本データを読み込み、変数 AgeWeightGender、および Smoker を table に保存します。

load patients
tbl = table(Age,Weight,Gender,Smoker,VariableNames=["Age","Weight","Gender","Smoker"]);

変数である年齢、体重、性別の間で最大 2 次の交互作用を許容する式を使用したモデルを指定します。喫煙者は応答変数です。

modelspec = "Smoker ~ Age*Weight*Gender - Age:Weight:Gender";

論理二項モデルを当てはめます。

mdl = fitglm(tbl,modelspec,Distribution="binomial")
mdl = 
Generalized linear regression model:
    logit(Smoker) ~ 1 + Age*Weight + Age*Gender + Weight*Gender
    Distribution = Binomial

Estimated Coefficients:
                             Estimate         SE         tStat      pValue 
                            ___________    _________    ________    _______

    (Intercept)                 -8.3351        29.02    -0.28722    0.77394
    Age                         0.13764      0.70593     0.19498    0.84541
    Weight                     0.043269      0.15966     0.27101    0.78638
    Gender_Female                2.2859       12.424     0.18399    0.85402
    Age:Weight              -0.00071959    0.0038964    -0.18468    0.85348
    Age:Gender_Female         -0.020734      0.20681    -0.10025    0.92014
    Weight:Gender_Female       -0.01216     0.053168    -0.22871     0.8191


100 observations, 93 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 5.07, p-value = 0.535

すべての p 値 (pValue の) は大きな値です。つまり、有意な係数はありません。モデルのテストに対する大きい p 値 0.535 は、このモデルが定数モデルとは統計的に異なっていない可能性があることを示しています。

20 個の予測子で標本データを作成し、そのうちの 3 つのみの予測子と 1 つの定数を使ってポアソン応答を作成します。

rng('default') % for reproducibility
X = randn(100,7);
mu = exp(X(:,[1 3 6])*[.4;.2;.3] + 1);
y = poissrnd(mu);

ポアソン分布を使用して一般化線形モデルを当てはめます。

mdl =  fitglm(X,y,'linear','Distribution','poisson')
mdl = 
Generalized linear regression model:
    log(y) ~ 1 + x1 + x2 + x3 + x4 + x5 + x6 + x7
    Distribution = Poisson

Estimated Coefficients:
                   Estimate        SE        tStat        pValue  
                   _________    ________    ________    __________

    (Intercept)      0.88723    0.070969      12.502    7.3149e-36
    x1               0.44413    0.052337      8.4858    2.1416e-17
    x2             0.0083388    0.056527     0.14752       0.88272
    x3               0.21518    0.063416      3.3932    0.00069087
    x4             -0.058386    0.065503    -0.89135       0.37274
    x5             -0.060824    0.073441     -0.8282       0.40756
    x6               0.34267    0.056778      6.0352    1.5878e-09
    x7               0.04316     0.06146     0.70225       0.48252


100 observations, 92 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 119, p-value = 1.55e-22

2.14e-17、0.00069 および 1.58e-09 という p 値は、変数 x1x3 および x6 の係数が統計的に有意であることを示します。

入力引数

すべて折りたたむ

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

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

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

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

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

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

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

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

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

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

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

データ型: char | string

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

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

データ型: single | double

応答変数。ベクトルまたは行列として指定します。

  • 'Distribution''binomial' ではない場合、y は、n 行 1 列のベクトルでなければなりません。ここで、n は観測値の数です。y の各エントリは X または tbl の対応する行に対する応答です。データ型は single または double でなければなりません。

  • 'Distribution''binomial' である場合、yn 行 1 列のベクトル、または列 1 にカウントを、列 2 に BinomialSize をもつ n 行 2 列の行列とすることができます。

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

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

  • モデルの名前を含む文字ベクトルまたは 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'

名前と値の引数

すべて折りたたむ

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

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

例: 'Distribution','normal','link','probit','Exclude',[23,59] は応答の分布が正規であることを指定し、プロビット リンク関数を使用して近似から 23 番目と 59 番目の観測値を除外するよう fitglm に指示します。

二項分布の試行回数、つまり標本サイズ。'BinomialSize'tbl の変数名、数値スカラー、または応答と同じ長さの数値ベクトルで構成されるコンマ区切りのペアとして指定します。これは当てはめた二項分布のための n パラメーターです。BinomialSize は、Distribution パラメーターが 'binomial' であるときにだけ適用されます。

BinomialSize がスカラー値の場合は、すべての観測が同じ試行回数であることを意味します。

BinomialSize の代替法として、列 1 にカウント、列 2 に BinomialSize をもつ 2 列の行列として応答を指定できます。

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

係数推定値の初期値。数値ベクトルとして指定します。既定値は、入力データから派生する初期の当てはめた値です。

データ型: single | double

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

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

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

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

例: 'CategoricalVars',[2,3]

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

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

'binomial' および 'poisson' 分布の分散パラメーターを計算するインジケーター。'DispersionFlag' と以下のいずれかで構成されるコンマ区切りのペアとして指定します。

true標準誤差を計算するときに分散パラメーターを推定します。分散パラメーターの推定値は、ピアソン残差の二乗和を誤差の自由度 (DFE) で除算した値です。
false既定の設定。標準誤差を計算するときに理論値 1 を使用します。

近似関数は常に他の分布の分散を予測します。

例: 'DispersionFlag',true

応答変数の分布。'Distribution' と以下のいずれかで構成されるコンマ区切りのペアとして指定します。

'normal'正規分布
'binomial'二項分布
'poisson'ポアソン分布
'gamma'ガンマ分布
'inverse gaussian'逆ガウス分布

例: 'Distribution','gamma'

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

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

例: Exclude=[2,3]

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

データ型: single | double | logical

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

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

例: Intercept=false

尤度推定のペナルティ。"none" または "jeffreys-prior" として指定します。

  • "none"fitglm は尤度推定にペナルティを適用しません。

  • "jeffreys-prior"fitglm はジェフリーズ事前分布を使用して尤度推定にペナルティを課します。

ロジスティック モデルでは、LikelihoodPenalty"jeffreys-prior" に設定することを "Firth 回帰" と呼びます。標本の数が少ない場合や可分データ セットで二項 (ロジスティック) 回帰を実行する場合の係数推定バイアスを減らすには、LikelihoodPenalty"jeffreys-prior" に設定します。

例: LikelihoodPenalty="jeffreys-prior"

データ型: char | string

最適化オプション。構造体を指定します。この引数は、fitglm で使用される反復アルゴリズムの制御パラメーターを決定します。

最適化オプションを作成するには、statset 関数を使用するか、次のフィールドを含む構造体配列を作成します。

フィールド名既定値
MaxIter

許容される最大反復回数。正の整数として指定

100
TolX

パラメーターの終了許容誤差。正のスカラーとして指定

1e-6

コマンド ウィンドウで「statset("fitglm")」と入力して、MaxIter フィールドと TolX フィールドの既定値を表示することもできます。

例: Options=statset(MaxIter=1000,TolX=1e-7) は、最大反復回数として 1000、終了許容誤差として 1e-7 を使用するように指定します。

データ型: struct

近似のオフセット変数。'Offset' と、tbl に含まれる変数名または応答と同じ長さの数値ベクトルで構成されるコンマ区切りのペアとして指定します。

fitglm は、係数値を 1 で固定した追加の予測子として Offset を使用します。つまり、当てはめの式は次のようになります。

f(μ) = Offset + X*b,

ここで、f はリンク関数、μ は平均応答、X*b は予測子 X の線形結合です。予測子 Offset の係数は 1 です。

たとえば、ポアソン回帰モデルを検討してください。カウントの数が理論上の理由により予測子 A に対して比例していることがわかっていると仮定します。log リンク関数を使用し、オフセットに log(A) を指定することにより、この理論上の制約を満たすことをモデルに強制できます。

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

当てはめで使用する予測子変数。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

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

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

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

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

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

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

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

データ型: string | cell

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

データ型: single | double

出力引数

すべて折りたたむ

一般化線形回帰モデル。fitglm または stepwiseglm を使用して作成した GeneralizedLinearModel オブジェクトとして指定します。

詳細

すべて折りたたむ

ヒント

  • 正則化された線形モデル mdl は、別途 Distribution 名前と値のペアで指定しない限り、標準線形モデルです。

  • plotResiduals または devianceTest などのメソッドや、GeneralizedLinearModel オブジェクトのプロパティについては、GeneralizedLinearModel を参照してください。

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

アルゴリズム

  • fitglm は、反復的に再重み付けした最小二乗 (IRLS) を使用してモデルの係数を計算します。名前と値の引数 Weights を使用して観測値の重みを指定すると、fitglm は IRLS アルゴリズムの重みに観測値の重みを乗算します。

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

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

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

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

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

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

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

代替機能

  • モデル仕様を自動的に選択するには、stepwiseglm を使用します。stepaddTerms または removeTerms を使用して当てはめたモデルを調整します。

参照

[1] Collett, D. Modeling Binary Data. New York: Chapman & Hall, 2002.

[2] Dobson, A. J. An Introduction to Generalized Linear Models. New York: Chapman & Hall, 1990.

[3] McCullagh, P., and J. A. Nelder. Generalized Linear Models. New York: Chapman & Hall, 1990.

拡張機能

すべて展開する

バージョン履歴

R2013b で導入

すべて展開する