Программное обеспечение для рисования байесовских сетей (графические модели)

50

Я ищу [бесплатное] программное обеспечение, которое может создавать красивые графические модели, например

введите описание изображения здесь

Мы ценим любые предложения.

C. Рид
источник
1
Ты имеешь в виду рисование таких картинок, которые ты связал, или рисование готовых моделей из другого программного обеспечения? Если последний, то из какого?
Рисование картинок понравилось тем, что я связал
C. Рид
2
Он был создан вручную в Inkscape , поэтому вы можете попробовать сделать то же самое.
10
Это потрясающе - предоставленная вами картина - это та, которую я нарисовал для Википедии в 2008 году, и я нашел этот вопрос, когда выяснял, как ее перерисовать в 2012 году. Вы предоставляете PNG, но изначально это был SVG . Тогда я использовал Inkscape, и это было ужасно - мне пришлось вручную редактировать SVG, чтобы добавить греческие буквы, потому что тогда он не мог справиться с этим (может быть, до сих пор не может). Я никому не рекомендую. Я собираюсь дать тикзу подход.
Bkkbrad
Когда я сказал, что никому не рекомендую, я имел в виду, что не рекомендую Inkscape тем, кто пытается нарисовать несколько последовательных диаграмм на пластинах.
Bkkbrad

Ответы:

34

В настоящее время у меня есть похожая проблема (рисование нескольких схем путей для моей диссертации), и поэтому я изучал многие из перечисленных здесь вариантов, чтобы нарисовать похожие диаграммы. Многие из перечисленных ресурсов для рисования такой векторной графики (например, в Microsoft Office или рисунках Google) могут создавать действительно хорошие диаграммы путей с минимальными усилиями. Но одна из причин, по которой я был недоволен такими программами, заключается в том, что мне нужно было создать много диаграмм, с небольшими изменениями между каждой диаграммой (например, добавить другой узел, изменить метку). Инструменты векторной графики «укажи и щелкни» не очень подходят для этого, и для внесения таких незначительных изменений требуется больше усилий, чем нужно. Также становится трудно поддерживать шаблон между многими чертежами. Итак, я решил изучить варианты производства такой графики программно.

Graphviz, как уже упоминалось в thias, был очень близок к тому, чтобы иметь все навороты, которые я хотел для своей графики (а также довольно простой код для их создания), но он не соответствовал моим потребностям двумя способами; 1) отсутствуют математические шрифты (например, я не уверен, что вы можете пометить узел символом в Graphviz, 2) изогнутые линии трудно рисовать (см. Этот пост по рисованию диаграмм путей с использованием Graphviz на сайте @ Stask) , Из-за этих ограничений в настоящее время (очень радостно) я остановился на использовании библиотеки рисования Tikz / pgf в Latex. Ниже приведен пример моей попытки воспроизвести вашу графику (самой большой болью были надписи в правом нижнем углу коробки!);β

введите описание изображения здесь

\documentclass[11pt]{report}
\usepackage{tikz}
\usetikzlibrary{fit,positioning}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\tikzstyle{main}=[circle, minimum size = 10mm, thick, draw =black!80, node distance = 16mm]
\tikzstyle{connect}=[-latex, thick]
\tikzstyle{box}=[rectangle, draw=black!100]
  \node[main, fill = white!100] (alpha) [label=below:$\alpha$] { };
  \node[main] (theta) [right=of alpha,label=below:$\theta$] { };
  \node[main] (z) [right=of theta,label=below:z] {};
  \node[main] (beta) [above=of z,label=below:$\beta$] { };
  \node[main, fill = black!10] (w) [right=of z,label=below:w] { };
  \path (alpha) edge [connect] (theta)
        (theta) edge [connect] (z)
		(z) edge [connect] (w)
		(beta) edge [connect] (w);
  \node[rectangle, inner sep=0mm, fit= (z) (w),label=below right:N, xshift=13mm] {};
  \node[rectangle, inner sep=4.4mm,draw=black!100, fit= (z) (w)] {};
  \node[rectangle, inner sep=4.6mm, fit= (z) (w),label=below right:M, xshift=12.5mm] {};
  \node[rectangle, inner sep=9mm, draw=black!100, fit = (theta) (z) (w)] {};
\end{tikzpicture}
\end{figure}
\end{document}
%note - compiled with pdflatex

Сейчас я уже пишу свою диссертацию на латексном языке, поэтому, если вы просто хотите, чтобы изображение без необходимости компилировать весь латексный документ, это немного неудобно, но есть некоторые довольно незначительные обходные пути для более непосредственного создания изображения (см. Этот вопрос более на стеке потока). Есть множество других преимуществ использования Tikz для такого проекта, хотя


В настоящее время я не рассматривал некоторые библиотеки для рисования диаграмм в статистическом пакете R непосредственно из указанных моделей, но в будущем я могу рассмотреть их в большей степени. Есть несколько хороших примеров из библиотеки qgraph для доказательства концепции того, что можно сделать в R.

Andy W
источник
1
Для тех, кто интересуется рисованием диаграмм путей для SEM (или для некоторых идей о том, что может быть достигнуто в продуктах Microsoft Office), я бы посоветовал вам ознакомиться с ppt-файлом диаграмм путей Джереми Майл (внизу указанной веб-страницы).
Энди W
1
Отличный отклик, это что-то вроде кривой обучения, но, как и все, TeX, я думаю, что это окупится в долгосрочной перспективе. Спасибо!
С. Рид
30

Лора Дитц (Laura Dietz ) написала очень хорошую библиотеку для tikz, которая позволяет рисовать байесовские сети в латексе без необходимости непосредственного использования tikz.

Чтобы продемонстрировать этот пакет, см. Следующий пример для этого вопроса:

\documentclass[11pt]{report}
\usepackage{tikz}
\usetikzlibrary{bayesnet}
\begin{document}
\begin{figure}
  \centering
  \tikz{ %
    \node[latent] (alpha) {$\alpha$} ; %
    \node[latent, right=of alpha] (theta) {$\theta$} ; %
    \node[latent, right=of theta] (z) {z} ; %
    \node[latent, above=of z] (beta) {$\beta$} ; %
    \node[obs, right=of z] (w) {w} ; %
    \plate[inner sep=0.25cm, xshift=-0.12cm, yshift=0.12cm] {plate1} {(z) (w)} {N}; %
    \plate[inner sep=0.25cm, xshift=-0.12cm, yshift=0.12cm] {plate2} {(theta) (plate1)} {M}; %
    \edge {alpha} {theta} ; %
    \edge {theta} {z} ; %
    \edge {z,beta} {w} ; %
  }
\end{figure}
\end{document}
%note - compiled with pdflatex

введите описание изображения здесь

Хотя это не совсем то же самое, оно, безусловно, передает ту же информацию и может быть изменено для лучшего соответствия конкретным требованиям. Этот пакет генерирует очень приемлемые цифры без необходимости изучать полный пакет tikz.

zelanix
источник
1
Эта библиотека потрясающая! Значительно упрощает создание байесовских сетевых диаграмм! Спасибо, что поделился.
fccoelho
Я попробовал это программное обеспечение и aft-pgm, этот гораздо проще в использовании, чем другой. Спасибо автору за отличное программное обеспечение.
Доброй воли
12

Вы не можете победить http://daft-pgm.org/

Daft - это пакет Python, который использует matplotlib для визуализации точных вероятностных графических моделей для публикации в журнале или в Интернете. С помощью короткого скрипта Python и интуитивно понятного синтаксиса построения моделей вы можете проектировать направленные (байесовские сети, направленные ациклические графы) и неориентированные (марковские случайные поля) модели и сохранять их в любых форматах, которые поддерживает matplotlib (включая PDF, PNG, EPS и SVG). ).

Эмре
источник
Дафт это круто! это должен быть принятый ответ imho
dominik andreas
У Daft есть несколько недостатков: он не масштабирует узлы по размеру текста, не рассчитывает расположение сети и т. Д. Это было достаточно, чтобы меня отключить.
fccoelho
7

Вы можете попробовать GraphViz .

Это позволяет вам указать график в текстовом файле, и он будет нарисован автоматически (избегая перекрывающихся стрелок и т. Д.). Пойдите сюда (pdf) для минимального примера и руководства.

thias
источник
5

Inkscape, по сути, является бесплатной версией Adobe Illustrator и представляет собой очень мощную программу для работы с векторной графикой, например с изображением, которое вы опубликовали. Он также довольно хорошо работает с большинством статистических пакетов для окончательного редактирования / аннотаций / и т.д. в графики - R, SAS и т. д. могут выводить график в формате PDF или в другом векторном формате (например, .eps), а затем вы можете перенести его в Inkscape, чтобы связываться с цветами, символами, метками осей и т. д.

фомиты
источник
Я предпочитаю инструменты, которые обрабатывают стрелки как специальные объекты: когда я перемещаю переменные, я надеюсь, что стрелки будут следовать. Кажется, Inkscape не может этого сделать.
Цзыюан
4

Если у вас есть особый интерес к использованию LaTeX, программа LaTeXDraw имеет несколько полезных функций для создания блок-схем со встроенным латексным кодом.

Он импортирует / экспортирует код PSTricks и SVG, а также может экспортировать svg, pdf, eps, jpg, png и т. Д. Он работает в Linux, Mac OS X и Windows.

Дэвид Лебауэр
источник
3

Dia - бесплатная программа с открытым исходным кодом для рисования диаграмм. Я нахожу это полезным, и это не так уж сложно начать.

лощина
источник
1

Я нашел Diagrammix очень гибким пакетом, доступным для Mac OS X. Это хорошо округленный пакет векторной графики, который хорошо справляется с графическими моделями. Это довольно недорого и имеет несколько хороших дополнений, которые помогли улучшить формы и направления краев.

Firebug
источник
Предложение: вы могли бы показать, как воспроизвести графическую модель в вопросе, Diagrammixкак это делали некоторые ответы.
Firebug
-1

Вы можете попробовать Google Docs Draw . Похоже, он будет делать то, что вы хотите бесплатно, прямо в вашем браузере.

Ringold
источник
Я пробовал это, но (ИМХО) ему не хватает гибкости Inkscape.
Suncoolsu
-1

Вы можете перейти на PlantUML . Это открытый исходный код и довольно гибкий.

RockScience
источник
-1

У SCAVIS есть байесовская сеть. Попробуйте в гугле "scavis baysian network". Одна и та же программа может рисовать различные диаграммы с использованием синтаксиса Python (или Java).

Jim12
источник
-1

Вы можете использовать draw.io и использовать один или несколько их шаблонов для создания этих значков. Это поможет вам создать SVG или любой другой формат. и не требует от вас ничего устанавливать в вашей системе.

эмир
источник