从逻辑回归手动计算logLik
问题描述:
我运行了一个混合模型logistic回归,使用名为GMMAT
(函数:glmmkin()
)的R程序包调整我的模型与遗传关系矩阵。从逻辑回归手动计算logLik
从模型我的输出包括(来自用户的手动取):
-
theta
:分散参数估计[1]和方差分量参数估计[2] -
coefficients
:固定效应参数估计(包括截距)。 -
linear.predictors
:线性预测变量。 -
fitted.values
:在原始尺度上的拟合平均值。 -
Y
:长度等于最终工作矢量的样本大小的矢量。 -
P
:尺寸等于样本大小的投影矩阵。 -
residuals
:原始尺度上的残差。不由色散参数重新调整比例。 -
cov
:固定效应(包括截距)的协方差矩阵。 -
converged
:收敛的逻辑指标。
我试图获得对数似然以计算方差解释。我的第一本能是为了计算这个“手工”功能而拆分logLik.glm
函数,并且我试图计算AIC时被卡住了。我使用了here的答案。
我做了逻辑回归运行的逻辑回归stats::glm()
model1$aic
是4013.232,但使用堆栈溢出答案我发现,我获得30613.03。
我的问题是 - 是否有人知道如何通过手动使用我在上面列出的R的输出逻辑回归来计算对数似然值?
答
这里没有统计数据,只是从我看到的glm.fit
看到的解决方案。如果您在拟合模型没有指定权重(或者,如果你没有,你需要在模型中包含对象的权重)
get_logLik <- function(s_model, family = binomial(logit)) {
n <- length(s_model$y)
wt <- rep(1, n) # or s_model$prior_weights if field exists
deviance <- sum(family$dev.resids(s_model$y, s_model$fitted.values, wt))
mod_rank <- sum(!is.na(s_model$coefficients)) # or s_model$rank if field exists
aic <- family$aic(s_model$y, rep(1, n), s_model$fitted.values, wt, deviance) + 2 * mod_rank
log_lik <- mod_rank - aic/2
return(log_lik)
}
例如这只能...
model <- glm(vs ~ mpg, mtcars, family = binomial(logit))
logLik(model)
# 'log Lik.' -12.76667 (df=2)
sparse_model <- model[c("theta", "coefficients", "linear.predictors", "fitted.values", "y", "P", "residuals", "cov", "converged")]
get_logLik(sparse_model)
#[1] -12.76667
谢谢你,克里斯!它像一个魅力:) – mkv8