我目前正在使用 R 中的 bnstruct 包创建 DBN。每 6 个时间步长有 9 个变量。我有生物和非生物变量。我想防止生物变量成为非生物变量的父母。对于贝叶斯网络,使用例如layering = c(1,1,2,2,2)
在learn.dynamic.network()
.
但是动态部分出现了一个问题:我想在每个时间步中继续防止生物变量成为非生物变量的父母,同时防止从 t+1 到 t 的任何变量之间出现边。
如果我使用layering =
:
- 1 用于 t1 的非生物变量
- 2 用于 t1 的生物变量
- 3 用于 t2 的非生物变量
- 4 用于 t2 的生物变量...
我允许来自 t-1 的生物变量来解释 t 处的非生物变量(我不希望这样)。
所以我尝试了:
## 9 variables for 6 time steps
test1 <- BNDataset(data = timedData,
discreteness = rep('d', 54),
variables = colnames(timedData),
node.sizes = rep(c(3,3,3,2,2,3,3,3,3), 6)
# num.time.steps = 6
)
## the 5 first variables are abiotic, the 4 last are biotics
dbn <- learn.dynamic.network(test1,
num.time.steps = 6,
layering = rep(c(1,1,1,1,1,2,2,2,2),6))
所以现在,我没有从生物到非生物的任何边缘(这很好),但我有从 variable_t(n+1) 到 variable_t(n) 的边缘。
我知道bnlearn
您可以创建一个您不想看到的边缘“黑名单”,但我在 bnstruct 中看不到任何等效参数。任何的想法?