Logiciel pour dessiner des réseaux bayésiens (modèles graphiques)

50

Je recherche un logiciel [gratuit] capable de produire de beaux modèles graphiques, par exemple:

entrez la description de l'image ici

Toute suggestion serait appréciée.

C. Reed
la source
1
Vous voulez dire que vous dessinez des images comme celles-ci que vous avez liées ou dessinez des modèles prêts d’autres logiciels? Si ce dernier, de qui?
Dessiner des images a aimé celle que j'ai liée
C. Reed
2
Il a été créé manuellement dans Inkscape . Vous pouvez donc essayer de faire de même.
10
C'est génial - la photo que vous fournissez est celle que j'ai dessinée pour Wikipedia en 2008, et j'ai trouvé cette question lorsque je cherchais un moyen de la redessiner en 2012. Vous fournissez un fichier PNG, mais il s'agissait à l' origine d'un fichier SVG . À l’époque, j’utilisais Inkscape et c’était terrible - je devais éditer le SVG à la main pour y ajouter des lettres grecques, car il ne pouvait pas le gérer à l’époque (peut-être ne le peut-il toujours pas). Je ne le recommande à personne. Je vais donner une chance au tikz.
Bkkbrad
Quand j'ai dit que je ne le recommanderais à personne, je voulais dire que je ne recommandais pas Inkscape à quiconque essayait de dessiner plusieurs diagrammes de plaques cohérentes.
Bkkbrad

Réponses:

34

Je rencontre actuellement un problème similaire (dessiner plusieurs diagrammes de chemin pour ma thèse) et j’examinais déjà plusieurs des options énumérées ici pour dessiner des diagrammes similaires. Un grand nombre des ressources répertoriées pour dessiner de tels graphiques vectoriels (tels que Microsoft Office ou Google Dessins) peuvent produire de très jolis diagrammes de chemin, avec un effort assez minime. Cependant, une partie de la raison de mon insatisfaction avec de tels programmes est que je devais produire de nombreux diagrammes, avec seulement des modifications mineures entre chaque diagramme (par exemple, ajouter un autre nœud, changer une étiquette). Les outils graphiques vectoriels de type pointer-cliquer ne conviennent pas à cette tâche et demandent plus d'efforts que nécessaire pour apporter des modifications aussi mineures. En outre, il devient difficile de conserver un modèle entre plusieurs dessins. J'ai donc décidé d'examiner les options permettant de produire de tels graphiques par programmation.

Graphviz, comme cela a déjà été mentionné par thias, était proche de posséder toutes les options que je souhaitais pour mes graphiques (ainsi que du code assez simple pour les produire), mais il ne répondait pas à mes besoins de deux manières; 1) les polices mathématiques manquent (par exemple, je ne sais pas si vous pouvez étiqueter un nœud avec le symbole dans Graphviz, 2) les lignes courbes sont difficiles à dessiner (voir cet article sur les diagrammes de chemins de dessin utilisant Graphviz sur le site Web de @ Stask) . En raison de ces limitations, j’ai décidé (très heureusement) d’utiliser la bibliothèque de dessins Tikz / pgf dans Latex. Voici un exemple ci-dessous de ma tentative de reproduction de votre graphique (la plus grande douleur était les étiquettes dans les coins inférieurs droits des boîtes!);β

entrez la description de l'image ici

\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

Maintenant, j’écris déjà ma thèse en Latex, donc si vous voulez juste l’image sans avoir à compiler un document entier en Latex, c’est un peu gênant, mais il existe quelques solutions de contournement assez mineures pour produire une image plus directement (voir la question ci- dessus). sur stackoverflow). Il y a une foule d’autres avantages à utiliser Tikz pour un tel projet bien que

  • Documentation exhaustive. Le manuel de pgf vous tient la main en faisant des diagrammes similaires. Et une fois que vous aurez les pieds mouillés ...
  • Une vaste bibliothèque d'exemples est là pour montrer comment produire une grande variété de graphiques.
  • Enfin, le site d’échange Tex stack est un bon endroit pour poser des questions sur Tikz. Là-bas, ils ont des fantasmes à faire des graphismes assez fantaisistes (consultez leur blog pour des exemples).

Pour le moment, je n'ai pas pris en compte certaines des bibliothèques permettant d'extraire les diagrammes du progiciel statistique R directement à partir des modèles spécifiés, mais à l'avenir, je pourrais les prendre davantage en considération. La bibliothèque qgraph contient de jolis exemples de preuves de concept de ce qui peut être accompli dans R.

Andy W
la source
1
Pour ceux qui sont intéressés à dessiner des diagrammes de chemin pour SEM (ou quelques idées sur ce qui peut être accompli dans les produits Microsoft Office), je vous suggère de consulter le fichier ppt des diagrammes de chemin de Jeremy Mile (au bas de la page Web référencée).
Andy W
1
Très bonne réponse, c'est un peu une courbe d'apprentissage, mais comme toute chose, TeX, je pense que ça va porter ses fruits à long terme. Merci!
C. Reed
30

Laura Dietz a écrit une très belle bibliothèque pour tikz qui permet de dessiner des réseaux bayésiens en latex sans avoir à utiliser tikz directement.

Pour illustrer ce package, consultez l'exemple suivant pour cette question:

\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

entrez la description de l'image ici

Bien que pas exactement identique, il transmet certainement les mêmes informations et pourrait être modifié pour mieux répondre aux exigences spécifiques. Ce paquet génère des chiffres très acceptables sans avoir besoin de connaître le paquet tikz complet.

zelanix
la source
1
Cette bibliothèque est géniale! Simplifie grandement la création de diagrammes de réseau bayésiens! Merci d'avoir partagé.
fccoelho
J'ai essayé ce logiciel et après-PGM, celui-ci est beaucoup plus facile à utiliser que l'autre. Merci l'auteur pour l'excellent logiciel.
Bonne volonté le
12

Vous ne pouvez pas battre http://daft-pgm.org/

Daft est un paquet Python qui utilise matplotlib pour restituer des modèles graphiques probabilistes parfaits au pixel destinés à être publiés dans un journal ou sur Internet. Avec un court script Python et une syntaxe de construction de modèle intuitive, vous pouvez concevoir des modèles dirigés (réseaux Bayesian, graphes acycliques dirigés) et non dirigés (champs aléatoires de Markov) et les enregistrer dans tous les formats pris en charge par matplotlib (notamment PDF, PNG, EPS et SVG). ).

Emre
la source
Daft est génial! cela devrait être la réponse acceptée imho
dominik andreas
Daft présente quelques inconvénients: il ne met pas automatiquement les nœuds à l'échelle pour s'adapter au texte, ne calcule pas la disposition du réseau, etc. Cela suffisait pour me désactiver.
fccoelho
7

Vous pouvez essayer GraphViz .

Cela vous permet de spécifier le graphique dans un fichier texte et celui-ci sera dessiné automatiquement (en évitant le chevauchement des flèches, etc.). Allez ici (pdf) pour un exemple minimal et un manuel.

thias
la source
5

Inkscape est essentiellement une version gratuite d'Adobe Illustrator et constitue un programme très puissant pour la création de graphiques vectoriels, comme la photo que vous avez publiée. Il joue également assez bien avec la plupart des progiciels statistiques pour effectuer les modifications / annotations finales / etc. Graphiques - R, SAS, etc. peuvent générer un graphique au format PDF ou tout autre format vectoriel (comme le format .eps). Vous pouvez ensuite le transférer dans Inkscape pour y manipuler des couleurs, des symboles, des étiquettes d'axe, etc.

Fomite
la source
Je préfère les outils qui traitent les flèches comme des objets spéciaux: lorsque je déplace les variables, j'espère que les flèches suivront. Il semble qu'Inkscape ne puisse pas faire cela.
Ziyuang
4

Si vous êtes particulièrement intéressé par l'utilisation de LaTeX, le programme LaTeXDraw dispose de fonctionnalités utiles pour créer des organigrammes avec du code latex intégré.

Il importe / exporte le code PSTricks et le SVG, et peut également exporter des fichiers svg, pdf, eps, jpg, png, etc. Il fonctionne sous Linux, Mac OS X et Windows.

David LeBauer
la source
3

Dia est un programme open source gratuit pour dessiner des diagrammes. Je trouve cela utile et ce n'est pas trop difficile de commencer.

Glen
la source
1

J'ai trouvé Diagrammix d'être un ensemble très flexible, disponible pour Mac OS X. Il est un paquet de graphiques vectoriels bien arrondi et fait un bon travail à des modèles graphiques. Il est relativement peu coûteux et comporte de bons ajouts qui ont permis d’améliorer les formes et les directions des bords.

Firebug
la source
Une suggestion: vous pourriez montrer comment reproduire le modèle graphique dans la question avec Diagrammixdes réponses similaires.
Firebug
-1

Vous pouvez essayer Google Docs Draw . On dirait que cela fera ce que vous voulez gratuitement, directement dans votre navigateur.

Ringold
la source
Je l'ai essayé, mais (à mon humble avis), il manque la flexibilité d'Inkscape.
suncoolsu
-1

Vous pouvez aller pour PlantUML . C'est open source et assez flexible.

RockScience
la source
-1

Vous pouvez également utiliser la webapp Lucidchart.

Je l'ai utilisé dans le passé pour dessiner des graphiques et c'est gratuit.

Paolo
la source
-1

SCAVIS dispose d'un réseau bayésien. Essayez de google "réseau baysian scavis". Le même programme peut dessiner différents diagrammes en utilisant la syntaxe Python (ou Java).

Jim12
la source
-1

vous pouvez utiliser draw.io et utiliser un ou plusieurs modèles pour créer ces icônes. Cela vous aide à créer des SVG ou tout autre format. et ne nécessite aucune installation de votre part.

Amir
la source