We can also represent joint probability distributions using pgmpy's JointProbabilityDistribution
class. Let's say we want to represent the joint distribution over the outcomes of tossing two fair coins. So, in this case, the probability of all the possible outcomes would be 0.25, which is shown as follows:
In [16]: from pgmpy.factors import JointProbabilityDistribution as Joint In [17]: distribution = Joint(['coin1', 'coin2'], [2, 2], [0.25, 0.25, 0.25, 0.25])
Here, the first argument includes names of random variable. The second argument is a list of the number of states of each random variable. The third argument is a list of probability values, assuming that the first variable changes its states the slowest. So, the preceding distribution represents the following:
In [18]: print(distribution) ╒═════════╤═════════╤══════════════════╕ │ coin1 │ coin2 │ P(coin1,coin2) │ ╞═════════╪═════════╪══════════════════╡ │ coin1_0 │ coin2_0 │ 0.2500 │ ├─────────┼─────────┼──────────────────┤ │ coin1_0 │ coin2_1 │ 0.2500 │ ├─────────┼─────────┼──────────────────┤ │ coin1_1 │ coin2_0 │ 0.2500 │ ├─────────┼─────────┼──────────────────┤ │ coin1_1 │ coin2_1 │ 0.2500 │ ╘═════════╧═════════╧══════════════════╛
We can also conduct independence queries over these distributions in pgmpy:
In [19]: distribution.check_independence('coin1', 'coin2') Out[20]: True