Програмне забезпечення для малювання байєсівських мереж (графічні моделі)


50

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

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

Будь-які пропозиції будуть вдячні.


1
Ви маєте на увазі малювати подібні зображення, які ви пов’язали, або намалювати готові моделі з якогось іншого програмного забезпечення? Якщо остання, з чого?

Нанесення малюнків сподобалось тій, яку я пов’язав
C. Reed

2
Він був створений вручну в Inkscape , тому ви можете спробувати зробити те ж саме.

10
Це приголомшливо - малюнок, який ви надаєте, це те, що я намалював у Вікіпедії в 2008 році, і це питання я знайшов, коли розбирався, як його перемалювати в 2012 році. Ви надаєте PNG, але він спочатку був SVG . Тоді я використовував Inkscape, і це було жахливо - мені довелося відредагувати SVG, щоб додати грецькими літерами, тому що він не міг потім впоратися з цим (можливо, він все ще не може). Я не рекомендую його нікому. Я збираюся дати постріл на тикз.
Bkkbrad

Коли я сказав, що не рекомендую його нікому, я мав на увазі, що не рекомендую Inkscape тим, хто намагається скласти кілька послідовних діаграм таблиць.
Bkkbrad

Відповіді:


34

В даний час у мене є аналогічна проблема (малювання декількох діаграм шляху для моєї дисертації), і тому я вивчав багато варіантів, перерахованих тут, щоб намалювати подібні діаграми. Багато з перерахованих ресурсів для малювання такої векторної графіки (як, наприклад, в Microsoft Office або малюнках google) можуть створювати дійсно приємні діаграми шляху з досить мінімальними зусиллями. Але частина причини, по якій я був незадоволений подібними програмами, полягає в тому, що мені потрібно було створити багато діаграм із лише незначними змінами між кожною діаграмою (наприклад, додати ще один вузол, змінити мітку). Інструменти векторної графіки для точки та клацання для цього недостатньо підходять, і докладайте більше зусиль, ніж потрібно, щоб зробити такі незначні зміни. Також стає важко підтримувати шаблон між багатьма малюнками. Тож я вирішив вивчити варіанти програмної графіки для виробництва такої графіки.

Як вже було сказано в тіазі, Graphviz виявився дуже близьким до того, що я хотів отримати всі свої дзвіночки і графіки (а також досить простий код для їх створення), але він не вистачав для моїх потреб двома способами; 1) математичних шрифтів бракує (наприклад, я не впевнений, чи можна позначити вузол символом у Graphviz, 2) вигнуті лінії важко намалювати (див. Цю публікацію на малюванні діаграм шляху за допомогою Graphviz на веб-сайті @ Stask) . Через ці обмеження я зараз (дуже щасливо) вирішив використовувати бібліотеку малювання Tikz / pgf в Латексі . Нижче наведено приклад моєї спроби відтворити вашу графіку (найбільшим болем були ярлики в правому нижньому куті коробок!);β

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

\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

Тепер я вже пишу свою дисертацію з латексу, тому, якщо ви просто хочете, щоб зображення не було необхідним для складання цілого документу з латексу, це трохи незручно, але є деякі досить незначні шляхи для створення зображення більш безпосередньо (див. Це питання вище на stackoverflow). Однак існує маса інших переваг щодо використання Tikz для такого проекту

  • Докладна документація. Посібник з pgf тримає вашу руку, створюючи подібні діаграми. І як тільки ти змочиш ноги ...
  • Існує величезна бібліотека прикладів , яка демонструє, як створювати величезну різноманітність графіки.
  • І нарешті, сайт обміну стеками Tex - це гарне місце, щоб задати будь-які питання щодо Tikz. У них є кілька чарівників, які роблять досить привабливу графіку (ознайомтесь із їхнім блогом для деяких прикладів).

На даний момент я не розглядав деякі бібліотеки для малювання діаграм у статистичному пакеті R безпосередньо із зазначених моделей, але в майбутньому я можу розглянути їх у більшій мірі. Є кілька приємних прикладів з бібліотеки qgraph для підтвердження концепції того, що можна досягти в Р.


1
Для тих, хто зацікавлений у малюванні діаграм шляхів для SEM (або для отримання додаткових ідей щодо того, що можна досягти в продуктах Microsoft Office), я б запропонував вам перевірити ppt файл діаграм шляху Джеремі Майла (у нижній частині посилається на веб-сторінку).
Енді Ш

1
Чудова відповідь, це трохи крива навчання, але, як і будь-що TeX, я думаю, що це окупиться в довгостроковій перспективі. Дякую!
C. Рід

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.


1
Ця бібліотека дивовижна! Значно спрощує створення байєсівських діаграм мережі! Дякую, що поділились.
fccoelho

Я спробував це програмне забезпечення та aft-pgm, це набагато простіше у використанні, ніж інше. Дякую автору за чудове програмне забезпечення.
Добрий Буде

12

Ви не можете перемогти http://daft-pgm.org/

Daft - це пакет Python, який використовує matplotlib для надання ідеальних піксельних імовірнісних графічних моделей для публікації в журналі або в Інтернеті. За допомогою короткого сценарію Python та інтуїтивного синтаксису побудови моделі ви можете створювати спрямовані (байєсівські мережі, спрямовані ациклічні графіки) та непрямі (випадкові поля Маркова) та зберігати їх у будь-яких форматах, які підтримує matplotlib (включаючи PDF, PNG, EPS та SVG ).


Дафт приголомшливий! це має бути прийнята відповідь imho
dominik andreas

У Дафта є кілька недоліків: він не автоматично масштабує вузли, щоб підходити до тексту, не обчислює компонування мережі тощо. Мені потрібно було відключити мене.
fccoelho

7

Ви можете спробувати GraphViz .

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


5

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


Я віддаю перевагу інструментам, які розглядають стрілки як особливі об’єкти: коли я переміщую змінні навколо, я сподіваюся, що стрілки будуть слідувати. Здається, Inkscape цього не може зробити.
ziyuang

4

Якщо у вас є особливий інтерес до використання LaTeX, програма LaTeXDraw має деякі приємні функції для створення діаграм потоків із вбудованим кодом латексу.

Він імпортує / експортує код PSTricks та SVG, а також може експортувати svg, pdf, eps, jpg, png тощо. Він працює в Linux, Mac OS X та Windows.


3

Dia - безкоштовна програма з відкритим кодом для малювання діаграм. Я вважаю це корисним і розпочати його не так вже й складно.


1

Я виявив, що Diagrammix є дуже гнучким пакетом, доступним для Mac OS X. Це добре закруглений векторний графічний пакет і добре справляється з графічними моделями. Він досить недорогий і має кілька хороших доповнень, які допомогли покращити форми та напрямки країв.


Пропозиція: ви можете показати, як відтворити графічну модель у запитанні так, Diagrammixяк це було зроблено на деякі відповіді.
Firebug

-1

Ви можете спробувати Google Docs Draw . Схоже, це буде робити те, що ви хочете безкоштовно, прямо у вашому браузері.


Я спробував це, але (IMHO) йому не вистачає гнучкості Inkscape.
suncoolsu


-1

Ви також можете скористатися веб-програмою Lucidchart .

Раніше я використовував це для малювання графіків, і це безкоштовно.


-1

SCAVIS має байєсівську мережу. Спробуйте google "скавіс-базіанська мережа". Ця ж програма може малювати різні діаграми за допомогою синтаксису Python (або Java).


-1

ви можете використовувати draw.io і використовувати один або їх безліч шаблонів для створення цих значків. Це допомагає створювати SVG або будь-який інший формат. і не вимагає від вас нічого встановлювати у вашій системі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.