Software para dibujar redes bayesianas (modelos gráficos)

50

Estoy buscando un software [gratuito] que pueda producir modelos gráficos atractivos, p. Ej.

ingrese la descripción de la imagen aquí

Cualquier sugerencia sera apreciada.

C. Reed
fuente
1
¿Te refieres a dibujar imágenes como estas que vinculó o dibujar modelos listos de algún otro software? Si este último, ¿de qué?
Dibujar imágenes me gustó la que vinculé
C. Reed
2
Fue creado manualmente en Inkscape , por lo que puede intentar hacer lo mismo.
10
Eso es increíble: la imagen que proporcionó es una que dibujé para Wikipedia en 2008, y encontré esta pregunta cuando estaba descubriendo cómo volver a dibujarla en 2012. Usted proporcionó un PNG, pero originalmente era un SVG . En aquel entonces, utilicé Inkscape y fue terrible: tuve que editar a mano el SVG para agregar las letras griegas, porque no podía manejarlo en ese momento (tal vez todavía no puede). No lo recomiendo a nadie. Voy a darle una oportunidad al enfoque tikz.
Bkkbrad
Cuando dije que no lo recomendaría a nadie, quise decir que no recomiendo Inkscape a nadie que intente dibujar múltiples diagramas de placa consistentes.
Bkkbrad

Respuestas:

34

Actualmente tengo un problema similar (dibujar múltiples diagramas de ruta para mi disertación), por lo que ya estaba examinando muchas de las opciones enumeradas aquí para dibujar diagramas similares. Muchos de los recursos enumerados para dibujar tales gráficos vectoriales (como en Microsoft Office o dibujos de Google) pueden producir diagramas de ruta realmente agradables, con un esfuerzo bastante mínimo. Pero, parte de la razón por la que no estaba satisfecho con dichos programas es que necesitaba producir muchos diagramas, con solo cambios bastante menores entre cada diagrama (por ejemplo, agregar otro nodo, cambiar una etiqueta). Las herramientas de gráficos vectoriales de apuntar y hacer clic no son adecuadas para esto, y requieren más esfuerzo del necesario para realizar cambios menores. También se hace difícil mantener una plantilla entre muchos dibujos. Entonces, decidí examinar las opciones para producir dichos gráficos programáticamente.

Graphviz, como ya fue mencionado por thias, estuvo muy cerca de tener todas las campanas y silbatos que quería para mis gráficos (así como también un código bastante simple para producirlos), pero se quedó corto para mis necesidades de dos maneras; 1) faltan fuentes matemáticas (por ejemplo, no estoy seguro de si puede etiquetar un nodo con el símbolo en Graphviz, 2) las líneas curvas son difíciles de dibujar (vea esta publicación sobre diagramas de trazado de dibujo usando Graphviz en el sitio web de @ Stask) . Debido a estas limitaciones, actualmente me he decidido (muy felizmente) a usar la biblioteca de dibujo Tikz / pgf en Latex. A continuación se muestra un ejemplo de mi intento de reproducir su gráfico (¡el mayor dolor fueron las etiquetas en las esquinas inferiores derechas de las cajas!);β

ingrese la descripción de la imagen aquí

\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

Ahora, ya estoy escribiendo mi disertación en Latex, por lo que si solo desea la imagen sin tener que compilar un documento completo de Latex, es un poco inconveniente, pero hay algunas soluciones bastante menores para producir una imagen más directamente (vea esta pregunta más adelante). en stackoverflow). Sin embargo, hay una gran cantidad de otros beneficios para usar Tikz para tal proyecto


En este momento no he considerado algunas de las bibliotecas para dibujar los diagramas en el paquete estadístico R directamente de los modelos especificados, pero en el futuro podría considerarlos en mayor medida. Hay algunos buenos ejemplos de la biblioteca qgraph para una prueba de concepto de lo que se puede lograr en R.

Andy W
fuente
1
Para aquellos interesados ​​en dibujar diagramas de ruta para SEM (o para algunas ideas más sobre lo que se puede lograr en los productos de Microsoft Office), les sugiero que revisen el archivo ppt de diagramas de ruta de Jeremy Mile (en la parte inferior de la página web referenciada).
Andy W
1
Gran respuesta, es un poco una curva de aprendizaje, pero como todo TeX, creo que valdrá la pena a largo plazo. ¡Gracias!
C. Reed
30

Laura Dietz ha escrito una biblioteca muy agradable para tikz que permite dibujar Bayesian Networks en látex sin necesidad de usar tikz directamente.

Para demostrar este paquete, consulte el siguiente ejemplo para esta pregunta:

\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

ingrese la descripción de la imagen aquí

Si bien no es exactamente lo mismo, ciertamente transmite la misma información y podría modificarse para ajustarse mejor a los requisitos específicos. Este paquete genera cifras muy aceptables sin necesidad de aprender el paquete completo de tikz.

zelanix
fuente
1
¡Esta biblioteca es asombrosa! ¡Simplifica enormemente la creación de diagramas de red bayesianos! Gracias por compartir.
fccoelho el
Probé este software y aft-pgm, este es mucho más fácil de usar que el otro. Gracias al autor por el excelente software.
Buena voluntad el
12

No puedes vencer a http://daft-pgm.org/

Daft es un paquete de Python que usa matplotlib para representar modelos gráficos probabilísticos con píxeles perfectos para su publicación en una revista o en Internet. Con un breve script de Python y una sintaxis intuitiva de construcción de modelos, puede diseñar modelos dirigidos (redes bayesianas, gráficos acíclicos dirigidos) y no dirigidos (campos aleatorios de Markov) y guardarlos en cualquier formato que sea compatible con matplotlib (incluidos PDF, PNG, EPS y SVG )

Emre
fuente
¡Daft es increíble! esta debe ser la respuesta aceptada en mi humilde opinión
Andreas Dominik
Daft tiene algunos inconvenientes: no escala automáticamente los nodos para que quepan en el texto, no calcula el diseño de la red, etc. Eso fue suficiente para apagarme.
fccoelho
7

Podrías probar GraphViz .

Esto le permite especificar el gráfico en un archivo de texto y se dibujará automáticamente (evitando la superposición de flechas, etc.). Vaya aquí (pdf) para ver un ejemplo mínimo y un manual.

thias
fuente
5

Inkscape es esencialmente una versión gratuita de Adobe Illustrator, y es un programa muy fuerte para hacer gráficos vectoriales, como la imagen que publicaste. También funciona bastante bien con la mayoría de los paquetes estadísticos para realizar ediciones finales / anotaciones / etc. a gráficos: R, SAS, etc. puede generar un gráfico como PDF u otro formato vectorial (como .eps), y luego puede llevarlo a Inkscape para jugar con colores, símbolos, etiquetas de eje, etc.

Fomite
fuente
Prefiero las herramientas que tratan las flechas como objetos especiales: cuando muevo las variables, espero que sigan las flechas. Parece que Inkscape no puede hacer esto.
ziyuang
4

Si tiene un interés particular en usar LaTeX, el programa LaTeXDraw tiene una buena funcionalidad para crear diagramas de flujo con código de látex incrustado.

Importa / exporta código PSTricks y SVG, y también puede exportar svg, pdf, eps, jpg, png, etc. Se ejecuta en Linux, Mac OS X y Windows.

David LeBauer
fuente
3

Dia es un programa gratuito de código abierto para dibujar diagramas. Lo encuentro útil y no es demasiado difícil comenzar.

Cañada
fuente
1

He encontrado que Diagrammix es un paquete muy flexible, disponible para Mac OS X. Es un paquete de gráficos vectoriales bien redondeado y hace un buen trabajo en los modelos gráficos. Es bastante económico y tiene algunos buenos complementos que han ayudado a mejorar las formas y direcciones de los bordes.

Firebug
fuente
Una sugerencia: podría mostrar cómo reproducir el modelo gráfico en la pregunta Diagrammixcomo lo hicieron algunas respuestas.
Firebug
-1

Puedes probar Google Docs Draw . Parece que hará lo que quieras de forma gratuita, directamente en tu navegador.

Ringold
fuente
Lo he intentado, pero (en mi humilde opinión) carece de la flexibilidad de Inkscape.
suncoolsu
-1

Puedes ir por PlantUML . Es de código abierto y bastante flexible.

RockScience
fuente
-1

También puedes usar el Lucidchart web .

Lo he usado en el pasado para dibujar gráficos y es gratis.

Paolo
fuente
-1

SCAVIS tiene una red bayesiana. Intente googlear "red scavis baysian". El mismo programa puede dibujar diferentes diagramas usando la sintaxis de Python (o Java).

Jim12
fuente
-1

puede usar draw.io y usar una o sus muchas plantillas para crear estos íconos. Le ayuda a crear SVG o cualquier otro formato. y no requiere que instales nada en tu sistema.

Amir
fuente