R- Bnlearn如何计算连续数据的BIC



我正在使用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,这是指此处的。但是我不知道它如何推广到联合高斯(多元正常)情况。

绝对可能与近似可能性和罚款项有关,似乎包装过程计算每个节点的似然和惩罚,然后将它们汇总。

bnlearn::score(Network, X, type="loglik-g", debug=TRUE)

,但我想知道如何特别计算出数据。

我发现了解释Laplace Approximation的材料(请参阅第57页),但我无法将其关联。

有人可以帮助我?

BIC计算为

bic = -2* loglik nparams* log(nobs)

但是在bnlearn中,这是由-2重新缩放的(请参阅?score)给出

bic = loglik -0.5* nparams* log(nobs)

因此,对于您的示例,如果没有边缘,则使用边缘均值和错误计算可能性(或更一般而言,对于每个节点,参数的数量是通过求和1(截距) 1(残留错误)给出的参数 父母的数量),例如

library(bnlearn)
X = iris[, 1:3]
names(X) = c("A", "B", "C")
Network = empty.graph(names(X))
(ll = sum(sapply(X, function(i) dnorm(i, mean(i), sd(i), log=TRUE)))) 
#[1] -569.408
(penalty = 0.5* log(nrow(X))* 6)
#[1] 15.03191
ll - penalty
#[1] -584.4399

如果有边缘,则使用拟合值和残差误差来加紧log-likelione。对于网络:

Network = set.arc(Network, "A", "B")

我们需要节点A和c

的log-likelihienhienhienhionhoens成分
(llA = with(X, sum(dnorm(A, mean(A), sd(A), log=TRUE))))
#[1] -184.0414
(llC = with(X, sum(dnorm(C, mean(C), sd(C), log=TRUE))))
#[1] -297.5887

我们从线性回归中获得B的条件概率

m = lm(B ~ A, X)
(llB = with(X, sum(dnorm(B, fitted(m), stats::sigma(m), log=TRUE))))
#[1] -86.73894

给予

(ll = llA + llB + llC)
#[1] -568.3691
(penalty = 0.5* log(nrow(X))* 7)
#[1] 17.53722
ll - penalty
#[1] -585.9063 
#  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 -86.738936.
#    penalty is 2.505318 x 3 = 7.515953.
# ----------------------------------------------------------------
# * processing node C.
#    loglikelihood is -297.588727.
#    penalty is 2.505318 x 2 = 5.010635.
# [1] -585.9063

相关内容

  • 没有找到相关文章

最新更新