Removing fast.iamb(): it is fast but very wrong

After looking into the performance of fast.iamb() with respect to the other IAMB structure learning algorithms (link), there seems to be little reason to use it. Thus, I have decided to remove it to keep the code size of bnlearn. Mostly, it will offset the implementation of Direct LiNGAM (link), which is surely more of interest in modern Bayesian network literature.

Firstly, fast.iamb() is faster than iamb() and inter.iamb(), but not by significantly.

plot of chunk unnamed-chunk-2

Secondly, fast.iamb() learns networks with higher SHD that those learned by iamb() and inter.iamb() more often than not.

plot of chunk unnamed-chunk-3

Overall, iamb() has smaller SHD 59.4% of the time, and inter.iamb() 65.8% of the time.

Similarly, iamb() has smaller SID 57% of the time, and inter.iamb() 61.4% of the time. In conclusion, fast.iamb() is not especially faster and it is less accurate than both iamb() and inter.iamb().

plot of chunk unnamed-chunk-5
Last updated on Sat Mar 28 13:54:21 2026 with bnlearn 5.2-20260320 and R version 4.5.2 (2025-10-31).