1

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

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

4

1 回答 1

1

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

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

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

但是,您可以绘制一个bn对象。一种方法是简单地使用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)

在此处输入图像描述

如果您进行搜索或查看相关的 CRAN 任务视图,您可能会找到更多支持bn类对象的包。

于 2016-07-06T01:09:39.883 回答