2016-07-06 8 views
1

Ich bin ein Poster zum ersten Mal, aber ein langjähriger Lerner von dieser Website. Dies ist das erste Mal, dass eine Antwort auf meine Frage nicht von früheren Posts reverse-engineer-fähig ist, also hoffe ich, dass jemand mir helfen kann, es zu lösen.Fehler beim Plotten der Ergebnisse eines Hill-Climbing-Algorithmus aus bnlearn-Paket in R als Reingold-Tilford-Baum-Diagramm

Ich versuche, die Ergebnisse eines Hill-Climbing-Suchalgorithmus (hc aus dem bnlearn-Paket in R) auf einer Korrelationsmatrix als ein Reingold-Tilford-Baum-Diagramm zu plotten.

sagen, dass ich laufen:

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

ich ein Fruchterman-Reingold Layout der gerichteten Beziehungen kein Problem.

Aber ich kann ein Baumlayout nicht funktionieren, egal wie ich die Informationen in hc.obj formatiere. Wenn Sie beispielsweise den obigen Code mit "layout = tree" ausführen, erhalte ich den Fehler: "Fehler in l [, 1]: falsche Anzahl von Dimensionen".

Hier ist ein reproduzierbares Beispiel:

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") 

Und wenn ich versuche, wie durch IGRAPH auszuführen:

layout_as_tree(hc.obj) 

ich die Fehlermeldung „Fehler bei layout_as_tree erhalten (hc.obj): Keine Grafikobjekt "

+1

Willkommen bei SO! Ein reproduzierbares Beispiel hilft uns dabei. http://stackoverflow.com/help/mcve –

+1

Oops sorry! Mit einem reproduzierbaren Beispiel aktualisiert. – Miri

Antwort

1

Es scheint, dass Sie versuchen, die Plotfunktionen zu verwenden, um etwas zu tun, für das sie nicht vorgesehen sind.

hc.obj ist ein Modell-Objekt der Klasse bn während qplot() beispielsweise nach den Ständern:

...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".

Sie können jedoch plot a bn object. Ein Weg ist, einfach plot() zu verwenden.

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

Ein anderer Weg ist graphviz.plot() zu verwenden.

bnlearn::graphviz.plot(hc.obj) 

enter image description here

Wenn Sie eine Suche oder Überprüfung tun the relevant CRAN task view Sie wahrscheinlich mehr Pakete finden können, die bn Klassenobjekte unterstützen.

+0

Danke, das ist ein guter Anfang - ich werde versuchen, ein alternatives Paket zu finden, das mich mit einem Baumlayout plotten lässt. Ein Artikel, der das enthielt, was ich zu reproduzieren versuchte, kam heute heraus: [link] (http://www.sciencedirect.com/science/article/pii/S0005796716301103), aber es gibt keine Details darüber, wie sie dahin gekommen sind . Ich dachte, es könnte helfen, die hc.plot-Ausgabe in eine Matrix von gegenwärtigen/abwesenden Gewichten (1s und 0s) zu transformieren, aber ich bekomme den gleichen Fehler. Es sieht so aus, als ob es etwas Spezifisches mit dem Baum-Layout zu tun hat, weil das Feder-Layout in qgraph mit dieser Art von Ausgabe gut zu funktionieren scheint. – Miri

+0

@Miri Ich kann das Papier, mit dem Sie verlinken, nicht sehen, da es $ 20 oder spezielle Zugriffsrechte erfordert, aber das zweite Diagramm ähnelt einem Dendrogramm. –

+1

Du hast vollkommen recht! Gerade lief mit dem Graphviz.plot Sie vorgeschlagen und es ist perfekt. Vielen Dank!! – Miri