Example Using the Earthquake network¶

In this example I will try to create the Alarm Bayesian Network using pgmpy and do some simple queries on the network. This network is mentioned in Bayesian Artificial Intelligence - Section 2.5.1 (https://bayesian-intelligence.com/publications/bai/book/BAI_Chapter2.pdf)

[1]:

# Importing Library
from pgmpy.models import BayesianNetwork
from pgmpy.inference import VariableElimination

[3]:

# Defining network structure

alarm_model = BayesianNetwork(
[
("Burglary", "Alarm"),
("Earthquake", "Alarm"),
("Alarm", "JohnCalls"),
("Alarm", "MaryCalls"),
]
)

# Defining the parameters using CPT
from pgmpy.factors.discrete import TabularCPD

cpd_burglary = TabularCPD(
variable="Burglary", variable_card=2, values=[[0.999], [0.001]]
)
cpd_earthquake = TabularCPD(
variable="Earthquake", variable_card=2, values=[[0.998], [0.002]]
)
cpd_alarm = TabularCPD(
variable="Alarm",
variable_card=2,
values=[[0.999, 0.71, 0.06, 0.05], [0.001, 0.29, 0.94, 0.95]],
evidence=["Burglary", "Earthquake"],
evidence_card=[2, 2],
)
cpd_johncalls = TabularCPD(
variable="JohnCalls",
variable_card=2,
values=[[0.95, 0.1], [0.05, 0.9]],
evidence=["Alarm"],
evidence_card=[2],
)
cpd_marycalls = TabularCPD(
variable="MaryCalls",
variable_card=2,
values=[[0.1, 0.7], [0.9, 0.3]],
evidence=["Alarm"],
evidence_card=[2],
)

# Associating the parameters with the model structure
cpd_burglary, cpd_earthquake, cpd_alarm, cpd_johncalls, cpd_marycalls
)

[4]:

# Checking if the cpds are valid for the model
alarm_model.check_model()

[4]:

True

[5]:

# Viewing nodes of the model
alarm_model.nodes()

[5]:

NodeView(('Burglary', 'Alarm', 'Earthquake', 'JohnCalls', 'MaryCalls'))

[6]:

# Viewing edges of the model
alarm_model.edges()

[6]:

OutEdgeView([('Burglary', 'Alarm'), ('Alarm', 'JohnCalls'), ('Alarm', 'MaryCalls'), ('Earthquake', 'Alarm')])

[7]:

# Checking independcies of a node
alarm_model.local_independencies("Burglary")

[7]:

(Burglary ⟂ Earthquake)

[8]:

# Listing all Independencies
alarm_model.get_independencies()

[8]:

(JohnCalls ⟂ Burglary, MaryCalls, Earthquake | Alarm)
(JohnCalls ⟂ MaryCalls, Earthquake | Burglary, Alarm)
(JohnCalls ⟂ Burglary, Earthquake | Alarm, MaryCalls)
(JohnCalls ⟂ Burglary, MaryCalls | Alarm, Earthquake)
(JohnCalls ⟂ Earthquake | Burglary, MaryCalls, Alarm)
(JohnCalls ⟂ MaryCalls | Burglary, Earthquake, Alarm)
(JohnCalls ⟂ Burglary | Alarm, MaryCalls, Earthquake)
(MaryCalls ⟂ JohnCalls, Burglary, Earthquake | Alarm)
(MaryCalls ⟂ Burglary, Earthquake | JohnCalls, Alarm)
(MaryCalls ⟂ JohnCalls, Earthquake | Burglary, Alarm)
(MaryCalls ⟂ JohnCalls, Burglary | Alarm, Earthquake)
(MaryCalls ⟂ Earthquake | JohnCalls, Burglary, Alarm)
(MaryCalls ⟂ Burglary | JohnCalls, Alarm, Earthquake)
(MaryCalls ⟂ JohnCalls | Burglary, Earthquake, Alarm)
(Earthquake ⟂ Burglary)
(Earthquake ⟂ JohnCalls, MaryCalls | Alarm)
(Earthquake ⟂ MaryCalls | JohnCalls, Alarm)
(Earthquake ⟂ JohnCalls, MaryCalls | Burglary, Alarm)
(Earthquake ⟂ JohnCalls | Alarm, MaryCalls)
(Earthquake ⟂ MaryCalls | JohnCalls, Burglary, Alarm)
(Earthquake ⟂ JohnCalls | Burglary, MaryCalls, Alarm)
(Burglary ⟂ Earthquake)
(Burglary ⟂ JohnCalls, MaryCalls | Alarm)
(Burglary ⟂ MaryCalls | JohnCalls, Alarm)
(Burglary ⟂ JohnCalls | Alarm, MaryCalls)
(Burglary ⟂ JohnCalls, MaryCalls | Alarm, Earthquake)
(Burglary ⟂ MaryCalls | JohnCalls, Alarm, Earthquake)
(Burglary ⟂ JohnCalls | Alarm, MaryCalls, Earthquake)