r - 如何从 lm_robust 对象中获取 AIC
问题描述
如何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()
由于在数据帧中运行函数时的播种差异,结果可能在您的计算机中显示不同。
推荐阅读
- jquery - Slick.js 垂直,中心模式,slidesToShow > 5 不起作用
- php - JMS 序列化器、反序列化和 xpath
- java - 成功验证用户身份后继续执行代码
- php - PHP:阻止在类外创建实例变量
- kubernetes - 使用 kubernetes 注释时出现问题
- php - 从 mysql 表中选择并打印 2 个单独的行
- javascript - 反应,无法从 onKeyPress 输入事件中获取 event.key
- c# - 有没有办法使用 DI 的 log4net 统一扩展来解决 ILog?
- java - 递归启用子节点xml groovy
- node.js - Node.js 中的同步 HTTP 请求