There's a new feature in GeNIe that lets you marginalize a node into its child. It removes the node and instead adds the node's parents to the child's parents.
Also, Smile has a method int DSL_network::MarginalizeNode(int theParent, int theChild) that lets you marginalize a node into its child. However, there seem to be some differences (I haven't actually worked with the Smile function so if I'm mistaken please excuse me):
- GeNIe's marginalization works only if the node has only one child
- GeNIe deletes the node
- GeNIe merges the node's parents into the child's parents, which possibly increases the child's size; while Smile's docu sounds like the node's outcomes just get summed out in the child's CPT and the arc gets removed.
Are these points correct? If so, what would be a simple approach to do something like this in Smile? (Maybe I should download the GeNIe source and look it up, instead of asking this question here...)
My impression is that GeNIe's method of marginalizing nodes preserves the JPD of the model (except that the node in question is summed out) while Smile's method doesn't (because it removes dependencies among the surrounding nodes). Is this correct?
