2016-07-06 7 views
1

Я - первый плакат, но давний ученик с этого сайта. Это первый случай, когда ответ на мой вопрос не был обратным инженером из предыдущих сообщений, поэтому я надеюсь, что кто-то сможет мне помочь в его решении.Ошибка при построении результатов алгоритма возвышения с помощью пакета bnlearn в R в виде дерева дерева Рейнгольда-Тилфорда

Я пытаюсь построить результаты поискового алгоритма поиска холма (hc из пакета bnlearn в R), запущенного на корреляционной матрице в виде дерева деревьев Рейнгольда-Тилфорда.

Say я бегу:

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): Не graph object "

+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

Спасибо, что это хороший старт - я попытаюсь найти альтернативный пакет, который позволит мне строить с помощью дерева. Сегодня была опубликована статья, в которой я пытаюсь воспроизвести: [link] (http://www.sciencedirect.com/science/article/pii/S0005796716301103), но она не дает подробностей о том, как они туда попали , Я думал, что это может помочь преобразовать вывод hc.plot в матрицу существующих/отсутствующих весов (1s и 0s), но я получаю ту же ошибку. Похоже, что это должно быть что-то конкретное, чтобы делать с макетом дерева, потому что макет весны в qgraph, похоже, отлично работает с таким типом вывода. – Miri

+0

@Miri Я не вижу документ, на который вы ссылаетесь, потому что ему нужны привилегии 20 долларов или специальных привилегий, но второй сюжет близок к дендрограмме. –

+1

Ты совершенно прав! Просто побежал с графиком. Вы предложили, и это прекрасно. Спасибо!! – Miri