使用bnstruct计算动态贝叶斯网络

时间:2020-09-29 12:29:34

标签: r bayesian-networks

我正在尝试使用R中的 bnstruct 库来计算动态贝叶斯网络(DBN)。此处用于说明的数据是两个时间点上的七个变量。

Rep_1 <- c(0, 0, 13343.36, 13343.36, 0, 0, 0.00, 5.36, 0, 0.00, 0, 0.4, 0, 4.56)
Rep_2 <- c(0, 0, 10579.92, 10579.92, 0, 0, 5.76, 33.60, 0, 0.00, 0, 0.0, 0, 0.24)
Rep_3 <- c(0, 0, 11256.40, 11256.40, 0, 0, 68.04, 0.00, 0, 0.04, 0, 0.0, 0, 0.00)

expression <- rbind(Rep1, Rep2, Rep3)
colnames(expression) <- c("var1_t1", "var2_t1", "var3_t1", "var4_t1", "var5_t1", "var6_t1", "var7_t1", "var1_t2", "var2_t2", "var3_t2", "var4_t2", "var5_t2", "var6_t2", "var7_t2")

然后我从中创建了BNDataset

dataset <- BNDataset(data = expression,  discreteness = rep(F, ncol(expression)), 
                 variables = colnames(expression), node.sizes = rep(3, ncol(expression)))

最后使用来自bnstruct

learn.dynamic.network 计算DBN
dbn <- learn.dynamic.network(dataset, num.time.steps = 2)

这给出了错误

h(simpleError(msg,call))中的错误: 选择函数'as.matrix'的方法时评估参数'x'的错误:无效的间隔数

我尝试在应用BNDataset之前将表达式更改为数据框和矩阵,但无济于事。

谢谢!

1 个答案:

答案 0 :(得分:0)

此处是打包开发人员。我无法重现该错误,而且我也从未见过。显然simpleError是一个S3对象,而bnstruct使用S4。也许您加载了另一个包含名称冲突的方法的软件包?

但是,在MWE中,对于观察到单个值的变量,bnstruct学习将失败,例如var1_t1var2_t1。如果您的数据集更大且值更多,则可能会没事,否则最简单的方法就是删除这些变量。