我遇到了一个超出我理解范围的问题。我制作了一个简单的可重现示例供您测试。
基本上,我创建了一个贝叶斯网络,其中两个高度相关的变量链接在一起。人们会期望,如果其中一个很高,那么另一个也应该很高(因为它们是直接相关的)。
library(bnlearn)
Learning.set4 = cbind(c(1,2,1,8,9,9),c(2,0,1,10,10,10))
Learning.set4 = as.data.frame(Learning.set4)
colnames(Learning.set4) = c("Cause","Cons")
b.network = empty.graph(colnames(Learning.set4))
struct.mat = matrix(0,2,2)
colnames(struct.mat) = colnames(Learning.set4)
rownames(struct.mat) = colnames(struct.mat)
struct.mat[1,2] = 1
bnlearn::amat(b.network) = struct.mat
haha = bn.fit(b.network,Learning.set4)
# Here we get a mean that is close to 10
seems_logic_to_me=cpdist(haha, nodes="Cons",
evidence=list("Cause"=10), method="lw")
# Here I get a mean that is close to 5, so a high value
# of Cons wouldn't mean anything for Cause?
very_low_cause_values = cpdist(haha, nodes="Cause",
evidence=list("Cons"=10), method="lw")
有人可以在这里告诉我为什么它不适用于该lw
方法吗?(您可以尝试,ls
它似乎工作正常)。
lw
代表似然加权
更新:从维护者那里得到了解决方案。在末尾添加以下内容将打印预期的预测:
print (sum(very_low_cause_values[, 1] * attr(very_low_cause_values, "weights")) / sum(attr(very_low_cause_values, "weights")))