Ошибка построения результатов алгоритма восхождения на холм из пакета bnlearn в R в виде графа дерева Рейнгольда-Тилфорда
Я новичок, но давно учусь на этом сайте. Это первый раз, когда ответ на мой вопрос не был реверс-инжиниринг с предыдущих постов, поэтому я надеюсь, что кто-то может помочь мне решить его.
Я пытаюсь построить результаты алгоритма поиска восхождения на холм (hc
от bnlearn
пакет в R) работать на корреляционной матрице в виде графа дерева Рейнгольда-Тилфорда.
Скажи, что я бегу:
hc.obj<-hc(corr.matrix)
hc.plot<-qgraph(hc.obj, directed = "TRUE", layout = "spring")
Я получаю компоновку направленных отношений Фрухтермана-Рейнгольда без проблем.
Но я не могу заставить работать дерево, независимо от того, как я форматирую информацию в 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 ответ
Похоже, что вы пытаетесь использовать функции построения графиков, чтобы сделать то, для чего они не предназначены.
hc.obj
является модельным объектом класса BN, тогда как qplot()
например поддерживает следующее:
... либо матрица весов, либо список ребер. Также может быть объектом класса "sem" (sem), "mod" (sem), "lavaan" (lavaan), "Principal" (psych), "loadings" (stats), "factanal" (stats), "graphNEL" (Rgraphviz), "pcAlgo" (pcalg), " огромный "(огромный)," выбрать "(огромный) или вывод" 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
Объекты класса.