Б.Н.Лирн: Как объединить оценочные параметры гауссовской байесовской сети с ее условной структурой? - PullRequest
2 голосов
/ 24 апреля 2019

Я определил структуру гауссовской байесовской сети, используя функцию iamb, а затем оценил коэффициенты узлов, используя bn.fit.


Библиотека

library(bnlearn)

Данные

{  C       E       G       N       V       W
48.83   51.48   42.64   54.1    42.96   41.96
48.85   73.43   40.97   60.07   65.29   48.96
67.01   71.1    52.52   51.64   63.22   62.03
37.83   49.33   56.15   49.01   47.75   38.77
55.3    49.27   63.55   54.62   60.57   56.66
56.12   48.72   66.02   43.95   55.54   52.39}

код

# Definition of mandatory and forbidden nodes - here the white list
wl = data.frame(from = c("E","G","V","W","N"), to = c("V", "V","W","C","C"))

# Definition of the constrained network
network <- iamb(Data, test = "cor", whitelist = wl)

# Estimation of the coefficients according to the structure of the network
est.para <- bn.fit(network, data = Data)

Проблема в том, что est.para - это список, а не ГБН, который может быть нанесен на график и т. Д. Я хотел бы знать, как объединить сеть и предполагаемые параметры?

1 Ответ

0 голосов
/ 26 июня 2019

Если вы хотите иметь некоторый сетевой график, который отображает некоторую дополнительную информацию помимо подключений, вы можете использовать strength.plot.Следуя вашему примеру:

library(Rgraphviz)

strength <- arc.strength(network, Data)
strength.plot(network, strength, shape = "ellipse")

В случае, если абсолютно необходимо использовать результаты параметров GBN est.para, вы можете использовать аргументы graphviz.plot для выделения ребер и узлов (можно сделатьиспользуя edgeRenderInfo и nodeRenderInfo).В качестве примера вы можете использовать параметры для выбора ширины ребер:

library(data.table) 

plot <- graphviz.plot(network, shape = "ellipse")

arc.sizes <- data.table(network$arcs)
arc.sizes[, edge.name := paste0(arc.sizes$from, "~", arc.sizes$to)]
arc.sizes[, param := abs(est.para[[to]]$coefficients[[from]]), by = .(from, to)]
arc.sizes[, lwd := 5*((param - min(param))/(max(param) - min(param)))]

lwd <- as.vector(arc.sizes$lwd)
names(lwd) <- arc.sizes$edge.name
edgeRenderInfo(plot) <- list(lwd = lwd)

renderGraph(plot)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...