bnlearn (3.9)
* fixed alpha threshold truncation bug in conditional independence tests
(thanks Janko Tackmann).
* massive cleanup of the C code handling conditional independence tests.
* fixed variance scaling bug for the mi-cg test (thanks Nicholas Mitsakakis).
* in the exact t-test for correlation and in Fisher's Z, assume independence
instead of returning an error when degrees of freedom are < 1.
* fixed segfault in cpdist(..., method = "lw") when the evidence has
probability zero.
* added loss functions based on MAP predictions in bn.cv().
* removed bn.moments() and bn.var(), they were basically unmaintained and had
numerical stability problems.
* added support for hold-out cross-validation in bn.cv().
* added plot() methods for comparing the results of different bn.cv() calls.
* permutation tests should return a p-value of 1 when one of the two
variables being tested is constant (thanks Maxime Gasse).
* improved handling of zero prior probabilities for arcs in the Castelo &
Siebes prior, so that hc() and tabu() do not get stuck (thanks Jim Metz).
* added an "effective" argument to compute the effective degrees of freedoms
of the network, estimated with the number of non-zero free parameters.
* fixed optional argument handling in rsmax2().
* fixed more corner cases related to singular models in
cpdist(..., method = "lw") and predict(..., method = "bayes-lw").
* fixed Pearson's X^2 test, zero cells may have dropped too often in
sparse contingency tables.
bnlearn (3.8.1)
* fixed CPT import in read.net().
* fixed penfit objects import from penalized (thanks John Noble).
* fixed memory allocation corner case in BDe.
bnlearn (3.8)
* reorder CPT dimensions as needed in custom.fit() (thanks Zheng Zhu).
* fixed two uninitialized-memory bugs found by valgrind, one in
predict() and one random.graph().
* fixed wrong check for cluster objects (thanks Vladimir Manewitsch).
* fixed the description of the alternative hypothesis for the
Jonckheere-Terpstra test.
* allow undirected cycles in whitelists for structure learning algorithms
and let the algorithm learn arc directions (thanks Vladimir Manewitsch).
* include sanitized whitelists (as opposed to those provided by the user)
in bn.fit objects.
* removed predict() methods for single-node objects, use the method for
bn.fit objects instead.
* various fixes in the monolithic C test functions.
* fixed indexing bug in compare() (thanks Vladimir Manewitsch).
* fixed false positives in cycle detection when adding edges to a graph
(thanks Vladimir Manewitsch).
* fixed prior handling in predict() for naive Bayes and TAN classifiers
(thanks Vinay Bhat).
* added configs() to construct configurations of discrete variables.
* added sigma() to extract standard errors from bn.fit objects.
bnlearn (3.7.1)
* small changes to make CRAN checks happy.
bnlearn (3.7)
* fixed the default setting for the number of particles in cpquery()
(thanks Nishanth Upadhyaya).
* reimplemented common test patterns in monolithic C functions to speed
up constraint-based algorithms.
* added support for conditional linear Gaussian (CLG) networks.
* fixed several recursion bugs in choose.direction().
* make read.{bif,dsc,net}() consistent with the `$<-` method for bn.fit
objects (thanks Felix Rios).
* support empty networks in read.{bif,dsc,net}().
* fixed bug in hc(), triggered when using both random restarts and the
maxp argument (thanks Irene Kaplow).
* correctly initialize the Castelo & Siebes prior (thanks Irene Kaplow).
* change the prior distribution for the training variable in classifiers
from the uniform prior to the fitted distribution in the
bn.fit.{naive,tan} object, for consistency with gRain and e1071 (thanks
Bojan Mihaljevic).
* note AIC and BIC scaling in the documentation (thanks Thomas Lefevre).
* note limitations of {white,black}lists in tree.bayes() (thanks Bojan
Mihaljevic).
* better input sanitization in custom.fit() and bn.fit<-().
* fixed .Call stack imbalance in random restarts (thanks James Jensen).
* note limitations of predict()ing from bn objects (thanks Florian Sieck).
bnlearn (3.6)
* support rectangular nodes in {graphviz,strength}.plot().
* fixed bug in hc(), random restarts occasionally introduced cycles in
the graph (thanks Boris Freydin).
* handle ordinal networks in as.grain(), treat variables as categorical
(thanks Yannis Haralambous).
* discretize() returns unordered factors for backward compatibility.
* added write.dot() to export network structures as DOT files.
* added mutual information and X^2 tests with adjusted degrees of freedom.
* default vstruct() and cpdag() to moral = FALSE (thanks Jean-Baptiste
Denis).
* implemented posterior predictions in predict() using likelihood weighting.
* prevent silent reuse of AIC penalization coefficient when computing BIC
and vice versa (thanks MarĂa Luisa Matey).
* added a "bn.cpdist" class and a "method" attribute to the random data
generated by cpdist().
* attach the weights to the return value of cpdist(..., method = "lw").
* changed the default number of simulations in cp{query, dist}().
* support interval and multiple-valued evidence for likelihood weighting
in cp{query,dist}().
* implemented dedup() to pre-process continuous data.
* fixed a scalability bug in blacklist sanitization (thanks Dong Yeon Cho).
* fixed permutation test support in relevant().
* reimplemented the conditional.test() backend completely in C for
speed, it is now called indep.test().
bnlearn (3.5)
* fixed (again) function name collisions with the graph packages
(thanks Carsten Krueger).
* fixed some variable indexing issues in likelihood weighting.
* removed bootstrap support from arc.strength(), use boot.strength()
instead.
* added set.edge() and drop.edge() to work with undirected arcs.
* boot.strength() now has a parallelized implementation.
* added support for non-uniform graph priors (Bayesian variable
selection, Castelo & Siebes).
* added a threshold for the maximum number of parents in hc() and tabu().
* changed the default value of "moral" from FALSE to TRUE in cpdag()
and vstructs() to ensure sensible results in model averaging.
* added more sanity checks in cp{query,dist}() expression parsing
(thanks Ofer Mendelevitch).
* added 'nodes' and 'by.sample' arguments to logLik() for bn.fit objects.
* support {naive,tree}.bayes() in bn.cv() (thanks Xin Zhou).
* fixed predict() for ordinal networks (thanks Vitalie Spinu).
* fixed zero variance handling in unconditional Jonckheere-Terpstra
tests due to empty rows/columns (thanks Vitalie Spinu).
* in bn.cv(), the default loss for classifiers is now classification
error.
* added a nodes<-() function to re-label nodes in bn and bn.fit object
(based on a proof of concept by Vitalie Spinu).
* replaced all calls to LENGTH() with length() in C code (thanks Brian
Ripley).
* default to an improper flat prior in predict() for classifiers for
consistency (thanks Xin Zhou).
* suggest the parallel package instead of snow (which still works fine).
bnlearn (3.4)
* move the test counter into bnlearn's namespace.
* include Tsamardinos' optimizations in mmpc(..., optimized = FALSE),
but not backtracking, to make it comparable with other learning
algorithms.
* check whether the residuals and the fitted values are present
before trying to plot a bn.fit{,.gnode} object.
* fixed two integer overflows in factors' levels and degrees of
freedom in large networks.
* added {compelled,reversible}.arcs().
* added the MSE and predictive correlation loss functions to bn.cv().
* use the unbiased estimate of residual variance to compute the
standard error in bn.fit(..., method = "mle") (thanks
Jean-Baptiste Denis).
* revised optimizations in constraint-based algorithms, removing
most false positives by sacrificing speed.
* fixed warning in cp{dist,query}().
* added support for ordered factors.
* implemented the Jonckheere-Terpstra test to support ordered
factors in constraint-based structure learning.
* added a plot() method for bn.strength objects containing
bootstrapped confidence estimates; it prints their ECDF and
the estimated significance threshold.
* fixed dimension reduction in cpdist().
* reimplemented Gaussian rbn() in C, it's now twice as fast.
* improve precision and robustness of (partial) correlations.
* remove the old network scripts for network that are now available
from www.bnlearn.com/bnrepository.
* implemented likelihood weighting in cp{dist,query}().
bnlearn (3.3)
* fixed cpdag() and cextend(), which returned an error about
the input graph being cyclic when it included the CPDAG of
a shielded collider (thanks Jean-Baptiste Denis).
* do not generate observations from redundant variables (those
not in the upper closure of event and evidence) in cpdag()
and cpquery().
* added Pena's relevant() nodes identification.
* make custom.fit() robust against floating point errors
(thanks Jean-Baptiste Denis).
* check v-structures do not introduce directed cycles in the
graph when applying them (thanks Jean-Baptiste Denis).
* fixed a buffer overflow in cextend() (thanks Jean-Baptiste
Denis).
* added a "strict" argument to cextend().
* removed Depends on the graph package, which is in Suggests
once more.
* prefer the parallel package to snow, if it is available.
* replace NaNs in bn.fit objects with uniform conditional
probabilities when calling as.grain(), with a warning
instead of an error.
* remove reserved characters from levels in write.{dsc,bif,net}().
* fix the Gaussian mutual information test (thanks Alex Lenkoski).
bnlearn (3.2)
* fixed outstanding typo affecting the sequential Monte Carlo
implementation of Pearson's X^2 (thanks Maxime Gasse).
* switch from Margaritis' set of rules to the more standard
Meek/Sprites set of rules, which are implemented in cpdag().
Now the networks returned by constraint-based algorithms are
guaranteed to be CPDAGs, which was not necessarily the case
until now.
* semiparametric tests now default to 100 permutations, not 5000.
* make a local copy of rcont2() to make bnlearn compatible with
both older and newer R versions.
bnlearn (3.1)
* fixed all.equal(), it did not work as expected on networks
that were identical save for the order of nodes or arcs.
* added a "moral" argument to cpdag() and vstructs() to make
those functions follow the different definitions of v-structure.
* added support for graphs with 1 and 2 nodes.
* fixed cpquery() handling of TRUE (this time for real).
* handle more corner cases in dsep().
* added a BIC method for bn and bn.fit objects.
* added the semiparametric tests from Tsamardinos & Borboudakis
(thanks Maxime Gasse).
* added posterior probabilities to the predictions for
{naive,tree}.bayes() models.
* fixed buffer overflow in rbn() for discrete data.
bnlearn (3.0)
* added dsep() to test d-separation.
* implemented Tree-Augmented Naive Bayes (TAN) in tree.bayes().
* implemented Semi-Interleaved HITON-PC in si.hiton.pc().
* improved parsing in read.{bif,dsc,net}().
* fixed an indexing error in Gaussian permutation tests.
* added a "textCol" highlight option to graphviz.plot().
* added {incoming,outgoing,incident}.arcs().
* fixed two hard-to hit bugs in TABU search (thanks Maxime Gasse).
* added custom.fit() for expert parameter specification.
* added support for Markov blanket preseeding in learn.mb().
* assume independence instead of returning an error when a
partial correlation test fails due to errors in the
computation of the pseudoinverse of the covariance matrix.
* fixed an incorrect optimization in the backward phase of mmpc().
* fixed a floating point rounding problem in the mutual
information tests (64bit OSes only, thanks Maxime Gasse).
* fixed cp{query,dist}() handling of TRUE (thanks Maxime Gasse).
* added learn.nbr() to complement learn.mb().
bnlearn (2.9)
* integrate with the graph package and provide import/export
functions for the graphNEL and graphAM classes.
* removed bn.var.test() and the "aict" test.
* fixed wrong ISS handling in the BDe score.
* fixed a buffer overflow in the BGe score.
* added subgraph(), tiers2blacklist(), and cextend().
* fixed bug in boot.strength(), which failed with a spurious
error when a PDAG was learned.
* support interval discretization as the initial step in
Hartemink's discretization.
* fixed blacklist handling in chow.liu().
* fixed choose.direction() and arc.strength(), both of them
require a .test.counter and should create it as needed.
* added as.bn() and as.bn.fit() for "grain" objects (from the
the gRain package) and as.grain() for "bn.fit" objects.
* fixed infinte loop in choose.direction().
* make choose.direction(..., criterion = "bootstrap") work again.
* added an 'every' argument to random.graph() for the 'ic-dag'
and 'melancon' algorithms.
* shortened the optional arguments for random.graph(...,
method = "hartemink") to "idisc" and "ibreaks".
bnlearn (2.8)
* switched "cpdag" to TRUE in {boot,custom}.strength().
* added a "weights" argument to custom.strength().
* implemented the modified BDe score handling mixtures of
experimental and observational data (mbde).
* reimplemented the BGe score for speed (about 20x faster).
* fixed a buffer overflow in predict() for discrete networks.
* fixed sanitization in predict() for bn.fit.{d,g}node objects.
* handle partially directed graphs in bn.cv() for log-likelihood
loss (both discrete and Gaussian).
bnlearn (2.7)
* make .onLoad() more robust, so that it passes "R CMD check"
even with a broken Graphviz installation.
* reduced memory usage in graphviz.plot(), now using arc lists
instead of adjacency matrices.
* added tie breaking in prediction.
* allow inter.iamb() to break infinite loops instead of returning
an error.
* fixed a buffer overflow in discrete Monte Carlo tests.
* added sequential Monte Carlo permutation tests.
* improved performance and error handling in Gaussian Monte
Carlo tests.
bnlearn (2.6)
* allow discrete data in Hartemink's discretization algorithm.
* implemented {read,write}.bif() to import/export BIF files.
* implemented {read,write}.dsc() to import/export DSC files.
* implemented {read,write}.net() to import/export NET files.
* completely reimplemented compare() to return useful metrics,
it was just a slower version of all.equal().
* implemented model averaging with significance thresholding
in averaged.network().
* use new significance thresholding in {boot,custom}.strength()
and arc.strength(criterion = "bootstrap").
* export predicted values in bn.cv() when using classification
error.
* fixed an integer overflow in mutual information tests.
bnlearn (2.5)
* reimplemented rbn.discrete() in C both for speed and to
get CPT indexing right this time.
* added bn.net() to complement bn.fit().
* changed the default value of the imaginary sample size to
10, which is a de facto standard in literature.
* implemented the ARACNE and Chow-Liu learning algorithms.
* improved robustness of correlation estimation.
* added a "cpdag" option to boot.strength().
* fixed bug in discretize().
* improved sanitization in graphviz.plot() and strength.plot().
* added Hamming distance.
bnlearn (2.4)
* reimplemented naive Bayes prediction in C for speed.
* added some debugging output to predict() methods.
* fixed printing of fitted Gaussian Bayesian networks.
* fixed stack imbalance in Gaussian Monte Carlo tests.
* implemented some discretization methods in discretize().
* added custom.strength() for arbitrary sets of networks.
* fixed strength.plot() threshold for significant arcs.
bnlearn (2.3)
* added cpdist() to generate observations from arbitrary
conditional probability distributions.
* added a simple naive.bayes() implementation for discrete
networks, complete with a predict() implementation using
maximum posterior probability.
* added the shrinkage test for the Gaussian mutual information.
* added ntests(), in.degree(), out.degree(), degree(),
whitelist() and blacklist().
* added support for the snow package in bn.boot(), bn.cv(),
cpquery() and cpdist().
* fixed integer overflow in the computation of the number of
parameters of discrete networks.
* fixed errors in the labels of Gaussian scores.
bnlearn (2.2)
* fixed a bug in moral(), which returned duplicated arcs when
shielded parents were present in the graph.
* implemented all.equal() for bn objects.
* added workaround for plotting empty graphs with graphviz.plot(),
which previously generated an error in Rgraphviz.
* added a CITATION file.
* added the narcs() function.
* print.bn()'s now supports small(er) line widths.
* added support for "bn.fit" objects in graphviz.plot().
* added support for changing the line type of arcs in
graphviz.plot().
* added the learn.mb() function to learn the Markov blanket of
a single variable.
* fixed calls to UseMethod(), which were not always working
correctly because of the changed parameter matching.
* fixed an off-by-one error in the prediction for discrete
root nodes.
bnlearn (2.1)
* optimized data frame subsetting and parents' configurations
construction in conditional.test() and score.delta().
* fixed and improved the performance of rbn().
* fixed wrong penalization coefficient for Gaussian AIC (was
computing a Gaussian BIC instead).
* added cpquery() to perform conditional probability queries
via Logic (Rejection) Sampling.
* added bn.cv() to perform k-fold cross-validation, with
expected log-likelihood and classification error as
loss functions.
* added predict(), logLik() and AIC() methods for bn.fit
objects.
* renamed bnboot() to bn.boot() for consistency with bn.cv()
and bn.fit().
bnlearn (2.0)
* added the shd() distance.
* renamed dag2ug() to skeleton(), which is more intuitive.
* added support for "bn.fit" objects in rbn().
* added vstructs() and moral().
* added the coronary data set.
* improved partial correlation resillience to floating point
errors when dealing with ill-behaved covariance matrices.
* miscellaneous (small) optimizations in both R and C code.
bnlearn (1.9)
* added support for "bn.fit" objects in nodes(), nbr(),
parents(), children(), root.nodes(), leaf.nodes(),
arcs(), directed.arcs(), undirected.arcs(), amat(),
nparams(), mb(), path(), directed(), acyclic(),
node.ordering().
* fixed bug in hybrid and score-based learning algorithms,
which did not handle blacklists correctly.
bnlearn (1.8)
* removed the fast mutual information test in favour of
the equivalent shrinkage test, which uses a more
systematic approach.
* fixed fast.iamb(), which should not have truncated
exact and Monte Carlo tests.
* added the HailFinder and Insurance data sets.
* updated the Grow-Shrink implementation according to
newer (and much clearer) literature from Margaritis.
* rewritten more of the configuration() function in C,
resulting in dramatic (2x to 3x) speedups for large
data sets.
* implemented tabu search.
* removed rshc() in favour of rsmax2(), a general two-stage
restricted maximization hybrid learning algorithm.
* reimplemented cpdag() in C, with an eye towards a
future integration with constraints-based algorithms.
* fixed a bug in coef() for discrete bn.fit objects.
* implemented Melancon's uniform probability random DAG
generation algorithm.
bnlearn (1.7)
* big clean-up of C code, with some small optimizations.
* fixed bug in the handling of upper triangular matrices
(UPTRI3 macro in C code).
* added the dag2ug() and pdag2dag() functions.
* fixed a bug in bn.fit(), now it really works even for
discrete data.
* added bn.moments(), bn.var() and bn.var.test() for
basic probabilistic modelling of network structures.
bnlearn (1.6)
* implemented the mmhc() algorithm and its generic
template rshc().
* rewritten both the optimized and the standard implementation
of hc() in C, they are way faster than before.
* various fixes to documentation and bibtex references.
* revised the functions implementing the second half
of the constraint-based algorithm.
* improved parameter sanitization in "amat<-"().
* fixed the functions that set arcs' direction in
constraint-based algorithms.
bnlearn (1.5)
* improved parameter sanitization in the "<-"()
functions and modelstring().
* added support for bootstrap inference with bnboot(),
boot.strength(), arc.strength(, criterion = "bootstrap")
and choose.direction(, criterion = "bootstrap").
* fixed a bug in acyclic() causing false negatives.
* added bn.fit() for estimating the parameters of a Bayesian
network conditional on its structure.
* mapped some S3 methods (print, fitted, fitted.values,
residuals, resid, coefs, coefficients) to objects of
class "bn.fit", "bn.fit.gnode" and "bn.fit.dnode".
* added some plots for the fitted models based on the
lattice package.
* implemented AIC and BIC for continuous data, and
removed the likelihood score.
* various optimizations to C code.
* throughout documentation update.
* fixed an infinite loop bug in inter.iamb().
bnlearn (1.4)
* exported the "B" parameter to specify the number of
permutations to be done in a permutation test.
* removed the "direction" parameter from constraint-based
learning algorithms, as it was non-standard,
misnamed and had various reported problems.
* removed the duplicate "dir" label for the BDe score.
* added support for Gaussian data to rbn() and nparams().
* added "modelstring<-"().
* revised references in documentation.
* added the alarm and marks data sets.
* moved the scripts to generate data from the networks
included as data sets to the "network.scripts"
directory.
bnlearn (1.3)
* added Monte Carlo permutation tests for mutual
information (for both discrete and Gaussian data),
Pearson's X^2, linear correlation and Fisher's Z.
* added strength.plot().
* reimplemented random.graph() in C for speed.
* clean up of C memory allocation functions.
bnlearn (1.2)
* added cache.partial.structure() to selectively
update nodes' cached information stored in
'bn' objects.
* fixed a bug in cache.structure().
* reimplemented is.acyclic() in C to fix a bug
causing false negatives.
* added the lizards data set.
bnlearn (1.1)
* implemented mmpc().
* slightly changed gaussian.test to be more learning-friendly.
* fixed bugs in empty.graph() and "arcs<-"().
* changed the default probability of arc inclusion for
the "ordered" method in random.graph() to get sparser
graphs.
* added graphviz.plot().
* implemented the possibility of not learning arc directions
in constraint-based algorithms.
* changed the default value of the strict parameter
from TRUE to FALSE.
* reimplemented cache.structure() in C to increase
random.graph() performance and scalability.
bnlearn (1.0)
* completely rewritten random.graph(); now it supports
different generation algorithms with custom tuning
parameters.
* moved to dynamic memory allocation in C routines.
* improved performance and error handling of rbn().
bnlearn (0.9)
* reimplemented all the functions that deal with cycles
and paths in C, which increased their speed manifold
and greatly improved their memory use.
* cycle detection and elimination snow parallelized in
gs(), iamb(), fast.iamb() and inter.iamb().
* renamed {root,leaf}nodes() to {root,leaf}.nodes().
* rewritten node ordering in C to improve performance
and avoid recursion.
* added ci.test(), which provides a fronted to all the
independence and conditional independence tests
implemented in the package.
* added mutual information (for Gaussian data) and
Pearson's X^2 tests (for discrete data).
* removed the Mantel-Haenszel test.
bnlearn (0.8)
* added support for random restarts in hc().
* added arc.strength(), with support for both conditional
independence tests and network scores.
* added the asia data set.
* lots of documentation updates.
* reimplemented functions related to undirected arcs in C
for speed.
* added more parameter sanitization.
bnlearn (0.7)
* optimized hc() via score caching, score equivalence,
and partial reimplementation in C.
* many utility functions' backends reimplemented in C
for speed.
* improved cycle and path detection.
* lots of documentation updates.
* added more parameter sanitization.
bnlearn (0.6)
* implemented hc().
* added support for the K2 score for discrete networks.
* ported Gaussian posterior density from the deal package.
* added the gaussian.test data set.
* added an AIC-based test for discrete data.
* lots of documentation updates.
* added more parameter sanitization.
bnlearn (0.5)
* added more utility functions, such as rootnodes(),
leafnodes(), acyclic(), empty.graph() and random.graph().
* reimplemented parents' configuration generation in C
for speed.
* lots of documentation updates.
* added lots of parameter sanitization in utils-sanitization.R.
bnlearn (0.4)
* added rbn(), with support for discrete data.
* added a score function, with support for likelihood,
log-likelihood, AIC, BIC, and posterior Dirichlet
density of discrete networks.
* ported modelstring(), a string representation of a network,
from package deal.
* added many utility functions, such as parents() and children()
and their counterparts "parents<-"() and "children<-"().
* lots of documentation updates.
bnlearn (0.3)
* added support for the snow package in gs(), iamb(), inter.iamb()
and fast.iamb().
* added the learning.test data set.
* reimplemented mutual information in C for speed.
* lots of documentation updates.
bnlearn (0.2)
* implemented iamb(), inter.iamb() and fast.iamb().
* added partial correlation and Fisher's Z conditional
independence tests for Gaussian data.
* first completely documented release.
bnlearn (0.1)
* initial release.
* preliminary implementation of gs() with mutual information
as conditional independence test.