【发布时间】:2019-03-01 18:18:01
【问题描述】:
我在R 中使用bnlearn 包,我想知道该包如何计算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,参考here。但我不知道它如何推广到联合高斯(多元正态)情况。
肯定它可能与近似似然性和惩罚项有关,并且似乎包过程计算每个节点的似然性和惩罚,然后将它们相加。
bnlearn::score(Network, X, type="loglik-g", debug=TRUE)
但我想知道在给定数据的情况下如何具体计算可能性和惩罚。
我找到了解释 Laplace Approximation 的 material(请参阅第 57 页),但我无法将其联系起来。
有人帮帮我吗?
【问题讨论】:
-
loglik 用
sum(sapply(X, function(i) dnorm(i, mean(i), sd(i), log=TRUE)))计算,惩罚项用0.5*log(nrow(X)) * 6计算,即 0.5 * log 观察数 * 参数数