Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中多项式logistic回归对数似然函数的计算_R_Logistic Regression_Multinomial_Log Likelihood - Fatal编程技术网

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