我正在使用nnet包中的函数multinom来运行多项逻辑回归。

据我所知,在多项逻辑回归中,系数是响应概率与引用响应概率之比的对数变化(即ln(P(i)/P(r))= B1 + B2 * X ...,其中i是一个响应类别,r是引用类别,X是某个预测变量)。

但是,fit(multinom(...))会为每个类别(甚至是引用类别r)生成估计。

编辑示例:

set.seed(1)
library(nnet)
DF <- data.frame(X = as.numeric(rnorm(30)),
                 Y = factor(sample(letters[1:5],30, replace=TRUE)))
DF$Y<-relevel(DF$Y, ref="a") #ensure a is the reference category
model <- multinom(Y ~ X, data = DF)
coef(model)
#  (Intercept)           X
#b   0.1756835  0.55915795
#c  -0.2513414 -0.31274745
#d   0.1389806 -0.12257963
#e  -0.4034968  0.06814379

head(fitted(model))
#          a         b          c         d         e
#1 0.2125982 0.2110692 0.18316042 0.2542913 0.1388810
#2 0.2101165 0.1041655 0.26694618 0.2926508 0.1261210
#3 0.2129182 0.2066711 0.18576567 0.2559369 0.1387081
#4 0.1733332 0.4431170 0.08798363 0.1685015 0.1270647
#5 0.2126573 0.2102819 0.18362323 0.2545859 0.1388516
#6 0.1935449 0.3475526 0.11970164 0.2032974 0.1359035

head(DF)
#           X Y
#1 -0.3271010 a

为了计算第1行的响应b和响应a之间的预测概率比,我们计算exp(0.1756835+0.55915795*(-0.3271010)) = 0.9928084。而且我看到这对应于第1行的拟合P(b)/P(a)(0.2110692/0.2125982 = 0.9928084)。

引用类别的拟合概率是否通过代数计算得出(例如0.2110692/exp(0.1756835+0.55915795*(-0.3271010)))?

有没有办法为引用类别的预测概率获取方程式?

最佳答案

我有同样的问题,环顾四周后,我认为解决方案是:
给定3个类别:a,b,c和该算法输出的拟合(模型)概率pa,pb,pc,您可以从以下3个等式重建这些概率:

log(pb/pa) = beta1*X

log(pc/pa) = beta2*X

pa+pb+pc=1

其中beta1,beta2是coef(model)输出的行,而X是您的输入数据。

运用这些方程式,您将获得:
pb = exp(beta1*X)/(1+exp(beta1*X)+exp(beta2*X))

pc = exp(beta2*X)/(1+exp(beta1*X)+exp(beta2*X))

pa = 1 - pb - pc

10-06 16:17