stats | 广义线性模型(一)——广义线性模型的基本结构及与线性模型的比较...

前面已经介绍了线性模型,本系列将介绍广义线性模型(Generalized Linear Model,GLM)。广义线性模型的大多方法都与线性模型类似,因此本系列主要介绍它的不同之处。示例数据如下:

data <- mtcars

1 指数族分布

广义线性模型主要针对因变量服从指数族分布的情况。凡是概率(密度)函数能写成如下形式的分布都属于指数族分布:

  • :指数族分布的自然参数,可以为一个常数,也可以为由常数构成的向量。

离散型分布中的二项分布、泊松分布,连续型分布中的正态分布、伽马分布(包括指数分布、卡方分布等)都属于指数族分布。

广义线性模型的形式如下:

  • 分别为自变量和样本个数;

  • 是广义线性模型的连接函数,其功能是将服从指数族分布的变量的数学期望 与线性表达式连接起来。

stats工具包中用于运行广义线性模型的函数是glm,它的前三个参数如下:

glm(formula, family = gaussian, data, ...)

相比lm函数,glm函数的第二个参数是family,这也是其独有的参数:

  • formula:模型表达式;

  • family:因变量的概率分布形式,默认值为正态分布;

  • data:表达式中的变量所在的数据框。

其他重要参数如weightssubsetoffset等在线性回归系列的推文中已经有所介绍,在本系列中不再涉及。

常见的family类型及其默认的连接函数:

binomial(link = "logit") # 二项分布
poisson(link = "log") # 泊松分布
gaussian(link = "identity") # 高斯分布(正态分布)
inverse.gaussian(link = "1/mu^2") # 逆高斯分布
Gamma(link = "inverse") # 伽马分布
  • link:连接函数形式。

2 连接函数

常见连接函数的形式:

  • identity:

  • inverse:

  • sqrt:

  • logit:

  • log:

  • cloglog:

  • 1/mu^2:

  • probit:正态分布的累积概率函数(概率分布函数)的反函数;

  • cauchit:柯西分布的累积概率函数(概率分布函数)的反函数。

各分布族可选的连接函数:

分布族连接函数
binomiallogit、probit、cauchit、log、cloglog
poissonlog、identity、sqrt
gaussian1/mu^2、inverse、identity、log
inverse.gaussian1/mu^2、inverse、identity、log
Gammainverse、identity、log

3 GLM与LM比较的两个例子

由于线性模型要求因变量服从正态分布,而正态分布也属于指数族分布,因此线性模型也属于广义线性模型。以下通过两个例子比较lmglm函数使用的异同。

例1 模型表达式:y ~ x

若y服从正态分布,则为线性模型(此处暂不考虑线性模型的其他假设),可以使用lm函数对模型进行估计:

model.11 <- lm(hp ~ wt, data)
coef(summary(model.11))

##              Estimate Std. Error     t value     Pr(>|t|)
## (Intercept) -1.820922   32.32462 -0.05633236 9.554506e-01
## wt          46.160050    9.62530  4.79569988 4.145827e-05

glm函数在family参数为默认值时,实际上就是在运行线性模型:

model.12 <- glm(hp ~ wt, data = data)
coef(summary(model.12))

##              Estimate Std. Error     t value     Pr(>|t|)
## (Intercept) -1.820922   32.32462 -0.05633236 9.554506e-01
## wt          46.160050    9.62530  4.79569988 4.145827e-05
  • 可以看出,model.12model.11的输出结果完全一致;

  • 由于dataglm函数的第三个参数,因此上述模型的data = data不能简写为data

当y不服从正态分布,如泊松分布时,即使模型表达式形如线性模型,也仍然不是线性模型:

model.13 <- glm(hp ~ wt, family = poisson(link = "identity"), data)
coef(summary(model.13))

##              Estimate Std. Error   z value      Pr(>|z|)
## (Intercept) -8.024698   6.603967 -1.215133  2.243154e-01
## wt          48.088336   2.169059 22.170136 6.670846e-109
  • 可以看出,模型输出结果与前两个模型存在细微差别;

  • 由于泊松分布族的默认连接函数为log,因此为了保持表达式为y ~ x,需要手动指定连接函数。

例2 模型表达式:log(y) ~ x

在线性回归系列中已经介绍此类表达式也可以用线性模型进行估计,其假设为log(y)服从正态分布:

model.21 <- lm(log(hp) ~ wt, data)
coef(summary(model.21))

##              Estimate Std. Error   t value     Pr(>|t|)
## (Intercept) 3.7633626 0.20794635 18.097757 1.083203e-17
## wt          0.3476751 0.06192018  5.614892 4.108319e-06

如果认为其为连接函数为log的广义线性模型,则需要根据分布形式确定family参数并指定连接函数为log

model.22 <- glm(hp ~ wt, family = gaussian(link = "log"),
                data = data)
coef(summary(model.22))

##              Estimate Std. Error   t value     Pr(>|t|)
## (Intercept) 4.1327761 0.23273917 17.757114 1.827254e-17
## wt          0.2576024 0.05977168  4.309773 1.619811e-04
  • 可以看出,尽管选择的分布形式都是正态分布,但model.22model.21的结果并不一致,这是因为lm函数视log(y)整体为因变量,而glm函数视y为因变量。

使用glm函数实现线性模型结果的方法如下:

model.23 <- glm(log(hp) ~ wt, data = data)
coef(summary(model.23))

##              Estimate Std. Error   t value     Pr(>|t|)
## (Intercept) 3.7633626 0.20794635 18.097757 1.083203e-17
## wt          0.3476751 0.06192018  5.614892 4.108319e-06

总结:由于广义线性模型是使用最大似然方法进行模型估计的,该方法依赖于因变量的分布形式,因此一旦分布形式不一致,即使模型表达式一样其估计结果也会存在差异。


往期推荐阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值