Logo
pyAgrum 1.8.1 on Jupyter

Tutorials

  • ▶ Tutorial
    • ▷ Tutorial
    • ▷ Tutorial2
  • ▶ Examples
    • ▷ Asthma
    • ▷ Kaggle Titanic
    • ▷ Naive Credit Default Modeling
    • ▷ Causality And Learning
    • ▷ Sensitivity Analysis Using Credal Networks
    • ▷ Quasi Continuous
    • ▷ Parameters Learning With Pandas
    • ▷ Bayesian Beta Coin
  • ▶ Models
    • ▷ Influence Diagram
    • ▷ Dynamic Bn
    • ▷ Markov Random Field
    • ▷ Credal Networks
    • ▷ O3PRM
  • ▶ Learning
    • ▷ Structural Learning
    • ▷ Learning Classifier
    • ▷ Learning And Essential Graphs
    • ▷ Dirichlet Prior And Weigthed Database
    • ▷ Parametric Em
    • ▷ Chi2 And Scores From Bn Learner
  • ▶ Inference
    • ▷ Graphical Inference
    • ▷ Relevance Reasoning
    • ▷ Lazy Propagation Advanced Features
    • ▷ Approximate Inference
    • ▷ Sampling Inference
  • ▶ Classifier
    • ▷ Learning
    • ▷ Discretizer
    • ▷ Compare Classifiers With Sklearn
    • ▷ Cross Validation
    • ▷ Binary And Nary Classifier From Bn
  • ▶ Causality
    • ▷ Tobacco
    • ▷ Simpson Paradox
    • ▷ Multinomial Simpson Paradox
    • ▷ Do Calculus Examples
    • ▷ Counterfactual
  • ▶ Applications
    • ▷ Ipywidgets
  • ▶ Tools
    • ▷ Potentials
    • ▷ Aggregators
    • ▷ Explain
    • ▷ Kl For BNs
    • ▷ Comparing Bn
    • ▷ Colouring And Exporting BNs
    • ▷ Config For PyAgrum
pyAgrum

Dynamic Bayesian Networks¶

Creative Commons License aGrUM interactive online version
In [1]:
import pyAgrum as gum
import pyAgrum.lib.notebook as gnb
import pyAgrum.lib.dynamicBN as gdyn

Building a 2TBN¶

Note the naming convention for a 2TBN : a variable with a name $A$ is present at t=0 with the name $A0$ and at time t as $At$.

In [2]:
# hard coded BN
#twodbn=gum.BayesNet()
#a0,b0,c0,at,bt,ct=[twodbn.add(gum.LabelizedVariable(s,s,6)) 
#                   for s in ["a0","b0","c0","at","bt","ct"]]
#d0,dt=[twodbn.add(gum.LabelizedVariable(s,s,3)) 
#       for s in ["d0","dt"]]

#twodbn.addArc(a0,b0)

#twodbn.addArc(c0,d0)
#twodbn.addArc(c0,at)

#twodbn.addArc(a0,at)
#twodbn.addArc(a0,bt)
#twodbn.addArc(a0,dt)
#twodbn.addArc(b0,bt)
#twodbn.addArc(c0,ct)
#twodbn.addArc(d0,ct)
#twodbn.addArc(d0,dt)

#twodbn.addArc(at,ct)
#twodbn.generateCPTs()

# fast BN version

twodbn=gum.fastBN("d0[3]->ct<-at<-a0->b0->bt<-a0->dt[3]<-d0<-c0->ct;c0->at",6)
twodbn
Out[2]:
pyAgrum▶Models▷Dynamic BnG pyAgrum▶Models▷Dynamic Bnct ct pyAgrum▶Models▷Dynamic Bnd0 d0 pyAgrum▶Models▷Dynamic Bnd0->ct pyAgrum▶Models▷Dynamic Bndt dt pyAgrum▶Models▷Dynamic Bnd0->dt pyAgrum▶Models▷Dynamic Bnb0 b0 pyAgrum▶Models▷Dynamic Bnbt bt pyAgrum▶Models▷Dynamic Bnb0->bt pyAgrum▶Models▷Dynamic Bnat at pyAgrum▶Models▷Dynamic Bnat->ct pyAgrum▶Models▷Dynamic Bna0 a0 pyAgrum▶Models▷Dynamic Bna0->b0 pyAgrum▶Models▷Dynamic Bna0->at pyAgrum▶Models▷Dynamic Bna0->bt pyAgrum▶Models▷Dynamic Bna0->dt pyAgrum▶Models▷Dynamic Bnc0 c0 pyAgrum▶Models▷Dynamic Bnc0->ct pyAgrum▶Models▷Dynamic Bnc0->d0 pyAgrum▶Models▷Dynamic Bnc0->at

2TBN¶

The dbn above actually is a 2TBN and is not correctly shown as a BN. Using the naming convention, it can be shown as a 2TBN.

In [3]:
gdyn.showTimeSlices(twodbn)
pyAgrum▶Models▷Dynamic BnG pyAgrum▶Models▷Dynamic Bncluster_0 Time slice 0 pyAgrum▶Models▷Dynamic Bncluster_t Time slice t pyAgrum▶Models▷Dynamic Bna0 a pyAgrum▶Models▷Dynamic Bnb0 b pyAgrum▶Models▷Dynamic Bna0->b0 pyAgrum▶Models▷Dynamic Bnat a pyAgrum▶Models▷Dynamic Bna0->at pyAgrum▶Models▷Dynamic Bnbt b pyAgrum▶Models▷Dynamic Bna0->bt pyAgrum▶Models▷Dynamic Bndt d pyAgrum▶Models▷Dynamic Bna0->dt pyAgrum▶Models▷Dynamic Bnb0->bt pyAgrum▶Models▷Dynamic Bnc0 c pyAgrum▶Models▷Dynamic Bnd0 d pyAgrum▶Models▷Dynamic Bnc0->d0 pyAgrum▶Models▷Dynamic Bnc0->at pyAgrum▶Models▷Dynamic Bnct c pyAgrum▶Models▷Dynamic Bnc0->ct pyAgrum▶Models▷Dynamic Bnd0->ct pyAgrum▶Models▷Dynamic Bnd0->dt pyAgrum▶Models▷Dynamic Bnat->ct

unrolling 2TBN¶

A dBN is 'unrolled' using the 2TBN and the time period size. For a couple $a_0$,$a_t$ in the 2TBN, the unrolled dBN will include $a_0, a_1, \cdots, a_{T-1}$

In [4]:
T=5

dbn=gdyn.unroll2TBN(twodbn,T)
gdyn.showTimeSlices(dbn,size="10")
pyAgrum▶Models▷Dynamic BnG pyAgrum▶Models▷Dynamic Bncluster_0 Time slice 0 pyAgrum▶Models▷Dynamic Bncluster_1 Time slice 1 pyAgrum▶Models▷Dynamic Bncluster_2 Time slice 2 pyAgrum▶Models▷Dynamic Bncluster_3 Time slice 3 pyAgrum▶Models▷Dynamic Bncluster_4 Time slice 4 pyAgrum▶Models▷Dynamic Bna0 a pyAgrum▶Models▷Dynamic Bnb0 b pyAgrum▶Models▷Dynamic Bna0->b0 pyAgrum▶Models▷Dynamic Bna1 a pyAgrum▶Models▷Dynamic Bna0->a1 pyAgrum▶Models▷Dynamic Bnb1 b pyAgrum▶Models▷Dynamic Bna0->b1 pyAgrum▶Models▷Dynamic Bnd1 d pyAgrum▶Models▷Dynamic Bna0->d1 pyAgrum▶Models▷Dynamic Bnb0->b1 pyAgrum▶Models▷Dynamic Bnc0 c pyAgrum▶Models▷Dynamic Bnd0 d pyAgrum▶Models▷Dynamic Bnc0->d0 pyAgrum▶Models▷Dynamic Bnc0->a1 pyAgrum▶Models▷Dynamic Bnc1 c pyAgrum▶Models▷Dynamic Bnc0->c1 pyAgrum▶Models▷Dynamic Bnd0->c1 pyAgrum▶Models▷Dynamic Bnd0->d1 pyAgrum▶Models▷Dynamic Bna1->c1 pyAgrum▶Models▷Dynamic Bna2 a pyAgrum▶Models▷Dynamic Bna1->a2 pyAgrum▶Models▷Dynamic Bnb2 b pyAgrum▶Models▷Dynamic Bna1->b2 pyAgrum▶Models▷Dynamic Bnd2 d pyAgrum▶Models▷Dynamic Bna1->d2 pyAgrum▶Models▷Dynamic Bnb1->b2 pyAgrum▶Models▷Dynamic Bnc1->a2 pyAgrum▶Models▷Dynamic Bnc2 c pyAgrum▶Models▷Dynamic Bnc1->c2 pyAgrum▶Models▷Dynamic Bnd1->c2 pyAgrum▶Models▷Dynamic Bnd1->d2 pyAgrum▶Models▷Dynamic Bna2->c2 pyAgrum▶Models▷Dynamic Bna3 a pyAgrum▶Models▷Dynamic Bna2->a3 pyAgrum▶Models▷Dynamic Bnb3 b pyAgrum▶Models▷Dynamic Bna2->b3 pyAgrum▶Models▷Dynamic Bnd3 d pyAgrum▶Models▷Dynamic Bna2->d3 pyAgrum▶Models▷Dynamic Bnb2->b3 pyAgrum▶Models▷Dynamic Bnc2->a3 pyAgrum▶Models▷Dynamic Bnc3 c pyAgrum▶Models▷Dynamic Bnc2->c3 pyAgrum▶Models▷Dynamic Bnd2->c3 pyAgrum▶Models▷Dynamic Bnd2->d3 pyAgrum▶Models▷Dynamic Bna3->c3 pyAgrum▶Models▷Dynamic Bna4 a pyAgrum▶Models▷Dynamic Bna3->a4 pyAgrum▶Models▷Dynamic Bnb4 b pyAgrum▶Models▷Dynamic Bna3->b4 pyAgrum▶Models▷Dynamic Bnd4 d pyAgrum▶Models▷Dynamic Bna3->d4 pyAgrum▶Models▷Dynamic Bnb3->b4 pyAgrum▶Models▷Dynamic Bnc3->a4 pyAgrum▶Models▷Dynamic Bnc4 c pyAgrum▶Models▷Dynamic Bnc3->c4 pyAgrum▶Models▷Dynamic Bnd3->c4 pyAgrum▶Models▷Dynamic Bnd3->d4 pyAgrum▶Models▷Dynamic Bna4->c4

We can infer on bn just as on a normal bn. Following the naming convention in 2TBN, the variables in a dbN are named using the convention $a_i$ where $i$ is the number of their time slice.

In [5]:
gnb.flow.clear()
for i in range(T):
    gnb.flow.add_html(gnb.getPosterior(dbn,target="d{}".format(i),evs={}),"$P(d{})$".format(i))
gnb.flow.display()

$P(d0)$

$P(d1)$

$P(d2)$

$P(d3)$

$P(d4)$

dynamic inference : following variables¶

gdyn.plotFollow directly ask for the 2TBN, unroll it and add evidence evs. Then it shows the dynamic of variable $a$ for instance by plotting $a_0,a_1,\cdots,a_{T-1}$.

In [6]:
import matplotlib.pyplot as plt

plt.rcParams['figure.figsize'] = (10, 2)
gdyn.plotFollow(["a","b","c","d"],twodbn,T=51,evs={'a9':2,'a30':0,'c14':0,'b40':0,'c50':3})  
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <cc:Work> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:date>2023-05-24T14:51:35.430623</dc:date> <dc:format>image/svg+xml</dc:format> <dc:creator> <cc:Agent> <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title> </cc:Agent> </dc:creator> </cc:Work> </rdf:RDF> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <cc:Work> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:date>2023-05-24T14:51:35.591949</dc:date> <dc:format>image/svg+xml</dc:format> <dc:creator> <cc:Agent> <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title> </cc:Agent> </dc:creator> </cc:Work> </rdf:RDF> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <cc:Work> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:date>2023-05-24T14:51:35.823963</dc:date> <dc:format>image/svg+xml</dc:format> <dc:creator> <cc:Agent> <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title> </cc:Agent> </dc:creator> </cc:Work> </rdf:RDF> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <cc:Work> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:date>2023-05-24T14:51:35.991347</dc:date> <dc:format>image/svg+xml</dc:format> <dc:creator> <cc:Agent> <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title> </cc:Agent> </dc:creator> </cc:Work> </rdf:RDF> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>

nsDBN (Non-Stationnary Dynamic Bayesian network)¶

In [7]:
T=15

dbn=gdyn.unroll2TBN(twodbn,T)
gdyn.showTimeSlices(dbn)
pyAgrum▶Models▷Dynamic BnG pyAgrum▶Models▷Dynamic Bncluster_0 Time slice 0 pyAgrum▶Models▷Dynamic Bncluster_1 Time slice 1 pyAgrum▶Models▷Dynamic Bncluster_2 Time slice 2 pyAgrum▶Models▷Dynamic Bncluster_3 Time slice 3 pyAgrum▶Models▷Dynamic Bncluster_4 Time slice 4 pyAgrum▶Models▷Dynamic Bncluster_5 Time slice 5 pyAgrum▶Models▷Dynamic Bncluster_6 Time slice 6 pyAgrum▶Models▷Dynamic Bncluster_7 Time slice 7 pyAgrum▶Models▷Dynamic Bncluster_8 Time slice 8 pyAgrum▶Models▷Dynamic Bncluster_9 Time slice 9 pyAgrum▶Models▷Dynamic Bncluster_10 Time slice 10 pyAgrum▶Models▷Dynamic Bncluster_11 Time slice 11 pyAgrum▶Models▷Dynamic Bncluster_12 Time slice 12 pyAgrum▶Models▷Dynamic Bncluster_13 Time slice 13 pyAgrum▶Models▷Dynamic Bncluster_14 Time slice 14 pyAgrum▶Models▷Dynamic Bna0 a pyAgrum▶Models▷Dynamic Bnb0 b pyAgrum▶Models▷Dynamic Bna0->b0 pyAgrum▶Models▷Dynamic Bna1 a pyAgrum▶Models▷Dynamic Bna0->a1 pyAgrum▶Models▷Dynamic Bnb1 b pyAgrum▶Models▷Dynamic Bna0->b1 pyAgrum▶Models▷Dynamic Bnd1 d pyAgrum▶Models▷Dynamic Bna0->d1 pyAgrum▶Models▷Dynamic Bnb0->b1 pyAgrum▶Models▷Dynamic Bnc0 c pyAgrum▶Models▷Dynamic Bnd0 d pyAgrum▶Models▷Dynamic Bnc0->d0 pyAgrum▶Models▷Dynamic Bnc0->a1 pyAgrum▶Models▷Dynamic Bnc1 c pyAgrum▶Models▷Dynamic Bnc0->c1 pyAgrum▶Models▷Dynamic Bnd0->c1 pyAgrum▶Models▷Dynamic Bnd0->d1 pyAgrum▶Models▷Dynamic Bna1->c1 pyAgrum▶Models▷Dynamic Bna2 a pyAgrum▶Models▷Dynamic Bna1->a2 pyAgrum▶Models▷Dynamic Bnb2 b pyAgrum▶Models▷Dynamic Bna1->b2 pyAgrum▶Models▷Dynamic Bnd2 d pyAgrum▶Models▷Dynamic Bna1->d2 pyAgrum▶Models▷Dynamic Bnb1->b2 pyAgrum▶Models▷Dynamic Bnc1->a2 pyAgrum▶Models▷Dynamic Bnc2 c pyAgrum▶Models▷Dynamic Bnc1->c2 pyAgrum▶Models▷Dynamic Bnd1->c2 pyAgrum▶Models▷Dynamic Bnd1->d2 pyAgrum▶Models▷Dynamic Bna2->c2 pyAgrum▶Models▷Dynamic Bna3 a pyAgrum▶Models▷Dynamic Bna2->a3 pyAgrum▶Models▷Dynamic Bnb3 b pyAgrum▶Models▷Dynamic Bna2->b3 pyAgrum▶Models▷Dynamic Bnd3 d pyAgrum▶Models▷Dynamic Bna2->d3 pyAgrum▶Models▷Dynamic Bnb2->b3 pyAgrum▶Models▷Dynamic Bnc2->a3 pyAgrum▶Models▷Dynamic Bnc3 c pyAgrum▶Models▷Dynamic Bnc2->c3 pyAgrum▶Models▷Dynamic Bnd2->c3 pyAgrum▶Models▷Dynamic Bnd2->d3 pyAgrum▶Models▷Dynamic Bna3->c3 pyAgrum▶Models▷Dynamic Bna4 a pyAgrum▶Models▷Dynamic Bna3->a4 pyAgrum▶Models▷Dynamic Bnb4 b pyAgrum▶Models▷Dynamic Bna3->b4 pyAgrum▶Models▷Dynamic Bnd4 d pyAgrum▶Models▷Dynamic Bna3->d4 pyAgrum▶Models▷Dynamic Bnb3->b4 pyAgrum▶Models▷Dynamic Bnc3->a4 pyAgrum▶Models▷Dynamic Bnc4 c pyAgrum▶Models▷Dynamic Bnc3->c4 pyAgrum▶Models▷Dynamic Bnd3->c4 pyAgrum▶Models▷Dynamic Bnd3->d4 pyAgrum▶Models▷Dynamic Bna4->c4 pyAgrum▶Models▷Dynamic Bna5 a pyAgrum▶Models▷Dynamic Bna4->a5 pyAgrum▶Models▷Dynamic Bnb5 b pyAgrum▶Models▷Dynamic Bna4->b5 pyAgrum▶Models▷Dynamic Bnd5 d pyAgrum▶Models▷Dynamic Bna4->d5 pyAgrum▶Models▷Dynamic Bnb4->b5 pyAgrum▶Models▷Dynamic Bnc4->a5 pyAgrum▶Models▷Dynamic Bnc5 c pyAgrum▶Models▷Dynamic Bnc4->c5 pyAgrum▶Models▷Dynamic Bnd4->c5 pyAgrum▶Models▷Dynamic Bnd4->d5 pyAgrum▶Models▷Dynamic Bna5->c5 pyAgrum▶Models▷Dynamic Bna6 a pyAgrum▶Models▷Dynamic Bna5->a6 pyAgrum▶Models▷Dynamic Bnb6 b pyAgrum▶Models▷Dynamic Bna5->b6 pyAgrum▶Models▷Dynamic Bnd6 d pyAgrum▶Models▷Dynamic Bna5->d6 pyAgrum▶Models▷Dynamic Bnb5->b6 pyAgrum▶Models▷Dynamic Bnc5->a6 pyAgrum▶Models▷Dynamic Bnc6 c pyAgrum▶Models▷Dynamic Bnc5->c6 pyAgrum▶Models▷Dynamic Bnd5->c6 pyAgrum▶Models▷Dynamic Bnd5->d6 pyAgrum▶Models▷Dynamic Bna6->c6 pyAgrum▶Models▷Dynamic Bna7 a pyAgrum▶Models▷Dynamic Bna6->a7 pyAgrum▶Models▷Dynamic Bnb7 b pyAgrum▶Models▷Dynamic Bna6->b7 pyAgrum▶Models▷Dynamic Bnd7 d pyAgrum▶Models▷Dynamic Bna6->d7 pyAgrum▶Models▷Dynamic Bnb6->b7 pyAgrum▶Models▷Dynamic Bnc6->a7 pyAgrum▶Models▷Dynamic Bnc7 c pyAgrum▶Models▷Dynamic Bnc6->c7 pyAgrum▶Models▷Dynamic Bnd6->c7 pyAgrum▶Models▷Dynamic Bnd6->d7 pyAgrum▶Models▷Dynamic Bna7->c7 pyAgrum▶Models▷Dynamic Bna8 a pyAgrum▶Models▷Dynamic Bna7->a8 pyAgrum▶Models▷Dynamic Bnb8 b pyAgrum▶Models▷Dynamic Bna7->b8 pyAgrum▶Models▷Dynamic Bnd8 d pyAgrum▶Models▷Dynamic Bna7->d8 pyAgrum▶Models▷Dynamic Bnb7->b8 pyAgrum▶Models▷Dynamic Bnc7->a8 pyAgrum▶Models▷Dynamic Bnc8 c pyAgrum▶Models▷Dynamic Bnc7->c8 pyAgrum▶Models▷Dynamic Bnd7->c8 pyAgrum▶Models▷Dynamic Bnd7->d8 pyAgrum▶Models▷Dynamic Bna8->c8 pyAgrum▶Models▷Dynamic Bna9 a pyAgrum▶Models▷Dynamic Bna8->a9 pyAgrum▶Models▷Dynamic Bnb9 b pyAgrum▶Models▷Dynamic Bna8->b9 pyAgrum▶Models▷Dynamic Bnd9 d pyAgrum▶Models▷Dynamic Bna8->d9 pyAgrum▶Models▷Dynamic Bnb8->b9 pyAgrum▶Models▷Dynamic Bnc8->a9 pyAgrum▶Models▷Dynamic Bnc9 c pyAgrum▶Models▷Dynamic Bnc8->c9 pyAgrum▶Models▷Dynamic Bnd8->c9 pyAgrum▶Models▷Dynamic Bnd8->d9 pyAgrum▶Models▷Dynamic Bna9->c9 pyAgrum▶Models▷Dynamic Bna10 a pyAgrum▶Models▷Dynamic Bna9->a10 pyAgrum▶Models▷Dynamic Bnb10 b pyAgrum▶Models▷Dynamic Bna9->b10 pyAgrum▶Models▷Dynamic Bnd10 d pyAgrum▶Models▷Dynamic Bna9->d10 pyAgrum▶Models▷Dynamic Bnb9->b10 pyAgrum▶Models▷Dynamic Bnc9->a10 pyAgrum▶Models▷Dynamic Bnc10 c pyAgrum▶Models▷Dynamic Bnc9->c10 pyAgrum▶Models▷Dynamic Bnd9->c10 pyAgrum▶Models▷Dynamic Bnd9->d10 pyAgrum▶Models▷Dynamic Bna10->c10 pyAgrum▶Models▷Dynamic Bna11 a pyAgrum▶Models▷Dynamic Bna10->a11 pyAgrum▶Models▷Dynamic Bnb11 b pyAgrum▶Models▷Dynamic Bna10->b11 pyAgrum▶Models▷Dynamic Bnd11 d pyAgrum▶Models▷Dynamic Bna10->d11 pyAgrum▶Models▷Dynamic Bnb10->b11 pyAgrum▶Models▷Dynamic Bnc10->a11 pyAgrum▶Models▷Dynamic Bnc11 c pyAgrum▶Models▷Dynamic Bnc10->c11 pyAgrum▶Models▷Dynamic Bnd10->c11 pyAgrum▶Models▷Dynamic Bnd10->d11 pyAgrum▶Models▷Dynamic Bna11->c11 pyAgrum▶Models▷Dynamic Bna12 a pyAgrum▶Models▷Dynamic Bna11->a12 pyAgrum▶Models▷Dynamic Bnb12 b pyAgrum▶Models▷Dynamic Bna11->b12 pyAgrum▶Models▷Dynamic Bnd12 d pyAgrum▶Models▷Dynamic Bna11->d12 pyAgrum▶Models▷Dynamic Bnb11->b12 pyAgrum▶Models▷Dynamic Bnc11->a12 pyAgrum▶Models▷Dynamic Bnc12 c pyAgrum▶Models▷Dynamic Bnc11->c12 pyAgrum▶Models▷Dynamic Bnd11->c12 pyAgrum▶Models▷Dynamic Bnd11->d12 pyAgrum▶Models▷Dynamic Bna12->c12 pyAgrum▶Models▷Dynamic Bna13 a pyAgrum▶Models▷Dynamic Bna12->a13 pyAgrum▶Models▷Dynamic Bnb13 b pyAgrum▶Models▷Dynamic Bna12->b13 pyAgrum▶Models▷Dynamic Bnd13 d pyAgrum▶Models▷Dynamic Bna12->d13 pyAgrum▶Models▷Dynamic Bnb12->b13 pyAgrum▶Models▷Dynamic Bnc12->a13 pyAgrum▶Models▷Dynamic Bnc13 c pyAgrum▶Models▷Dynamic Bnc12->c13 pyAgrum▶Models▷Dynamic Bnd12->c13 pyAgrum▶Models▷Dynamic Bnd12->d13 pyAgrum▶Models▷Dynamic Bna13->c13 pyAgrum▶Models▷Dynamic Bna14 a pyAgrum▶Models▷Dynamic Bna13->a14 pyAgrum▶Models▷Dynamic Bnb14 b pyAgrum▶Models▷Dynamic Bna13->b14 pyAgrum▶Models▷Dynamic Bnd14 d pyAgrum▶Models▷Dynamic Bna13->d14 pyAgrum▶Models▷Dynamic Bnb13->b14 pyAgrum▶Models▷Dynamic Bnc13->a14 pyAgrum▶Models▷Dynamic Bnc14 c pyAgrum▶Models▷Dynamic Bnc13->c14 pyAgrum▶Models▷Dynamic Bnd13->c14 pyAgrum▶Models▷Dynamic Bnd13->d14 pyAgrum▶Models▷Dynamic Bna14->c14

Non-stationnaty DBN allows to express that the dBN do not follow the same 2TBN during all steps. A unrolled dbn is a classical BayesNet and then can be changed as you want after unrolling.

In [8]:
# new P(ct|c0) 
pot=gum.Potential().add(twodbn.variableFromName("ct")).add(twodbn.variableFromName("c0"))  
pot.fillWith([1,0,0,0.1]*9).normalizeAsCPT() # 36 valeurs normalized as CPT
Out[8]:
ct
c0
0
1
2
3
4
5
0
0.47620.00000.00000.04760.47620.0000
1
0.00000.08330.83330.00000.00000.0833
2
0.47620.00000.00000.04760.47620.0000
3
0.00000.08330.83330.00000.00000.0833
4
0.47620.00000.00000.04760.47620.0000
5
0.00000.08330.83330.00000.00000.0833
In [9]:
# from steps 5 to 10, $C_t$ only depends on $C_{t-1}$ and follows this new CPT
for i in range(5,11):
    dbn.eraseArc(f"d{i-1}",f"c{i}")
    dbn.eraseArc(f"a{i}",f"c{i}")
    dbn.cpt(f"c{i}").fillWith(pot,["ct","c0"]) # ct in pot <- first var of cpt, c0 in pot<-second var in cpt
    
gdyn.showTimeSlices(dbn,size="14")
pyAgrum▶Models▷Dynamic BnG pyAgrum▶Models▷Dynamic Bncluster_0 Time slice 0 pyAgrum▶Models▷Dynamic Bncluster_1 Time slice 1 pyAgrum▶Models▷Dynamic Bncluster_2 Time slice 2 pyAgrum▶Models▷Dynamic Bncluster_3 Time slice 3 pyAgrum▶Models▷Dynamic Bncluster_4 Time slice 4 pyAgrum▶Models▷Dynamic Bncluster_5 Time slice 5 pyAgrum▶Models▷Dynamic Bncluster_6 Time slice 6 pyAgrum▶Models▷Dynamic Bncluster_7 Time slice 7 pyAgrum▶Models▷Dynamic Bncluster_8 Time slice 8 pyAgrum▶Models▷Dynamic Bncluster_9 Time slice 9 pyAgrum▶Models▷Dynamic Bncluster_10 Time slice 10 pyAgrum▶Models▷Dynamic Bncluster_11 Time slice 11 pyAgrum▶Models▷Dynamic Bncluster_12 Time slice 12 pyAgrum▶Models▷Dynamic Bncluster_13 Time slice 13 pyAgrum▶Models▷Dynamic Bncluster_14 Time slice 14 pyAgrum▶Models▷Dynamic Bna0 a pyAgrum▶Models▷Dynamic Bnb0 b pyAgrum▶Models▷Dynamic Bna0->b0 pyAgrum▶Models▷Dynamic Bna1 a pyAgrum▶Models▷Dynamic Bna0->a1 pyAgrum▶Models▷Dynamic Bnb1 b pyAgrum▶Models▷Dynamic Bna0->b1 pyAgrum▶Models▷Dynamic Bnd1 d pyAgrum▶Models▷Dynamic Bna0->d1 pyAgrum▶Models▷Dynamic Bnb0->b1 pyAgrum▶Models▷Dynamic Bnc0 c pyAgrum▶Models▷Dynamic Bnd0 d pyAgrum▶Models▷Dynamic Bnc0->d0 pyAgrum▶Models▷Dynamic Bnc0->a1 pyAgrum▶Models▷Dynamic Bnc1 c pyAgrum▶Models▷Dynamic Bnc0->c1 pyAgrum▶Models▷Dynamic Bnd0->c1 pyAgrum▶Models▷Dynamic Bnd0->d1 pyAgrum▶Models▷Dynamic Bna1->c1 pyAgrum▶Models▷Dynamic Bna2 a pyAgrum▶Models▷Dynamic Bna1->a2 pyAgrum▶Models▷Dynamic Bnb2 b pyAgrum▶Models▷Dynamic Bna1->b2 pyAgrum▶Models▷Dynamic Bnd2 d pyAgrum▶Models▷Dynamic Bna1->d2 pyAgrum▶Models▷Dynamic Bnb1->b2 pyAgrum▶Models▷Dynamic Bnc1->a2 pyAgrum▶Models▷Dynamic Bnc2 c pyAgrum▶Models▷Dynamic Bnc1->c2 pyAgrum▶Models▷Dynamic Bnd1->c2 pyAgrum▶Models▷Dynamic Bnd1->d2 pyAgrum▶Models▷Dynamic Bna2->c2 pyAgrum▶Models▷Dynamic Bna3 a pyAgrum▶Models▷Dynamic Bna2->a3 pyAgrum▶Models▷Dynamic Bnb3 b pyAgrum▶Models▷Dynamic Bna2->b3 pyAgrum▶Models▷Dynamic Bnd3 d pyAgrum▶Models▷Dynamic Bna2->d3 pyAgrum▶Models▷Dynamic Bnb2->b3 pyAgrum▶Models▷Dynamic Bnc2->a3 pyAgrum▶Models▷Dynamic Bnc3 c pyAgrum▶Models▷Dynamic Bnc2->c3 pyAgrum▶Models▷Dynamic Bnd2->c3 pyAgrum▶Models▷Dynamic Bnd2->d3 pyAgrum▶Models▷Dynamic Bna3->c3 pyAgrum▶Models▷Dynamic Bna4 a pyAgrum▶Models▷Dynamic Bna3->a4 pyAgrum▶Models▷Dynamic Bnb4 b pyAgrum▶Models▷Dynamic Bna3->b4 pyAgrum▶Models▷Dynamic Bnd4 d pyAgrum▶Models▷Dynamic Bna3->d4 pyAgrum▶Models▷Dynamic Bnb3->b4 pyAgrum▶Models▷Dynamic Bnc3->a4 pyAgrum▶Models▷Dynamic Bnc4 c pyAgrum▶Models▷Dynamic Bnc3->c4 pyAgrum▶Models▷Dynamic Bnd3->c4 pyAgrum▶Models▷Dynamic Bnd3->d4 pyAgrum▶Models▷Dynamic Bna4->c4 pyAgrum▶Models▷Dynamic Bna5 a pyAgrum▶Models▷Dynamic Bna4->a5 pyAgrum▶Models▷Dynamic Bnb5 b pyAgrum▶Models▷Dynamic Bna4->b5 pyAgrum▶Models▷Dynamic Bnd5 d pyAgrum▶Models▷Dynamic Bna4->d5 pyAgrum▶Models▷Dynamic Bnb4->b5 pyAgrum▶Models▷Dynamic Bnc4->a5 pyAgrum▶Models▷Dynamic Bnc5 c pyAgrum▶Models▷Dynamic Bnc4->c5 pyAgrum▶Models▷Dynamic Bnd4->d5 pyAgrum▶Models▷Dynamic Bna6 a pyAgrum▶Models▷Dynamic Bna5->a6 pyAgrum▶Models▷Dynamic Bnb6 b pyAgrum▶Models▷Dynamic Bna5->b6 pyAgrum▶Models▷Dynamic Bnd6 d pyAgrum▶Models▷Dynamic Bna5->d6 pyAgrum▶Models▷Dynamic Bnb5->b6 pyAgrum▶Models▷Dynamic Bnc5->a6 pyAgrum▶Models▷Dynamic Bnc6 c pyAgrum▶Models▷Dynamic Bnc5->c6 pyAgrum▶Models▷Dynamic Bnd5->d6 pyAgrum▶Models▷Dynamic Bna7 a pyAgrum▶Models▷Dynamic Bna6->a7 pyAgrum▶Models▷Dynamic Bnb7 b pyAgrum▶Models▷Dynamic Bna6->b7 pyAgrum▶Models▷Dynamic Bnd7 d pyAgrum▶Models▷Dynamic Bna6->d7 pyAgrum▶Models▷Dynamic Bnb6->b7 pyAgrum▶Models▷Dynamic Bnc6->a7 pyAgrum▶Models▷Dynamic Bnc7 c pyAgrum▶Models▷Dynamic Bnc6->c7 pyAgrum▶Models▷Dynamic Bnd6->d7 pyAgrum▶Models▷Dynamic Bna8 a pyAgrum▶Models▷Dynamic Bna7->a8 pyAgrum▶Models▷Dynamic Bnb8 b pyAgrum▶Models▷Dynamic Bna7->b8 pyAgrum▶Models▷Dynamic Bnd8 d pyAgrum▶Models▷Dynamic Bna7->d8 pyAgrum▶Models▷Dynamic Bnb7->b8 pyAgrum▶Models▷Dynamic Bnc7->a8 pyAgrum▶Models▷Dynamic Bnc8 c pyAgrum▶Models▷Dynamic Bnc7->c8 pyAgrum▶Models▷Dynamic Bnd7->d8 pyAgrum▶Models▷Dynamic Bna9 a pyAgrum▶Models▷Dynamic Bna8->a9 pyAgrum▶Models▷Dynamic Bnb9 b pyAgrum▶Models▷Dynamic Bna8->b9 pyAgrum▶Models▷Dynamic Bnd9 d pyAgrum▶Models▷Dynamic Bna8->d9 pyAgrum▶Models▷Dynamic Bnb8->b9 pyAgrum▶Models▷Dynamic Bnc8->a9 pyAgrum▶Models▷Dynamic Bnc9 c pyAgrum▶Models▷Dynamic Bnc8->c9 pyAgrum▶Models▷Dynamic Bnd8->d9 pyAgrum▶Models▷Dynamic Bna10 a pyAgrum▶Models▷Dynamic Bna9->a10 pyAgrum▶Models▷Dynamic Bnb10 b pyAgrum▶Models▷Dynamic Bna9->b10 pyAgrum▶Models▷Dynamic Bnd10 d pyAgrum▶Models▷Dynamic Bna9->d10 pyAgrum▶Models▷Dynamic Bnb9->b10 pyAgrum▶Models▷Dynamic Bnc9->a10 pyAgrum▶Models▷Dynamic Bnc10 c pyAgrum▶Models▷Dynamic Bnc9->c10 pyAgrum▶Models▷Dynamic Bnd9->d10 pyAgrum▶Models▷Dynamic Bna11 a pyAgrum▶Models▷Dynamic Bna10->a11 pyAgrum▶Models▷Dynamic Bnb11 b pyAgrum▶Models▷Dynamic Bna10->b11 pyAgrum▶Models▷Dynamic Bnd11 d pyAgrum▶Models▷Dynamic Bna10->d11 pyAgrum▶Models▷Dynamic Bnb10->b11 pyAgrum▶Models▷Dynamic Bnc10->a11 pyAgrum▶Models▷Dynamic Bnc11 c pyAgrum▶Models▷Dynamic Bnc10->c11 pyAgrum▶Models▷Dynamic Bnd10->c11 pyAgrum▶Models▷Dynamic Bnd10->d11 pyAgrum▶Models▷Dynamic Bna11->c11 pyAgrum▶Models▷Dynamic Bna12 a pyAgrum▶Models▷Dynamic Bna11->a12 pyAgrum▶Models▷Dynamic Bnb12 b pyAgrum▶Models▷Dynamic Bna11->b12 pyAgrum▶Models▷Dynamic Bnd12 d pyAgrum▶Models▷Dynamic Bna11->d12 pyAgrum▶Models▷Dynamic Bnb11->b12 pyAgrum▶Models▷Dynamic Bnc11->a12 pyAgrum▶Models▷Dynamic Bnc12 c pyAgrum▶Models▷Dynamic Bnc11->c12 pyAgrum▶Models▷Dynamic Bnd11->c12 pyAgrum▶Models▷Dynamic Bnd11->d12 pyAgrum▶Models▷Dynamic Bna12->c12 pyAgrum▶Models▷Dynamic Bna13 a pyAgrum▶Models▷Dynamic Bna12->a13 pyAgrum▶Models▷Dynamic Bnb13 b pyAgrum▶Models▷Dynamic Bna12->b13 pyAgrum▶Models▷Dynamic Bnd13 d pyAgrum▶Models▷Dynamic Bna12->d13 pyAgrum▶Models▷Dynamic Bnb12->b13 pyAgrum▶Models▷Dynamic Bnc12->a13 pyAgrum▶Models▷Dynamic Bnc13 c pyAgrum▶Models▷Dynamic Bnc12->c13 pyAgrum▶Models▷Dynamic Bnd12->c13 pyAgrum▶Models▷Dynamic Bnd12->d13 pyAgrum▶Models▷Dynamic Bna13->c13 pyAgrum▶Models▷Dynamic Bna14 a pyAgrum▶Models▷Dynamic Bna13->a14 pyAgrum▶Models▷Dynamic Bnb14 b pyAgrum▶Models▷Dynamic Bna13->b14 pyAgrum▶Models▷Dynamic Bnd14 d pyAgrum▶Models▷Dynamic Bna13->d14 pyAgrum▶Models▷Dynamic Bnb13->b14 pyAgrum▶Models▷Dynamic Bnc13->a14 pyAgrum▶Models▷Dynamic Bnc14 c pyAgrum▶Models▷Dynamic Bnc13->c14 pyAgrum▶Models▷Dynamic Bnd13->c14 pyAgrum▶Models▷Dynamic Bnd13->d14 pyAgrum▶Models▷Dynamic Bna14->c14
In [10]:
plt.rcParams['figure.figsize'] = (10, 2)
gdyn.plotFollowUnrolled(["a","b","c","d"],dbn,T=15,evs={'a9':2,'c14':0})  
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <cc:Work> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:date>2023-05-24T14:51:36.648361</dc:date> <dc:format>image/svg+xml</dc:format> <dc:creator> <cc:Agent> <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title> </cc:Agent> </dc:creator> </cc:Work> </rdf:RDF> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <cc:Work> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:date>2023-05-24T14:51:36.783217</dc:date> <dc:format>image/svg+xml</dc:format> <dc:creator> <cc:Agent> <dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title> </cc:Agent> </dc:creator> </cc:Work> </rdf:RDF> <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>