Я использую пакет bnlearn
в R
и хотел бы знать, как пакет вычисляет BIC-g (BIC в распределении по Гауссу).
Давайте создадим структуру, и я смогу найти показатель BIC следующим образом.
library(bnlearn)
X = iris[, 1:3]
names(X) = c("A", "B", "C")
Network = empty.graph(names(X))
bnlearn::score(Network, X, type="bic-g")
bnlearn
предоставляет мне более подробную информацию о том, как можно рассчитать этот балл,
bnlearn::score(Network, X, type="bic-g", debug=TRUE)
И это приводит к
----------------------------------------------------------------
* processing node A.
> loglikelihood is -184.041441.
> penalty is 2.505318 x 2 = 5.010635.
----------------------------------------------------------------
* processing node B.
> loglikelihood is -87.777815.
> penalty is 2.505318 x 2 = 5.010635.
----------------------------------------------------------------
* processing node C.
> loglikelihood is -297.588727.
> penalty is 2.505318 x 2 = 5.010635.
[1] -584.4399
Я знаю, как рассчитать BIC для дискретных данных в байесовских сетях, ссылаясь на здесь. Но я не знаю, как это можно обобщить на совместный гауссовский (многомерный нормальный) случай.
Определенно это может быть связано с аппроксимацией вероятности и срока штрафа, и кажется, что процессы пакета вычисляют вероятности и штрафы для каждого узла, а затем суммируют их.
bnlearn::score(Network, X, type="loglik-g", debug=TRUE)
Но я хотел бы знать, как я могу конкретно рассчитать вероятности и штрафы, учитывая данные.
Я нашел материал, объясняющий Laplace Approximation
(см. стр. 57), но я не мог связать это.
Кто-нибудь, чтобы помочь мне?
sum(sapply(X, function(i) dnorm(i, mean(i), sd(i), log=TRUE)))
, а штрафной срок с0.5*log(nrow(X)) * 6
, который равен 0,5 * log количество наблюдений * количество параметров - person user20650   schedule 28.02.2019