本文介绍了如何在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为样本大小。

您的线性回归有三个参数--两个系数和方差,因此您可以将AICBIC计算为

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值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-22 18:29