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