【问题标题】:Error plotting the results of a hill-climbing algorithm from bnlearn package in R as a Reingold-Tilford tree graph将 R 中 bnlearn 包中的爬山算法的结果绘制为 Reingold-Tilford 树图时出错
【发布时间】:2016-07-06 09:27:20
【问题描述】:

我是第一次发帖,但我是这个网站的长期学习者。这是我的问题的答案第一次无法从以前的帖子中进行逆向工程,所以我希望有人可以帮助我解决它。

我正在尝试绘制爬山搜索算法(R 中 bnlearn 包中的 hc)在相关矩阵上作为 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) 中的错误:不是图形对象”

【问题讨论】:

  • 欢迎来到 SO!一个可重复的示例将帮助我们帮助您。 stackoverflow.com/help/mcve
  • 哎呀对不起!更新了一个可重现的例子。

标签: r network-analysis r-qgraph


【解决方案1】:

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

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

...权重矩阵或边缘列表。也可以是对象 类“sem”(sem),“mod”(sem),“lavaan”(lavaan),“principal” (psych), "loadings" (stats), "factanal" (stats), "graphNEL" (Rgraphviz)、"pcAlgo" (pcalg)、"huge" (huge)、"select" (huge) 或 glasso的输出”。

你可以,但是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)

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

bnlearn::graphviz.plot(hc.obj)

如果您搜索或查看the relevant CRAN task view,您可能会发现更多支持bn 类对象的包。

【讨论】:

  • 谢谢,这是一个好的开始——我会尝试找到一个替代包,让我用树形布局进行绘图。今天发表了一篇包含我要复制的内容的论文:link,但它没有详细说明他们是如何到达那里的。我认为将 hc.plot 输出转换为存在/不存在权重(1s 和 0s)的矩阵可能会有所帮助,但我得到了同样的错误。似乎它必须与树布局有关,因为 qgraph 中的弹簧布局似乎可以很好地处理这种输出。
  • @Miri 我看不到您要链接的论文,因为它需要 20 美元或特殊访问权限,但第二个图看起来接近树状图。
  • 你完全正确!刚刚使用您建议的 graphviz.plot 运行,它非常完美。非常感谢!!
  • @Miri 不客气!乐意效劳。顺便说一句,这里可能有更多选择cran.r-project.org/web/views/Bayesian.html 如果这有帮助,请将其标记为答案或投票:) 我为积分工作哈哈。
猜你喜欢
  • 1970-01-01
  • 2016-09-21
  • 2019-07-18
  • 2016-12-13
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
相关资源
最近更新 更多