R中多项逻辑回归的对数似然函数的计算

Calculation of log likelihood function of multinomial logistic regression in R

假设我有如下数据集

df=data.frame(x1=rnorm(100), #predictor 1
              x2=rpois(100,2.5), #predictor 2
              x3=rgeom(100,prob = 0.48), #predictor 3
              y=as.factor(sample(1:3,100,replace = T)) #categorical response
              )

如果我运行以1为参考类别进行多项逻辑回归,那么估计的参数是

Call:
multinom(formula = y ~ ., data = df)

Coefficients:
  (Intercept)         x1          x2         x3
2 -0.71018723 -0.4193710  0.15820110 0.05849252
3 -0.05987773 -0.2978596 -0.08335957 0.10149408

我想使用这些估计参数计算多项逻辑回归的对数似然值。

感谢任何帮助。

这应该有效。 log-likelihood 只是每个观测值对其观测值的概率对数的总和。在下面的代码中,probsN x m 每个 N 观察值的概率矩阵 m 类别。然后我们可以从模型框架中获取 y 并将其转换为一个数字变量,该变量将指示类别编号。然后我们使用 cbind(1:length(y), y) 来索引概率矩阵。这使得 N x 2 矩阵为每个行号(在第一列中)给出您应该保留的 probs 矩阵的列号。因此,probs[cbind(1:length(y), y)] 创建了一个概率向量,每个观察值都采用其观察到的 y 值。我们可以记录它们,然后对它们求和以获得 log-likelihood.

df=data.frame(x1=rnorm(100), #predictor 1
              x2=rpois(100,2.5), #predictor 2
              x3=rgeom(100,prob = 0.48), #predictor 3
              y=as.factor(sample(1:3,100,replace = T)) #categorical response
)

mod <- nnet::multinom(formula = y ~ ., data = df)

probs <- predict(mod, type="probs")
y <- as.numeric(model.response(model.frame(mod)))
indiv_ll <- log(probs[cbind(1:length(y), y)])
sum(indiv_ll)
# [1] -106.8012
logLik(mod)
# 'log Lik.' -106.8012 (df=8)