如何从lm_robust对象获取AIC

mol*_*y48 5 regression r lm

如何AIClm_robust对象(包estimatr)获取?我lm_robust之所以使用,是因为我想使用健壮的估算器来计算SE。与该lm函数不同,AIC在运行摘要函数并且AIClm_robust对象上运行该函数会产生错误时未提供。以下是我尝试运行的模型的一个玩具示例。

library(estimatr)

fake_data<-data.frame(outcome=rnorm(100,3.65,1),
                      pred1=rnorm(100,15,7),
                      pred2=as.factor(sample(1:5, 100, replace = T)))

mod1<-lm_robust(outcome~pred1+pred2,data=fake_data)
AIC(mod1)
Run Code Online (Sandbox Code Playgroud)

错误消息如下所示:

> AIC(mod1)
Error in UseMethod("logLik") : 
  no applicable method for 'logLik' applied to an object of class "lm_robust"
Run Code Online (Sandbox Code Playgroud)

may*_*din 4

如果一定要这样做lm_robust,您可以选择自己计算,如下所示,

的公式AIC

AIC = 2*k + n [Ln( 2(pi) RSS/n ) + 1]

# n : Number of observation
# k : All variables including all distinct factors and constant
# RSS : Residual Sum of Square
Run Code Online (Sandbox Code Playgroud)

如果我们将其应用于R您的情况,

# Note that, I take k=7 since you have, 5 factors + 1 continuous and 1 constant

AIC_calculated <- 2*7 + 100* (log( 2*pi* (1-mod1$r.squared)*mod1$tss/100 ) + 1)


[1] 332.2865
Run Code Online (Sandbox Code Playgroud)

这与lmglm输出相同。

mod2<-lm(outcome~pred1+pred2,data=fake_data)

> AIC(mod2)
[1] 332.2865
Run Code Online (Sandbox Code Playgroud)

最后,当然,您可以将此计算放入一个函数中,只需lm_robust在其中提供模型即可随时调用,而无需为任何给定数据设置Nk参数,例如,

myAIC <- function(data) {

    2*(data$k+1) + data$N * (log(2*pi* (1-data$r.squared)*data$tss/data$N ) + 1)

}

> myAIC(mod1)
[1] 332.2865
Run Code Online (Sandbox Code Playgroud)

注意:由于sample()在数据框中运行该函数时的播种差异,结果可能会在您的计算机中显示不同。