一般化線形モデル

一般化線形モデルは現在、1パラメータ指数型分布族を用いた推定をサポートしています。

コマンドと引数については、モジュールリファレンスを参照してください。

# Load modules and data
In [1]: import statsmodels.api as sm

In [2]: data = sm.datasets.scotland.load()

In [3]: data.exog = sm.add_constant(data.exog)

# Instantiate a gamma family model with the default link function.
In [4]: gamma_model = sm.GLM(data.endog, data.exog, family=sm.families.Gamma())

In [5]: gamma_results = gamma_model.fit()

In [6]: print(gamma_results.summary())
                 Generalized Linear Model Regression Results                  
==============================================================================
Dep. Variable:                    YES   No. Observations:                   32
Model:                            GLM   Df Residuals:                       24
Model Family:                   Gamma   Df Model:                            7
Link Function:           InversePower   Scale:                       0.0035843
Method:                          IRLS   Log-Likelihood:                -83.017
Date:                Thu, 03 Oct 2024   Deviance:                     0.087389
Time:                        16:15:27   Pearson chi2:                   0.0860
No. Iterations:                     6   Pseudo R-squ. (CS):             0.9800
Covariance Type:            nonrobust                                         
======================================================================================
                         coef    std err          z      P>|z|      [0.025      0.975]
--------------------------------------------------------------------------------------
const                 -0.0178      0.011     -1.548      0.122      -0.040       0.005
COUTAX              4.962e-05   1.62e-05      3.060      0.002    1.78e-05    8.14e-05
UNEMPF                 0.0020      0.001      3.824      0.000       0.001       0.003
MOR                -7.181e-05   2.71e-05     -2.648      0.008      -0.000   -1.87e-05
ACT                    0.0001   4.06e-05      2.757      0.006    3.23e-05       0.000
GDP                -1.468e-07   1.24e-07     -1.187      0.235   -3.89e-07    9.56e-08
AGE                   -0.0005      0.000     -2.159      0.031      -0.001   -4.78e-05
COUTAX_FEMALEUNEMP -2.427e-06   7.46e-07     -3.253      0.001   -3.89e-06   -9.65e-07
======================================================================================

詳細な例はこちらにあります。

技術文書

各観測値\(i\)の統計モデルは、次のように仮定されます。

\(Y_i \sim F_{EDM}(\cdot|\theta,\phi,w_i)\) および \(\mu_i = E[Y_i|x_i] = g^{-1}(x_i^\prime\beta)\).

ここで、\(g\)はリンク関数であり、\(F_{EDM}(\cdot|\theta,\phi,w)\)は自然パラメータ\(\theta\)、尺度パラメータ\(\phi\)、ウェイト\(w\)を持つ指数型分散モデル(EDM)の分布です。その密度関数は次式で与えられます。

\(f_{EDM}(y|\theta,\phi,w) = c(y,\phi,w) \exp\left(\frac{y\theta-b(\theta)}{\phi}w\right)\,.\)

したがって、\(\mu = b'(\theta)\)および\(Var[Y|x]=\frac{\phi}{w}b''(\theta)\)となります。最初の式の逆関数は、期待値の関数としての自然パラメータ\(\theta(\mu)\)を与え、

\(Var[Y_i|x_i] = \frac{\phi}{w_i} v(\mu_i)\)

ここで\(v(\mu) = b''(\theta(\mu))\)です。したがって、GLMはリンク関数\(g\)と分散関数\(v(\mu)\)のみ(もちろん\(x\)も)によって決定されると言えます。

すべての観測値\(y_i\)\(\phi\)が同じであるため\(\beta\)の推定には影響しませんが、ウェイト\(w_i\)は各\(y_i\)で異なる可能性があり、\(\beta\)の推定に影響します。

分布

定義域

\(\mu=E[Y|x]\)

\(v(\mu)\)

\(\theta(\mu)\)

\(b(\theta)\)

\(\phi\)

二項分布 \(B(n,p)\)

\(0,1,\ldots,n\)

\(np\)

\(\mu-\frac{\mu^2}{n}\)

\(\log\frac{p}{1-p}\)

\(n\log(1+e^\theta)\)

1

ポアソン分布 \(P(\mu)\)

\(0,1,\ldots,\infty\)

\(\mu\)

\(\mu\)

\(\log(\mu)\)

\(e^\theta\)

1

負の二項分布 \(NB(\mu,\alpha)\)

\(0,1,\ldots,\infty\)

\(\mu\)

\(\mu+\alpha\mu^2\)

\(\log(\frac{\alpha\mu}{1+\alpha\mu})\)

\(-\frac{1}{\alpha}\log(1-\alpha e^\theta)\)

1

正規分布 \(N(\mu,\sigma^2)\)

\((-\infty,\infty)\)

\(\mu\)

\(1\)

\(\mu\)

\(\mu\)

\(\sigma^2\)

ガンマ分布 \(N(\mu,\nu)\)

\((0,\infty)\)

\(\mu\)

\(\mu^2\)

\(-\frac{1}{\mu}\)

\(-\log(-\theta)\)

\(\frac{1}{\nu}\)

逆ガウス分布 \(IG(\mu,\sigma^2)\)

\((0,\infty)\)

\(\mu\)

\(\mu^3\)

\(-\frac{1}{2\mu^2}\)

\(-\sqrt{-2\theta}\)

\(\sigma^2\)

ツイディー分布 \(p\geq 1\)

\(p\)に依存

\(\mu\)

\(\mu^p\)

\(\frac{\mu^{1-p}}{1-p}\)

\(\frac{\alpha-1}{\alpha}\left(\frac{\theta}{\alpha-1}\right)^{\alpha}\)

\(\phi\)

ツイディー分布は、表に示されていない\(p=0,1,2\)の特殊な場合を持ち、\(\alpha=\frac{p-2}{p-1}\)を使用します。

数学変数とコードの対応

  • \(Y\)\(y\)endogとしてコード化されます(モデル化したい変数)。

  • \(x\)exogとしてコード化されます(共変量、説明変数)。

  • \(\beta\)paramsとしてコード化されます(推定したいパラメータ)。

  • \(\mu\)muとしてコード化されます(\(x\)を条件とした\(Y\)の期待値)。

  • \(g\)class Familyへのlink引数としてコード化されます。

  • \(\phi\)scaleとしてコード化されます(EDMの分散パラメータ)。

  • \(w\)はまだサポートされていません(つまり、\(w=1\))。将来的にはvar_weightsになる可能性があります。

  • \(p\)は、ツイディー分布の分散関数\(v(\mu)\)のべき乗var_powerとしてコード化されます(表を参照)。

  • \(\alpha\)は次のいずれかです。

    • 負の二項分布:補助パラメータalpha(表を参照)。

    • ツイディー分布:分散関数のべき乗\(p\)\(\frac{p-2}{p-1}\)の略記(表を参照)。

参考文献

  • Gill, Jeff. 2000. Generalized Linear Models: A Unified Approach. SAGE QASS Series.

  • Green, PJ. 1984. “Iteratively reweighted least squares for maximum likelihood estimation, and some robust and resistant alternatives.” Journal of the Royal Statistical Society, Series B, 46, 149-192.

  • Hardin, J.W. and Hilbe, J.M. 2007. “Generalized Linear Models and Extensions.” 2nd ed. Stata Press, College Station, TX.

  • McCullagh, P. and Nelder, J.A. 1989. “Generalized Linear Models.” 2nd ed. Chapman & Hall, Boca Rotan.

モジュールリファレンス

モデルクラス

GLM(endog, exog[, family, offset, exposure, ...])

一般化線形モデル

結果クラス

GLMResults(model, params, ...[, cov_type, ...])

GLMの結果を格納するクラス。

PredictionResultsMean(predicted_mean, ...[, ...])

GLMの予測結果。

分布族

現在実装されている分布族は次のとおりです。

Family(link, variance[, check_link])

1パラメータ指数分布族の親クラス。

Binomial([link, check_link])

二項指数分布族。

Gamma([link, check_link])

ガンマ指数分布族。

Gaussian([link, check_link])

ガウス指数分布族。

InverseGaussian([link, check_link])

逆ガウス指数分布族。

NegativeBinomial([link, alpha, check_link])

負の二項指数分布族(NB2に対応)。

Poisson([link, check_link])

ポアソン指数分布族。

Tweedie([link, var_power, eql, check_link])

ツイディー分布族。

注記: 小文字のリンククラスは非推奨となり、将来削除されます。リンククラスは現在、Pythonクラス名の規約に従っています。

現在実装されているリンク関数は次のとおりです。すべてのリンク関数がすべての分布族で使用できるわけではありません。使用可能なリンク関数のリストは、以下で取得できます。

>>> sm.families.family.<familyname>.links

リンク()

1パラメータ指数分布族の汎用リンク関数。

CDFLink([dbn])

scipy.stats分布のCDFを使用する。

CLogLog()

補数対数対数変換

LogLog()

対数対数変換

LogC()

対数補数変換

Log()

対数変換

Logit()

ロジット変換

NegativeBinomial([alpha])

負の二項リンク関数。

Power([power])

ベキ変換。

Cauchy()

コーシー(標準コーシーCDF)変換

Identity()

恒等変換

InversePower()

逆ベキ変換

InverseSquared()

逆二乗変換

Probit([dbn])

プロビット(標準正規CDF)変換。

分散関数

各分布族には、関連する分散関数が存在します。分散関数はここでアクセスできます。

>>> sm.families.<familyname>.variance

VarianceFunction()

確率変数の分散を平均に関連付ける。

constant

constantのcallメソッドは、一定の分散、つまり1のベクトルを返します。

Power([power])

ベキ分散関数。

mu

np.fabs(mu)を返す。

mu_squared

np.fabs(mu)**2を返す。

mu_cubed

np.fabs(mu)**3を返す。

Binomial([n])

二項分散関数。

binary

n = 1の場合の二項分散関数。

NegativeBinomial([alpha])

負の二項分散関数。

nbinom

負の二項分散関数。


最終更新日: 2024年10月3日