Я не могу понять, почему у меня возникают проблемы с вычислением байесовского информационного критерия правильно и надеялся, что кто-то может указать мне в правильном направлении.Расчет BIC вручную для объекта lm
Я делаю это, потому что я пытаюсь вычислить BIC вручную (для объектов plm
, которые, похоже, не связаны с ними). Я принял формулу из Wikipedia page, которая дает формулу для BIC в терминах Остаточной суммы квадратов, а не для Логарифма правдоподобия.
y<-rnorm(100)
x<-rnorm(100)
m.test<-lm(y ~ x)
n<-100
rss<-sum(m.test$residuals^2)
k<-3
bic.mine<-n*log(rss/n)+k*log(n) #formula from wikipedia
bic.stats<-BIC(m.test) #using stats package
abs(bic.mine-bic.stats) #mine is off!
Выполнение кода кучу раз, я понимаю, что разница между BIC я получить и BIC, полученные из пакета статистики является постоянным, так что мое подозрение в том, что я не хватает какой-то коэффициент масштабирования , Это правильно? Заранее спасибо.
Редактировать: Спасибо за все комментарии. Я попытался реализовать предложения и опубликовать ответ, но я все еще остаюсь постоянным. Пересмотренный код ниже.
y<-rnorm(100)
x<-rnorm(100)
m.test<-lm(y ~ x)
n<-100
res<-m.test$residuals
rss<-sum(res^2)
k<-3; df<-n-k; w<-rep(1,N) #params, dfs, weights
ll<-0.5 * (sum(log(w)) - n *
(log(2 * pi) + 1 - log(n) + log(sum(w * res^2))))
ll.stats<-logLik(m.test)
abs(ll.stats-ll)==0 #same, prob is not here
bic.mine<-n*log(rss/n)+k*log(n) #formula from wikipedia
bic.exact<- -2 * ll + log(n) * df #suggestions from comments
bic.stats<-BIC(m.test) #using stats package
abs(bic.mine-bic.stats) #mine was off
abs(bic.exact-bic.stats) #this is still off, though
Хех, мне это нравится вопрос :) Я думаю, что самый простой способ - посмотреть исходный код 'BIC'. С помощью 'методов (BIC)' вы можете видеть, что существует два метода. Я предполагаю, что 'BIC.default' вызывается, но если вы наберете' BIC.default', вы получите сообщение об ошибке. Используйте 'stats ::: BIC.default' вместо этого, чтобы увидеть исходный код. Здесь вы можете увидеть, как рассчитывается BIC и сравнивается с вашим собственным скриптом. Надеюсь, это поможет хотя бы немного. – Laterow
@Laterow в общем использовании 'getAnywhere (" BIC.default ")' в случае, если вы не знаете пакет – MichaelChirico
из '? BIC'" BIC определяется как 'AIC (object, ..., k = log (nobs (объект))) '"; как в AIC, приводится цитата из Сакамото, Ишигуро и Кигагавы _Akaike. Статистика статистических данных – MichaelChirico