广义线性模型

广义线性模型目前支持使用单参数指数族进行估计。

请参见 模块参考 了解命令和参数。

示例

# 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\))决定。

请注意,虽然 \(\phi\) 对每个观测值 \(y_i\) 都是相同的,因此不会影响 \(\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\)

\(\frac{1}{2}\theta^2\)

\(\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\)

Tweedie \(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\)

Tweedie 分布在 \(p=0,1,2\) 时有特殊情况,表中未列出,并且使用 \(\alpha=\frac{p-2}{p-1}\)

数学变量与代码的对应关系

  • \(Y\)\(y\) 在代码中表示为 endog,即要建模的变量

  • \(x\) 在代码中表示为 exog,即协变量别名解释变量

  • \(\beta\) 在代码中表示为 params,即要估计的参数

  • \(\mu\) 在代码中表示为 mu,即 \(Y\) 的期望值(以 \(x\) 为条件)

  • \(g\) 在代码中表示为 link,它是 class Family 的参数

  • \(\phi\) 在代码中表示为 scale,即 EDM 的弥散参数

  • \(w\) 尚未得到支持(即 \(w=1\)),将来可能会表示为 var_weights

  • \(p\) 在代码中表示为 var_power,它是 Tweedie 分布的方差函数 \(v(\mu)\) 的幂,请参见表

  • \(\alpha\) 表示以下内容:

    • 负二项式:辅助参数 alpha,请参见表

    • Tweedie:方差函数幂 \(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])

一参数指数族的父类。

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])

Tweedie 族。

注意:小写连接类已被弃用,将在未来的版本中删除。连接类现在遵循 Python 类名称约定。

当前已实现的连接函数如下所示。并非所有连接函数都适用于每个分布族。可以通过以下方法获取可用连接函数的列表

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

连接()

一参数指数族的通用连接函数。

CDFLink([dbn])

使用 scipy.stats 分布的 CDF

CLogLog()

互补对数对数变换

LogLog()

对数对数变换

LogC()

对数补变换

Log()

对数变换

Logit()

Logit 变换

NegativeBinomial([alpha])

负二项式连接函数

Power([power])

幂变换

Cauchy()

柯西 (标准柯西 CDF) 变换

Identity()

恒等变换

InversePower()

逆变换

InverseSquared()

逆平方变换

Probit([dbn])

Probit (标准正态 CDF) 变换

方差函数

每个族都有一个相关的方差函数。您可以在此处访问方差函数

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

VarianceFunction()

将随机变量的方差与其均值相关联。

constant

constant 的调用方法返回一个常数方差,即一个全为一的向量。

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 日