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 只是每个观测值对其观测值的概率对数的总和。在下面的代码中,probs
是 N 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)
假设我有如下数据集
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 只是每个观测值对其观测值的概率对数的总和。在下面的代码中,probs
是 N 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)