我是第一次发布海报,但是这个网站的长期学习者。这是我的问题第一次回答以前的帖子没有逆向工程,所以我希望有人可以帮我解决。
我试图在相关矩阵上绘制爬山搜索算法(来自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)中的错误:不是图形对象”
答案 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)
另一种方法是使用graphviz.plot()。
bnlearn::graphviz.plot(hc.obj)
如果您进行搜索或查看the relevant CRAN task view,您可能会找到更多支持bn
类对象的软件包。