The JavaBayes system is a set of tools for the creation and manipulation of Bayesian networks. The system is composed of a graphical editor, a core inference engine and a set of parsers. (You can try them!) The graphical editor allows you to create and modify Bayesian networks in a friendly interface. The parsers allow you to import Bayesian networks in a variety of formats. The engine is responsible for manipulating the data structures that represent Bayesian networks. The engine can produce:
Typically, the user assigns values to some variables in a network and asks the posterior marginal probability or expectation of some other variables. The set of variables that have assigned values is called the evidence. Marginal probabilities and expectations can be calculated conditional on any number of observations inserted into the network.
Another typical situation is that the user specifies some evidence and asks which are the values of non-evidence variables that lead to the maximum possible posterior probability for the evidence. A configuration with such optimal characteristics has been called an explanation for the available evidence. When an optimal configuration is produced, the variables in the network are estimated in the sense that their ``best'' values are found, where ``best'' is measured in terms of posterior probability. It is possible to specify a group of variables in the network to be estimated, or to estimate all variables in the network at once.
JavaBayes can produce marginal distributions and expectations using two different algorithms: variable elimination and bucket tree elimination. In the first case, inferences are generated from scratch for each query; in the second case, a data-structure (bucket tree) is generated once and several queries can be generated directly from the bucket tree. Variable elimination consumes less memory, but it may take longer if several queries are made to the same network with the same collection of observations.
A capability of JavaBayes, which sets it apart from other inference engines, is the ability to conduct robustness analysis on top of inferences. Bayesian robustness analysis is an on-going research topic, where sets of distributions are associated to variables: the size of these sets indicates the "uncertainty" in the modeling process. JavaBayes can use models with sets of distributions to calculate intervals of posterior distributions or intervals of expectations. The larger these intervals, the less robust are the inferences with respect to the model.
JavaBayes is distributed under the GNU License; if you want to distribute JavaBayes to someone, you have to package the whole distribution including the GNU license. If you need to include the Bayesian network engine in some application, you must also make a request; the engine might be available to you under the Lesser General Public License.
The JavaBayes distribution is available in the Internet; the various Java packages that compose the system are provided in source and bytecode forms. The Java packages can be used in other applications or applets (provided that the GNU license is respected) as a tool for probabilistic reasoning. The complete system, with graphical interface, can be used to construct and experiment with Bayesian networks, as a teaching and/or development tool.
Note that JavaBayes is distributed as bytecodes that are executable in the standard Java Virtual Machine as specified by Sun Microsystems Inc. Modification of the source code and generation of bytecode from modified source code is allowed under the restrictions specified by the GPL (the GNU license), but compilation of the source files to generate other types of executables or non-standard bytecode is not covered by the license and is not allowed. This is emphasized so that JavaBayes is always distributed as a portable, architecture-neutral system; if you are interested in generating non-portable executables from JavaBayes, then you must contact me. Generation/commercialization of such executables requires a specific license which must be negotiated. Again, this is emphasized to avoid the confusion that would occur if several unauthorized types of compiled code were to be generated from the source.
This manual is an on-going effort to document the JavaBayes system. There are directions for dowloading the system from the Internet, a brief description of how to run the system, and a brief description of how to compile the system. From there, some examples are presented, followed by a step-by-step description of the system. This manual also discusses the several data formats that are understood and generated by the system, and finishes with several miscellaneous items. You can also find a description of the inference algorithm used by JavaBayes in the system's web site.
There are some other projects that use Java with Bayesian networks:
There is more literature on Bayesian theory than one can hope to read in a lifetime. For a more in-depth discussion, there are books on Bayesian theory for Statistics, Philosophy and AI [7,8,12]. I just collected some links that may be helpful to others; if you have a link that might be helpful let me know.