Software per disegnare reti bayesiane (modelli grafici)


50

Sto cercando un software [gratuito] in grado di produrre modelli grafici dall'aspetto gradevole, ad es

inserisci qui la descrizione dell'immagine

Tutti i suggerimenti sarebbero apprezzati.


1
Intendi disegnare immagini come questa che hai collegato o disegnare modelli pronti da qualche altro software? Se quest'ultimo, da quale?

Disegnare le foto è piaciuto quello che ho collegato
C. Reed,

2
È stato creato manualmente in Inkscape , quindi puoi provare a fare lo stesso.

10
È fantastico: l'immagine che fornisci è quella che ho disegnato per Wikipedia nel 2008 e ho trovato questa domanda mentre stavo scoprendo come ridisegnarla nel 2012. Fornisci un PNG, ma in origine era un SVG . Allora, ho usato Inkscape ed è stato terribile - ho dovuto modificare a mano l'SVG per aggiungere le lettere greche, perché allora non poteva gestirlo (forse non è ancora possibile). Non lo consiglio a nessuno. Ho intenzione di dare un colpo all'approccio tikz.
Bkkbrad,

Quando ho detto che non lo consiglio a nessuno, intendevo dire che non consiglio Inkscape a chiunque cerchi di disegnare più diagrammi a piastre coerenti.
Bkkbrad,

Risposte:


34

Al momento ho un problema simile (disegno di diagrammi di percorsi multipli per la mia tesi), quindi stavo esaminando molte delle opzioni elencate qui già per disegnare diagrammi simili. Molte delle risorse elencate per disegnare tali grafici vettoriali (come in Microsoft Office o Google Draw) possono produrre diagrammi di percorso davvero piacevoli, con uno sforzo abbastanza minimo. Ma una parte del motivo per cui non ero soddisfatto di tali programmi è che dovevo produrre molti diagrammi, con solo lievi cambiamenti tra ogni diagramma (ad esempio aggiungere un altro nodo, cambiare un'etichetta). Gli strumenti di grafica vettoriale point and click non sono adatti a questo scopo e richiedono uno sforzo maggiore di quanto sia necessario per apportare modifiche minori. Inoltre diventa difficile mantenere un modello tra molti disegni. Così, ho deciso di esaminare le opzioni per produrre tale grafica programmaticamente.

Graphviz, come già accennato da thias, si avvicinò molto ad avere tutte le campane e i fischi che desideravo per la mia grafica (così come il codice abbastanza semplice per produrli), ma non soddisfaceva le mie esigenze in due modi; 1) mancano i caratteri matematici (ad esempio, non sono sicuro che si possa etichettare un nodo con il simbolo in Graphviz, 2) le linee curve sono difficili da disegnare (vedere questo post sul disegno di diagrammi di percorso usando Graphviz sul sito Web di @ Stask) . A causa di queste limitazioni, al momento ho deciso (molto felicemente) di usare la libreria di disegni Tikz / pgf in Latex. Un esempio è al di sotto del mio tentativo di riprodurre la tua grafica (il più grande dolore erano le etichette negli angoli in basso a destra delle scatole!);β

inserisci qui la descrizione dell'immagine

\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

Ora sto già scrivendo la mia tesi in Latex, quindi se vuoi solo l'immagine senza dover compilare un intero documento in Latex è leggermente scomodo, ma ci sono alcune soluzioni secondarie per produrre un'immagine più direttamente (vedi questa domanda sopra su StackOverflow). Ci sono molti altri vantaggi nell'usare Tikz per un tale progetto


Al momento non ho preso in considerazione alcune delle librerie per disegnare i diagrammi nel pacchetto statistico R direttamente dai modelli specificati, ma in futuro potrò considerarli in misura maggiore. Ci sono alcuni begli esempi della libreria qgraph per una prova del concetto di ciò che può essere realizzato in R.


1
Per coloro che sono interessati a disegnare diagrammi di percorso per SEM (o per qualche altra idea su ciò che può essere realizzato nei prodotti Microsoft Office), suggerirei di consultare il file ppt di diagrammi di percorso di Jeremy Mile (in fondo alla pagina web di riferimento).
Andy W,

1
Ottima risposta, è un po 'una curva di apprendimento, ma come qualsiasi cosa TeX, penso che pagherà nel lungo periodo. Grazie!
C. Reed,

30

Laura Dietz ha scritto una libreria molto bella per tikz che consente di disegnare reti bayesiane in lattice senza la necessità di utilizzare direttamente tikz.

Per dimostrare questo pacchetto, vedere il seguente esempio per questa domanda:

\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

inserisci qui la descrizione dell'immagine

Sebbene non sia esattamente lo stesso, trasmette certamente le stesse informazioni e potrebbe essere modificato per adattarsi meglio ai requisiti specifici. Questo pacchetto genera cifre molto accettabili senza la necessità di imparare l'intero pacchetto tikz.


1
Questa libreria è fantastica! Semplifica notevolmente la creazione di diagrammi di rete bayesiani! Grazie per la condivisione.
fccoelho,

Ho provato questo software e aft-pgm, questo è molto più facile da usare rispetto all'altro. Grazie all'autore per il software eccellente.
Buona volontà

12

Non puoi battere http://daft-pgm.org/

Daft è un pacchetto Python che utilizza matplotlib per il rendering di modelli grafici probabilistici perfetti per i pixel per la pubblicazione su un giornale o su Internet. Con un breve script Python e una sintassi intuitiva per la creazione di modelli è possibile progettare modelli diretti (reti bayesiane, grafici aciclici diretti) e non indirizzati (campi casuali di Markov) e salvarli in qualsiasi formato supportato da matplotlib (inclusi PDF, PNG, EPS e SVG ).


daft è fantastico! questa dovrebbe essere la risposta accettata imho
dominik andreas,

Daft ha alcuni inconvenienti: non scala automaticamente i nodi per adattarli al testo, non calcola il layout della rete, ecc. Questo è stato sufficiente per spegnermi.
fccoelho,

7

Potresti provare GraphViz .

Ciò consente di specificare il grafico in un file di testo e verrà disegnato automaticamente (evitando le frecce sovrapposte e così via). Vai qui (pdf) per un esempio minimo e un manuale.


5

Inkscape è essenzialmente una versione gratuita di Adobe Illustrator ed è un programma molto potente per realizzare grafica vettoriale, come l'immagine che hai pubblicato. Funziona anche piuttosto bene con la maggior parte dei pacchetti statistici per apportare modifiche finali / annotazioni / ecc. ai grafici: R, SAS, ecc. possono generare un grafico in formato PDF o altro formato vettoriale (come .eps), quindi è possibile portarlo su Inkscape per scherzare con colori, simboli, etichette degli assi ecc.


Preferisco gli strumenti che trattano le frecce come oggetti speciali: quando sposto le variabili, spero che le frecce seguano. Sembra che Inkscape non possa farlo.
ziyuang,

4

Se hai un interesse particolare nell'uso di LaTeX, il programma LaTeXDraw ha delle belle funzionalità per la creazione di diagrammi di flusso con codice in lattice incorporato.

Importa / esporta codice PSTricks e SVG e può anche esportare svg, pdf, eps, jpg, png, ecc. Funziona su Linux, Mac OS X e Windows.


3

Dia è un programma open source gratuito per disegnare diagrammi. Lo trovo utile e non è troppo difficile iniziare.


1

Ho trovato Diagrammix come un pacchetto molto flessibile, disponibile per Mac OS X. È un pacchetto di grafica vettoriale ben arrotondato e fa un buon lavoro su modelli grafici. È abbastanza economico e ha alcuni buoni componenti aggiuntivi che hanno contribuito a migliorare le forme e le direzioni dei bordi.


Un suggerimento: potresti mostrare come riprodurre il modello grafico nella domanda Diagrammixcome hanno fatto alcune risposte.
Firebug,



-1

Puoi anche usare la webapp di Lucidchart .

L'ho usato in passato per disegnare grafici ed è gratuito.


-1

SCAVIS ha una rete bayesiana. Prova a google "scavis baysian network". Lo stesso programma può disegnare diagrammi diversi usando la sintassi di Python (o Java).


-1

puoi usare draw.io e usare uno o i loro numerosi modelli per creare queste icone. Ti aiuta a creare SVG o qualsiasi altro formato. e non richiede l'installazione di alcunché sul tuo sistema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.