问题描述
我正在尝试使用R中的 bnstruct 库来计算动态贝叶斯网络(DBN)。此处用于说明的数据是两个时间点上的七个变量。
Rep_1 <- c(0,13343.36,0.00,5.36,0.4,4.56)
Rep_2 <- c(0,10579.92,5.76,33.60,0.0,0.24)
Rep_3 <- c(0,11256.40,68.04,0.04,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 计算DBNdbn <- learn.dynamic.network(dataset,num.time.steps = 2)
这给出了错误
h(simpleError(msg,call))中的错误: 选择函数'as.matrix'的方法时评估参数'x'的错误:无效的间隔数
我尝试在应用BNDataset之前将表达式更改为数据框和矩阵,但无济于事。
谢谢!
解决方法
此处是打包开发人员。我无法重现该错误,而且我也从未见过。显然simpleError
是一个S3对象,而bnstruct使用S4。也许您加载了另一个包含名称冲突的方法的软件包?
但是,在MWE中,对于观察到单个值的变量,bnstruct学习将失败,例如var1_t1
或var2_t1
。如果您的数据集更大且值更多,则可能会没事,否则最简单的方法就是删除这些变量。