3

我运行了一个混合模型逻辑回归,使用称为GMMAT(函数:)的 R 包使用遗传关系矩阵调整我的模型glmmkin()

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

  • theta: 离散参数估计 [1] 和方差分量参数估计 [2]
  • coefficients:固定效应参数估计(包括截距)。
  • linear.predictors:线性预测变量。
  • fitted.values:在原始尺度上拟合平均值。
  • Y:长度等于最终工作向量的样本大小的向量。
  • P: 尺寸等于样本大小的投影矩阵。
  • residuals:原始尺度上的残差。不由分散参数重新调整。
  • cov:固定效应的协方差矩阵(包括截距)。
  • converged:收敛的逻辑指标。

我试图获得对数似然以计算解释的方差。我的第一直觉是拆开logLik.glm函数以便“手动”计算它,但我一直在尝试计算 AIC。我使用了这里的答案。

我使用逻辑回归进行了健全性检查,stats::glm()其中model1$aic4013.232 是 4013.232,但使用我找到的 Stack Overflow 答案,我得到了 30613.03。

我的问题是——有谁知道如何使用我上面在 R 中列出的输出手动计算逻辑回归的对数似然度?

4

1 回答 1

1

这里没有统计洞察力,只是我从查看中看到的解决方案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
于 2016-09-22T06:08:33.360 回答