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:

- the marginal probability for any variable in a Bayesian network.
- the expectations for univariate functions (for example, the expected value of a variable).
- configurations with maximum a posteriori probability.

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:

- The Bayes applet produced by Dawid Poole and his group.
- The user interface of the new Hugin system is written in Java.
- The Bayesian Net Simulator implemented by Yoichi Motomura.
- The discussion of Bayesian networks using Java applets by Joel Martin.

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.

- The Association for Uncertainty in AI has a homepage filled with interesting pointers. The association's interests are very broad but in fact most of what it does is related to Bayesian theory in one way or another.
- The excellent list of free systems for manipulation of Bayesian networks and the nice tutorial on Bayes nets by Kevin Murphy.
- Some old (and outdated), but possibly valuable information on software for belief networks and software for learning belief networks from data; and of course the IDEAL page. Also, the glossary of terms used in those pages. None of these pages is currently maintained.
- The Bayesian networks primer at AFIT AI laboratory.
- The ASA Bayesian page, with the worldwide list of Bayesians and lots of other interesting links.