我有两个使用lm创建的线性模型,我想与stargazer包中的表进行比较。在大多数情况下,我喜欢得到的结果。但是“赤池信息标准”并未显示。 The docs说我可以在"aic"参数中传递keep.stat包括在内。但是不存在。没有错误讯息。

stargazer(model1, model2, type="text", report="vc", header=FALSE,
          title="Linear Models Predicting Forest Land",
          keep.stat=c("aic", "rsq", "n"), omit.table.layout="n")

Linear Models Predicting Forest Land
==========================================
                      Dependent variable:
                      --------------------
                             forest
                         (1)        (2)
------------------------------------------
log.MS.MIL.XPND.GD.ZS  -11.948    -12.557

log.TX.VAL.AGRI.ZS.UN   2.310      2.299

log.NY.GDP.MKTP.CD                 0.505

Constant                40.857    28.365

------------------------------------------
Observations             183        183
R2                      0.142      0.146
==========================================

我看不出它为什么不能包含它的任何原因。在这些模型上调用全局AIC函数可以正常工作。
> AIC(model1)
[1] 1586.17
> AIC(model2)
[1] 1587.208

最佳答案

该问题由.AIC内部定义的stargazer:::.stargazer.wrap函数给出。
可以看到,此函数不会为lm模型计算AIC:

.AIC <- function(object.name) {
    model.name <- .get.model.name(object.name)
    if (model.name %in% c("coeftest")) {
        return(NA)
    }
    if (model.name %in% c("lmer", "lme", "nlme", "glmer",
        "nlmer", "ergm", "gls", "Gls", "lagsarlm", "errorsarlm",
        "", "Arima")) {
        return(as.vector(AIC(object.name)))
    }
    if (model.name %in% c("censReg")) {
        return(as.vector(AIC(object.name)[1]))
    }
    if (model.name %in% c("fGARCH")) {
        return(object.name@fit$ics["AIC"])
    }
    if (model.name %in% c("maBina")) {
        return(as.vector(object.name$w$aic))
    }
    if (model.name %in% c("arima")) {
        return(as.vector(object.name$aic))
    }
    else if (!is.null(.summary.object$aic)) {
        return(as.vector(.summary.object$aic))
    }
    else if (!is.null(object.name$AIC)) {
        return(as.vector(object.name$AIC))
    }
    return(NA)
}
.get.model.name中的.AIC函数调用.model.identify。如果模型的组件calllm(),则.model.identify返回ls:
if (object.name$call[1] == "lm()") {
   return("ls")
}

解决方案1 ​​:使用add.lines
set.seed(12345)
n <- 100
df <- data.frame(y=rnorm(n), x1=rnorm(n), x2=rnorm(n))

model1 <- lm(y ~ x1, data=df)
model2 <- lm(y ~ x2, data=df)

library(stargazer)
stargazer(model1, model2, type="text", report="vc", header=FALSE,
          title="Linear Models Predicting Forest Land",
          keep.stat=c("rsq", "n"), omit.table.layout="n",
          add.lines=list(c("AIC", round(AIC(model1),1), round(AIC(model2),1))))

输出为:
Linear Models Predicting Forest Land
=================================
             Dependent variable:
             --------------------
                      y
                (1)        (2)
---------------------------------
x1             0.115

x2                       -0.052

Constant       0.240      0.243

---------------------------------
AIC            309.4      310.3
Observations    100        100
R2             0.011      0.002
=================================

解决方案2 :将组件AIC添加到模型对象。
model1 <- lm(y ~ x1, data=df)
model2 <- lm(y ~ x2, data=df)

model1$AIC <- AIC(model1)
model2$AIC <- AIC(model2)

stargazer(model1, model2, type="text", report="vc", header=FALSE,
          title="Linear Models Predicting Forest Land",
          keep.stat=c("aic", "rsq", "n"), omit.table.layout="n")

和输出是
Linear Models Predicting Forest Land
======================================
                  Dependent variable:
                  --------------------
                           y
                     (1)        (2)
--------------------------------------
x1                  0.115

x2                            -0.052

Constant            0.240      0.243

--------------------------------------
Observations         100        100
R2                  0.011      0.002
Akaike Inf. Crit.  309.413    310.318
======================================

关于r - 在观星者中显示赤池标准,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47494761/

10-12 17:39