【发布时间】:2025-12-30 09:00:16
【问题描述】:
我是 R 的相对初学者,并试图弄清楚如何将 cpquery 函数用于 DAG 的所有边缘的 bnlearn 包。
首先,我创建了一个 bn 对象、一个 bn 的 network 和一个具有所有优势的 table。
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 数据集的 prob 生成的变量,而不管它的大小。我试图用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 填充列来实现此任务?这对我的研究有很大帮助!
【问题讨论】:
-
您好,您能否展示一下您是如何尝试自动化的(因为您展示的代码有效)
-
@user20650 我完全确定我错了,所以我删除了所有尝试。虽然我记得 2 个例子并通过他们完成了问题。
-
感谢亚历克斯;我会发点东西。bnlearn推理工具很难循环使用。