本文介绍了如何在R中获得与Stata中相同的AIC和BIC值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有一个非常简单的模型
library(foreign)
smoke <- read.dta("http://fmwww.bc.edu/ec-p/data/wooldridge/smoke.dta")
smoking.reg <- lm(cigs ~ educ, data=smoke)
AIC(smoking.reg)
BIC(smoking.reg)
在R中,我得到以下结果:
> AIC(smoking.reg)
[1] 6520.26
> BIC(smoking.reg)
[1] 6534.34
但在Stata中运行相同的回归
use http://fmwww.bc.edu/ec-p/data/wooldridge/smoke.dta
reg cigs educ
返回以下结果
estat ic
如何才能使R返回与AIC和BIC的Stata完全相同的值?
推荐答案
AIC计算为-2*log likelihood + 2* number of parameters
BIC按-2*log likelihood + log(n)* number of parameters
计算,其中n
为样本大小。
您的线性回归有三个参数--两个系数和方差,因此您可以将AIC
和BIC
计算为
ll = logLik(smoking.reg)
aic = -2*ll + 2* 3 # 6520.26
bic = -2*ll + log(nrow(smoke))* 3 # 6534.34
(正如Ben Bolker在评论中提到的,logLik
对象有几个属性,您可以使用这些属性来获取参数的数量("df"
)和观测的数量("nobs"
))。参见attr(ll, "df")
和attr(ll, "nobs")
)
STATA不包括方差参数,仅包括系数数。这通常不是问题,因为通常使用信息标准来比较模型(AIC_of_model1 - AIC_of_model2
),因此如果在两个计算中都省略了这个参数,则没有什么不同。在STATA中,计算为
aic = -2*ll + 2* 2 # 6518.26
bic = -2*ll + log(nrow(smoke))* 2 # 6527.647
这篇关于如何在R中获得与Stata中相同的AIC和BIC值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!