将R中的bnlearn包中的爬山算法结果绘制为Reingold-Tilford树图时出错

时间:2016-07-06 00:39:15

标签: r network-analysis r-qgraph

我是第一次发布海报,但是这个网站的长期学习者。这是我的问题第一次回答以前的帖子没有逆向工程,所以我希望有人可以帮我解决。

我试图在相关矩阵上绘制爬山搜索算法(来自R中hc包的bnlearn)的结果作为Reingold-Tilford树图。

说我跑:

    hc.obj<-hc(corr.matrix)
    hc.plot<-qgraph(hc.obj, directed = "TRUE", layout = "spring")

我得到了一个Fruchterman-Reingold定向关系的布局没问题。

但无论我如何格式化hc.obj中的信息,我都无法使树形布局工作。例如,使用“layout = tree”运行上面的代码我得到错误:“l [,1]中的错误:维度数不正确”。

这是一个可重复的例子:

    require("bnlearn")
    require("qgraph")
    cm <- matrix(runif(100), ncol=10)
    cm <- (cm * lower.tri(cm)) + t(cm * lower.tri(cm))
    diag(cm) <- 1 
    cm.df<-as.data.frame(cm)
    hc.obj<-hc(cm.df)
    hc.plot<-qgraph(hc.obj, directed = "TRUE", layout = "tree")

同样,如果我试图通过igraph作为:

    layout_as_tree(hc.obj)

我收到错误“layout_as_tree(hc.obj)中的错误:不是图形对象”

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试使用绘图功能来执行他们不打算做的事情。

hc.obj是类bn的模型对象,而qplot()例如支持以下内容:

  

...重量矩阵或边缘列表。也可以是一个对象   上课&#34; sem&#34; (sem),&#34; mod&#34; (sem),&#34; lavaan&#34; (lavaan),&#34;校长&#34;   (心理),&#34;负荷&#34; (统计数据),&#34; factanal&#34; (统计数据),&#34; graphNEL&#34;   (Rgraphviz),&#34; pcAlgo&#34; (pcalg),&#34;巨大的&#34; (巨大的),&#34;选择&#34; (巨大的)或   glasso&#34;的输出。

但你可以plot a bn object。一种方法是简单地使用plot()

if(!require(pacman)) install.packages("pacman")
pacman::p_load(qgraph,bnlearn,Rgraphviz)
cm <- matrix(runif(100), ncol=10)
cm <- (cm * lower.tri(cm)) + t(cm * lower.tri(cm))
diag(cm) <- 1 
cm.df<-as.data.frame(cm)
hc.obj<-hc(cm.df)
plot(hc.obj)

enter image description here

另一种方法是使用graphviz.plot()

bnlearn::graphviz.plot(hc.obj)

enter image description here

如果您进行搜索或查看the relevant CRAN task view,您可能会找到更多支持bn类对象的软件包。