R 用logistic回归手工计算logLik

R 用logistic回归手工计算logLik,r,regression,glm,genetic,R,Regression,Glm,Genetic,我使用名为GMMAT(函数:glmmkin() 我的模型输出包括(取自用户手册): theta:离散参数估计[1]和方差分量参数估计[2] 系数:固定效应参数估计(包括截距) 线性。预测器:线性预测器 拟合值:原始刻度上的拟合平均值 Y:长度等于最终工作向量样本大小的向量 P:尺寸等于样本大小的投影矩阵 残差:原始刻度上的残差。不按色散参数重新缩放 cov:固定效应(包括截距)的协方差矩阵 聚合:聚合的逻辑指示器 我试图获得对数似然,以便计算方差。我的第一个本能反应是拆开logLik.glm

我使用名为
GMMAT
(函数:
glmmkin()

我的模型输出包括(取自用户手册):

  • theta
    :离散参数估计[1]和方差分量参数估计[2]
  • 系数
    :固定效应参数估计(包括截距)
  • 线性。预测器
    :线性预测器
  • 拟合值
    :原始刻度上的拟合平均值
  • Y
    :长度等于最终工作向量样本大小的向量
  • P
    :尺寸等于样本大小的投影矩阵
  • 残差
    :原始刻度上的残差。不按色散参数重新缩放
  • cov
    :固定效应(包括截距)的协方差矩阵
  • 聚合
    :聚合的逻辑指示器
我试图获得对数似然,以便计算方差。我的第一个本能反应是拆开
logLik.glm
函数,以便“手工”计算这个值,我在尝试计算AIC时陷入了困境。我使用的答案来自

我使用
stats::glm()
对逻辑回归进行了合理性检查,其中
model1$aic
为4013.232,但使用我找到的堆栈溢出答案,我得到了30613.03


我的问题是——有人知道如何使用我在R中列出的输出手工计算逻辑回归的对数似然吗

这里没有统计方面的见解,只是我从
glm.fit
中看到的解决方案。这仅在拟合模型时未指定权重的情况下有效(或者如果指定了权重,则需要在模型对象中包含这些权重)

get_logLik
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