如何从AIC
对象(包lm_robust
)获得estimatr
?我正在使用lm_robust
,因为我想使用健壮的估算器来计算SE
。与lm
函数不同,在运行摘要函数并且在AIC
对象上运行AIC
函数会产生错误时,不会提供lm_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)
错误消息如下所示:
> AIC(mod1)
Error in UseMethod("logLik") :
no applicable method for 'logLik' applied to an object of class "lm_robust"
最佳答案
如果必须使用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
如果我们针对您的情况将其应用于
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
与
lm
和glm
输出相同。mod2<-lm(outcome~pred1+pred2,data=fake_data)
> AIC(mod2)
[1] 332.2865
最后,当然,您可以通过只在其中提供
lm_robust
模型,而不必为任何给定数据设置N
和k
参数,就可以将此计算放入函数中以随时调用。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
注意:由于在数据框中运行
sample()
函数时,由于播种的不同,结果在您的计算机上可能显示不同。