可以使用广义线性模型估计多项式模型吗?
Can multinomial models be estimated using Generalized Linear model?
在分类数据分析中,我们经常使用逻辑回归来估计二项式结果与一个或多个协变量之间的关系。
我知道这是一种广义线性模型 (GLM)。在 R 中,这是通过使用参数 family=binomial
的 glm
函数实现的。另一方面,分类数据分析是多项式模型。这些不是 GLM 吗?不能使用 glm
函数在 R 中估计它们吗?
(在此post for Multinomial Logistic Regression。作者使用了外部包mlogit
,似乎也过时了)
为什么 GLM 的 class 仅限于二分结果?是不是因为multi-class classification可以看成是multiple binary classification模型?
R 中的 GLM 是使用 Fisher 评分估计的。我想到了 multi-category logit 的两种方法:比例赔率模型和 log-linear 模型或多项式回归。
比例赔率模型是一种特殊类型的累积link模型,在MASS
包中实现。不是用Fisher scoring估计的,所以默认的glm.fit
work-horse是估计不了这样的模型的。然而,有趣的是,累积 link 模型 是 GLM,并且在 McCullogh 和 Nelder 的同名文本中进行了讨论。负二项式 GLM 也存在类似问题:它们是严格意义上的 link 函数和概率模型的 GLM,但需要专门的估计例程。至于 R 函数 glm
,不应将其视为每种 GLM 类型的详尽估计器。
nnet
实现了对数线性模型估计器。它符合他们使用 soft-max 熵的更复杂的神经网络估计器,这是一个等效的公式(理论可以证明这一点)。事实证明,如果您愿意的话,您 可以 在默认 R 中使用 glm
估计 log-linear 模型。关键在于看到逻辑回归和泊松回归之间的link。将计数模型的交互项(对数相对率的差异)识别为结果的逻辑模型中的一阶项(对数比值比),您可以通过 "conditioning" 估计相同的参数和相同的 SE multi-category 结果的 $K \times 2$ 意外事件 table 的边际。 A related SE question on that background is here
以下使用MASS包中的VA肺癌数据为例:
> summary(multinom(cell ~ factor(treat), data=VA))
# weights: 12 (6 variable)
initial value 189.922327
iter 10 value 182.240520
final value 182.240516
converged
Call:
multinom(formula = cell ~ factor(treat), data = VA)
Coefficients:
(Intercept) factor(treat)2
2 6.931413e-01 -0.7985009
3 -5.108233e-01 0.4054654
4 -9.538147e-06 -0.5108138
Std. Errors:
(Intercept) factor(treat)2
2 0.3162274 0.4533822
3 0.4216358 0.5322897
4 0.3651485 0.5163978
Residual Deviance: 364.481
AIC: 376.481
相比于:
> VA.tab <- table(VA[, c('cell', 'treat')])
> summary(glm(Freq ~ cell * treat, data=VA.tab, family=poisson))
Call:
glm(formula = Freq ~ cell * treat, family = poisson, data = VA.tab)
Deviance Residuals:
[1] 0 0 0 0 0 0 0 0
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 2.708e+00 2.582e-01 10.488 <2e-16 ***
cell2 6.931e-01 3.162e-01 2.192 0.0284 *
cell3 -5.108e-01 4.216e-01 -1.212 0.2257
cell4 -1.571e-15 3.651e-01 0.000 1.0000
treat2 2.877e-01 3.416e-01 0.842 0.3996
cell2:treat2 -7.985e-01 4.534e-01 -1.761 0.0782 .
cell3:treat2 4.055e-01 5.323e-01 0.762 0.4462
cell4:treat2 -5.108e-01 5.164e-01 -0.989 0.3226
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 1.5371e+01 on 7 degrees of freedom
Residual deviance: 4.4409e-15 on 0 degrees of freedom
AIC: 53.066
Number of Fisher Scoring iterations: 3
比较第一个模型与第二个模型中治疗的交互参数和主要水平。还比较拦截。 AIC 是不同的,因为对数线性模型是一个概率模型,甚至是 table 的边缘,它以模型中的其他参数为条件,但在预测和推理方面,这两种方法产生相同的结果。
简而言之,技巧问题! glm
处理 multi-category 逻辑回归,只是需要更深入地了解这些模型的构成。
在分类数据分析中,我们经常使用逻辑回归来估计二项式结果与一个或多个协变量之间的关系。
我知道这是一种广义线性模型 (GLM)。在 R 中,这是通过使用参数 family=binomial
的 glm
函数实现的。另一方面,分类数据分析是多项式模型。这些不是 GLM 吗?不能使用 glm
函数在 R 中估计它们吗?
(在此post for Multinomial Logistic Regression。作者使用了外部包mlogit
,似乎也过时了)
为什么 GLM 的 class 仅限于二分结果?是不是因为multi-class classification可以看成是multiple binary classification模型?
R 中的 GLM 是使用 Fisher 评分估计的。我想到了 multi-category logit 的两种方法:比例赔率模型和 log-linear 模型或多项式回归。
比例赔率模型是一种特殊类型的累积link模型,在MASS
包中实现。不是用Fisher scoring估计的,所以默认的glm.fit
work-horse是估计不了这样的模型的。然而,有趣的是,累积 link 模型 是 GLM,并且在 McCullogh 和 Nelder 的同名文本中进行了讨论。负二项式 GLM 也存在类似问题:它们是严格意义上的 link 函数和概率模型的 GLM,但需要专门的估计例程。至于 R 函数 glm
,不应将其视为每种 GLM 类型的详尽估计器。
nnet
实现了对数线性模型估计器。它符合他们使用 soft-max 熵的更复杂的神经网络估计器,这是一个等效的公式(理论可以证明这一点)。事实证明,如果您愿意的话,您 可以 在默认 R 中使用 glm
估计 log-linear 模型。关键在于看到逻辑回归和泊松回归之间的link。将计数模型的交互项(对数相对率的差异)识别为结果的逻辑模型中的一阶项(对数比值比),您可以通过 "conditioning" 估计相同的参数和相同的 SE multi-category 结果的 $K \times 2$ 意外事件 table 的边际。 A related SE question on that background is here
以下使用MASS包中的VA肺癌数据为例:
> summary(multinom(cell ~ factor(treat), data=VA))
# weights: 12 (6 variable)
initial value 189.922327
iter 10 value 182.240520
final value 182.240516
converged
Call:
multinom(formula = cell ~ factor(treat), data = VA)
Coefficients:
(Intercept) factor(treat)2
2 6.931413e-01 -0.7985009
3 -5.108233e-01 0.4054654
4 -9.538147e-06 -0.5108138
Std. Errors:
(Intercept) factor(treat)2
2 0.3162274 0.4533822
3 0.4216358 0.5322897
4 0.3651485 0.5163978
Residual Deviance: 364.481
AIC: 376.481
相比于:
> VA.tab <- table(VA[, c('cell', 'treat')])
> summary(glm(Freq ~ cell * treat, data=VA.tab, family=poisson))
Call:
glm(formula = Freq ~ cell * treat, family = poisson, data = VA.tab)
Deviance Residuals:
[1] 0 0 0 0 0 0 0 0
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 2.708e+00 2.582e-01 10.488 <2e-16 ***
cell2 6.931e-01 3.162e-01 2.192 0.0284 *
cell3 -5.108e-01 4.216e-01 -1.212 0.2257
cell4 -1.571e-15 3.651e-01 0.000 1.0000
treat2 2.877e-01 3.416e-01 0.842 0.3996
cell2:treat2 -7.985e-01 4.534e-01 -1.761 0.0782 .
cell3:treat2 4.055e-01 5.323e-01 0.762 0.4462
cell4:treat2 -5.108e-01 5.164e-01 -0.989 0.3226
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 1.5371e+01 on 7 degrees of freedom
Residual deviance: 4.4409e-15 on 0 degrees of freedom
AIC: 53.066
Number of Fisher Scoring iterations: 3
比较第一个模型与第二个模型中治疗的交互参数和主要水平。还比较拦截。 AIC 是不同的,因为对数线性模型是一个概率模型,甚至是 table 的边缘,它以模型中的其他参数为条件,但在预测和推理方面,这两种方法产生相同的结果。
简而言之,技巧问题! glm
处理 multi-category 逻辑回归,只是需要更深入地了解这些模型的构成。