我是 R 的相对初学者,并试图弄清楚如何将 cpquery 函数用于 DAG 的所有边缘的 bnlearn 包。
首先,我创建了一个bn对象、一个bn网络和一个具有所有优势的表。
library(bnlearn)
data(learning.test)
baynet = hc(learning.test)
fit = bn.fit(baynet, learning.test)
sttbl = arc.strength(x = baynet, data = learning.test)
然后我尝试在sttbl数据集中创建一个新变量,这是 cpquery 函数的结果。
sttbl = sttbl %>% mutate(prob = NA) %>% arrange(strength)
sttbl[1,4] = cpquery(fit, `A` == 1, `D` == 1)
它看起来相当不错(尤其是在更大的数据上),但是当我试图以某种方式自动化这个过程时,我正在努力解决错误,例如:
采样错误(拟合 = 拟合,事件 = 事件,证据 = 证据,:证据的逻辑向量长度为 1 而不是 10000。
在完美的情况下,我需要创建一个函数来填充sttbl数据集的概率生成变量,而不管它的大小。我试图用for循环来做,但一次又一次地偶然发现上面的错误。不幸的是,我正在删除失败的尝试,但它们是这样的:
for (i in 1:nrow(sttbl)) {
j = sttbl[i,1]
k = sttbl[i,2]
sttbl[i,4]=cpquery(fit, fit$j %in% sttbl[i,1]==1, fit$k %in% sttbl[i,2]==1)
}
或这个:
for (i in 1:nrow(sttbl)) {
sttbl[i,4]=cpquery(fit, sttbl[i,1] == 1, sttbl[i,2] == 1)
}
现在我想我误解了 R 或 bnlearn 包中的一些东西。
您能否告诉我如何通过多个 cpqueries 填充列来实现此任务?这对我的研究有很大帮助!