2016-09-21 213 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