Ошибка построения результатов алгоритма восхождения на холм из пакета 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 Объекты класса.

Другие вопросы по тегам