R中多项式logistic回归对数似然函数的计算
假设我有以下数据集R中多项式logistic回归对数似然函数的计算,r,logistic-regression,multinomial,log-likelihood,R,Logistic Regression,Multinomial,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 ) 如果我通
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
我想用这些估计参数计算多项式逻辑回归的对数似然值
非常感谢您的帮助。这应该行得通。对数似然是每个观测值的概率对数之和。在下面的代码中,
probs
是一个N x m的概率矩阵,用于m个类别的N个观测值。然后,我们可以从模型框架中获取y
,并将其转换为一个数字变量,该变量将指示类别编号。然后我们使用cbind(1:length(y),y)
对概率矩阵进行索引。这将生成一个nx2矩阵,该矩阵为每个行号(在第一列中)提供应保留的probs
矩阵的列号。因此,probs[cbind(1:length(y),y)]
创建了一个概率向量,每个观测值都采用其观测到的y值。我们可以记录它们,然后求和得到对数似然
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),#预测器1
x2=RPOI(100,2.5),#预测因子2
x3=rgeom(100,概率=0.48),#预测因子3
y=as.因子(样本(1:3100,替换=T))#分类反应
)
mod如果只需要LL而不需要做任何艰苦的工作,它将存储在value
元素中:nnet::multinom(y~,data=df)$value
。