2016-09-21 212 views
2

我运行了一个混合模型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的输出逻辑回归来计算对数似然值?

回答

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 
+0

谢谢你,克里斯!它像一个魅力:) – mkv8