Suppose P and C are discrete or discretized nodes within a net, and that P is a parent of C. Since there is a link going from P to C, the table for the two nodes is expressed as probabilities for the states of C, conditioned on the states of P (or a function providing C’s value in terms of P’s value if the node is deterministic). But sometimes you might want to know what the probabilities for the states of P are, conditioned on the states of C.
You can achieve that by doing a net transform known as link reversal, which reverses the link from P to C. When that link is reversed, the other links and the CPTs of C and P are adjusted in such a way that any probabilistic inference done after the reversal will yield exactly the same results as before the reversal. In other words, the full joint probability distribution of the net does not change when a link is reversed. The global relationship between the nodes remains the same; just the local expressions of it have been changed (as is the case with node absorption). Link reversal is the probabilistic generalization of function inversion , and is a good example of Bayes rule in action.
Adds Links: During the reversal, Netica may add links to C from the parents of P, and/or add links to P from the parents of C, which will increase the complexity of the net (all links added will be confined to P and its Markov boundary). When links are added, the size of CPTs may grow significantly, and sometimes enormously. The size of the tables is the product of the number of states of all the parents, so the size of each table can grow exponentially. When link reversals result in a node having many parents, the operation may be slow, or Netica may report that there is not enough memory available.
Removes Links: Occasionally, during a reversal, Netica may remove links to C from the parents of P, and/or remove links to P from the parents of C, resulting in a simpler net. For example, if reversing a link added other links, then reversing it again will remove them (assuming all the nodes have nondegenerate CPTs, and that there are no major rounding inaccuracies).
Simpler Net: Usually when a net is simpler due to the direction of its links, it provides a better model of the world. For example: it usually represents true causality more accurately, it may be better at generalizing, and of course it allows for faster computation. Sometimes link reversals can be used to search for more simple nets, given a net that was originally learned from data. In that case Netica might not always automatically remove links that should be removed, because although these links will be weak, they will not be completely ineffectual (perhaps because the probability tables learned are not “exact”). You would have to remove these weak links by hand.
How To: To reverse a link you select it and choose Modify → Reverse Links, or click the toolbar button. If a node is selected when you click the button, Netica will do all the link reversals necessary to make all links involving the node point to it. Alternately, you can right-click on a link, and choose Reverse from the menu. Right-clicking on an __unselected__ node gives the options Links → Reverse So All Incoming and Links → Reverse So All Outgoing, which will do all the reversals necessary to achieve the stated effect. If all links are made to point away from the node, then many extra links may have to be added between the ancestors of the node (not just its Markov boundary), and Netica may report that there is not enough memory available.
Several Links: If you have several links to reverse, you can select them all (e.g. by ctrl-clicking on them), and then click the button. The amount of time and memory required to reverse a set of links depends greatly on the order in which they are reversed. Unless you know a good order to do the reversals, you should reverse them all at once rather than one-by-one so that Netica can choose a good order to do them.
See also Disconnecting and Reconnecting Links