广义线性模型

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

查看模块参考以获取命令和参数。

示例

# 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:                   三, 16 10 2024   Deviance:                     0.087389
Time:                        18:43:04   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)\) 是指数分散模型(EDM)族的分布, 具有自然参数 \(\theta\)、尺度参数 \(\phi\) 和权重 \(w\)。 其密度由以下公式给出

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

Gamma \(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}\),参见表格

参考文献

  • 吉尔, 杰夫. 2000. 广义线性模型: 一种统一的方法. SAGE QASS 系列.

  • Green, PJ. 1984. “用于最大似然估计的迭代加权最小二乘法,以及一些稳健和抗性替代方法。” 皇家统计学会杂志, 系列 B, 46, 149-192.

  • Hardin, J.W. 和 Hilbe, J.M. 2007. “广义线性模型及其扩展”。第二版。Stata 出版社,德克萨斯州学院站。

  • McCullagh, P. 和 Nelder, J.A. 1989. “广义线性模型”。第2版。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

Link()

一个用于单参数指数族的通用链接函数。

CDFLink([dbn])

使用 scipy.stats 分布的 CDF

CLogLog()

互补对数-对数变换

LogLog()

对数-对数变换

LogC()

对数补码变换

Log()

对数变换

Logit()

logit 变换

NegativeBinomial([alpha])

负二项链接函数

Power([power])

幂变换

Cauchy()

柯西(标准柯西CDF)变换

Identity()

恒等变换

InversePower()

逆变换

InverseSquared()

逆平方变换

Probit([dbn])

概率单位(标准正态累积分布函数)变换

方差函数

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

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

负二项分布方差函数。


Last update: Oct 16, 2024