Nagarajan等人。本书( Bayesian Networks in R ,O' Reilly 2013,p.35)说当我获取R bnlearn包的标记数据集并要求使用grow-shrink实现来学习结构时写
library(bnlearn)
data(marks)
bn.gs = gs(marks)
然后我应该获得有向图:
model: [STAT][ANL|STAT][ALG|ANL:STAT][VECT|ALG] [MECH|VECT:ALG]
nodes: 5
arcs: 6
undirected arcs: 0
directed arcs: 6
而不是我得到一个无向图:
model: [undirected graph]
nodes: 5
arcs: 6
undirected arcs: 6
directed arcs: 0
即使我将选项undirected = FALSE添加到gs方法,我仍然得到相同的结果。 我究竟做错了什么?或者R实现中是否存在错误?我在我的Mac和Debian机器上都尝试过,结果是一样的......
答案 0 :(得分:6)
答案由作者在他们的网站上提供(我刚刚发现):http://www.bnlearn.com/book-useR/
“第35页:bnlearn 3.2及更高版本在设置弧形方向时更加挑剔;因此,bn.gs是一个无向图,必须使用cextend()扩展到DAG以结束示例。“
换句话说,用
替换最后一行代码bn.gs = cextend(gs(marks))
很可惜斯普林格没有为勘误提供标准服务,例如O'Reilly。本书的作者必须创建自己的网站,花了一些时间才找到它......
答案 1 :(得分:0)
这不是错误。方向测试的p值对于两个方向都是相同的,因此返回了无向边。也就是说,使用cextend()是我的工作,