R:从GLMNet获得AIC / BIC /可能性

时间:2016-12-01 20:46:29

标签: r statistics glmnet

我想知道我是否可以从GLMNet获得AIC和BIC。我发现glmnet.cr似乎能够做到,但我的反应是时间,而不是顺序。我可以从可能性中自己计算,但glmnet也没有返回。

切向:我真的可以返回l1norm吗?我觉得它应该只是

.nav > ul

但似乎并非如此。 (我知道它说不要把数字拉出去,但我实际上并没有使用R)

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我正在努力解决如何为glmnet模型计算AIC和BIC的方法。然而,经过相当多的搜索,我在google结果的第三页找到了答案。它可以找到here。我在这里张贴给未来的读者,因为我相信我不可能是唯一的。

最后,我通过以下方式实施了AIC和BIC:

fit <- glmnet(x, y, family = "multinomial") 

tLL <- fit$nulldev - deviance(fit)
k <- fit$df
n <- fit$nobs
AICc <- -tLL+2*k+2*k*(k+1)/(n-k-1)
AICc

BIC<-log(n)*k - tLL
BIC

答案 1 :(得分:0)

不幸的是,我无法使用此公式从“正常” glm模型(内置函数BIC可以作为正确参考)复制BIC

我更改了上面建议的代码,使其可以与glm对象一起工作:

    #BIC function for glm according to stackoverflow
    BICAICglm=function(fit){
      tLL <- fit$null.deviance - deviance(fit)
      k <- dim(model.matrix(fit))[2]
      n <- nobs(fit)
      AICc <- -tLL+2*k+2*k*(k+1)/(n-k-1)
      AICc

      BIC<-log(n)*k - tLL
      res=c(AICc, BIC)
      names(res)=c("AICc", "BIC")
      return(res)
    }

    #some data simulation to test
    set.seed(123)
    x=rnorm(20)
    set.seed(231)
    y=as.numeric(x+rnorm(20)<0)

    #the model
    glm1=glm(y~x, family="binomial")

现在,当我们使用标准BIC()函数时,我们将获得模型的“真实” BIC,然后可以将其与此处提出的函数进行比较。

    BIC(glm1)
    [1] 23.68755

和新的:

    BICAICglm(glm1)
    AICc       BIC 
    -4.518496 -3.232914 

所以用这种方法计算BIC和AICc的方法不太正确。

答案 2 :(得分:0)

基于@merten的答案,我修正了公式。现在,它与内置功能匹配。

摘要,

  1. 最初的对数似然(tLL)是偏倚。
  2. 添加了
  3. 内置函数中的AIC和AICc进行比较。
BICAICglm=function(fit){
  #tLL <- fit$null.deviance - deviance(fit)  
  tLL <- -deviance(fit) # 2*log-likelihood
  k <- dim(model.matrix(fit))[2]
  n <- nobs(fit)
  AICc <- -tLL+2*k+2*k*(k+1)/(n-k-1)
  AIC_ <- -tLL+2*k

  BIC<-log(n)*k - tLL
  res=c(AIC_, BIC, AICc)
  names(res)=c("AIC", "BIC", "AICc")
  return(res)
}
#some data simulation to test
set.seed(123)
x=rnorm(20)
set.seed(231)
y=as.numeric(x+rnorm(20)<0)

#the model
glm1=glm(y~x, family="binomial")

结果

BICAICglm(glm1)
     AIC      BIC     AICc 
21.91018 23.90165 22.61607

根据内置功能进行回答

AIC(glm1)
[1] 21.91018
BIC(glm1)
[1] 23.90165

AICc校正小样本量

AIC(glm1, k=2*nobs(glm1)/(nobs(glm1)-1-glm1$rank))
[1] 22.61607