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