2016-07-06 100 views
1

我是第一次发布海报,但是是来自本网站的长期学习者。这是我第一次回答我的问题并没有从以前的帖子反向工程,所以我希望有人能帮我解决它。从Rn的bnlearn包中作为Reingold-Tilford树形图绘制爬山算法的结果的错误

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

说我跑:

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

我得到的定向关系的Fruchterman-莱因戈尔德布局没有问题。

但无论如何格式化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

欢迎来到SO!一个可重复的例子将帮助我们帮助你。 http://stackoverflow.com/help/mcve –

+1

抱歉!更新了一个可重复的例子。 – Miri

回答

1

看来您正在尝试使用绘图功能来完成他们无意的操作。

hc.obj是类的模型对象,而国阵为qplot()例如支持以下功能:

...either a weights matrix or an edgelist. Can also be an object of class "sem" (sem), "mod" (sem), "lavaan" (lavaan), "principal" (psych), "loadings" (stats), "factanal" (stats), "graphNEL" (Rgraphviz), "pcAlgo" (pcalg), "huge" (huge), "select" (huge) or the output of 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) 

enter image description here

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

bnlearn::graphviz.plot(hc.obj) 

enter image description here

如果你做一个搜索或审查the relevant CRAN task view你也许可以找到支持bn类对象更多的包。

+0

感谢这是一个好的开始 - 我会尽量找到一个替代的软件包,让我可以用树形布局进行绘图。包括我想重现的内容的论文今天出来:[链接](http://www.sciencedirect.com/science/article/pii/S0005796716301103),但它没有提供他们如何到达那里的细节。我认为这可能有助于将hc.plot输出转换为当前/不存在权重(1s和0s)的矩阵,但我得到相同的错误。看起来它必须是特定于树形布局的东西,因为qgraph中的spring布局似乎可以很好地处理这种输出。 – Miri

+0

@Miri我看不到要链接的论文,因为它需要20美元或特殊访问权限,但第二个绘图看起来接近树状图。 –

+1

你是完全正确的!刚刚运行您建议的graphviz.plot,它是完美的。非常感谢!! – Miri