2016-07-06 102 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