You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This pull request updates lecture markov_chains_I.md. In particular,
## Content
- The first exercise -> The last exercise.
- Remove unused variables and shorten the visualization code for the network graph.
- unbold future in Defiinig Markov Chains section.
- study a Markov chains -> study Markov chains.
- Use tuples whenever possible.
- Give some comments on the code in the `qe` library.
- Add a link for marginal probability $\psi_t(x)$.
- Unify postmultiply (using postmultiply instead of post-multiply in lieu with wikipedia)
- Add a sentence clarifying $P^m(x,y)$.
- Law of Large Numbers -> law of large numbers.
- Check the capitalization of subtitles.
- for all $t$ -> for all $t \ge 0$.
- $\psi_t(0)$ is employment at [time $t$].
- Delete the word 'Theorem' in the Theorem box.
- Update the solution for exercise 1.
## Code
- Update visualization code for the section on the Hamilton matrix.
edge_color=[G[nodes[0]][nodes[1]][0]['weight'] for nodes in G.edges])
279
277
@@ -317,7 +315,7 @@ This means that, for any date $t$ and any state $y \in S$,
317
315
= \mathbb P \{ X_{t+1} = y \,|\, X_t, X_{t-1}, \ldots \}
318
316
```
319
317
320
-
This means that once we know the current state $X_t$, adding knowledge of earlier states $X_{t-1}, X_{t-2}$ provides no additional information about probabilities of **future** states.
318
+
This means that once we know the current state $X_t$, adding knowledge of earlier states $X_{t-1}, X_{t-2}$ provides no additional information about probabilities of *future* states.
321
319
322
320
Thus, the dynamics of a Markov chain are fully determined by the set of **conditional probabilities**
323
321
@@ -356,7 +354,7 @@ By construction, the resulting process satisfies {eq}`mpp`.
356
354
```{index} single: Markov Chains; Simulation
357
355
```
358
356
359
-
A good way to study a Markov chains is to simulate it.
357
+
A good way to study Markov chains is to simulate it.
360
358
361
359
Let's start by doing this ourselves and then look at libraries that can help
362
360
us.
@@ -434,7 +432,7 @@ P = [[0.4, 0.6],
434
432
Here's a short time series.
435
433
436
434
```{code-cell} ipython3
437
-
mc_sample_path(P, ψ_0=[1.0, 0.0], ts_length=10)
435
+
mc_sample_path(P, ψ_0=(1.0, 0.0), ts_length=10)
438
436
```
439
437
440
438
It can be shown that for a long series drawn from `P`, the fraction of the
@@ -448,7 +446,7 @@ $X_0$ is drawn.
448
446
The following code illustrates this
449
447
450
448
```{code-cell} ipython3
451
-
X = mc_sample_path(P, ψ_0=[0.1, 0.9], ts_length=1_000_000)
449
+
X = mc_sample_path(P, ψ_0=(0.1, 0.9), ts_length=1_000_000)
452
450
np.mean(X == 0)
453
451
```
454
452
@@ -488,11 +486,11 @@ The following code illustrates
488
486
489
487
```{code-cell} ipython3
490
488
mc = qe.MarkovChain(P, state_values=('unemployed', 'employed'))
491
-
mc.simulate(ts_length=4, init='employed')
489
+
mc.simulate(ts_length=4, init='employed'). # Start at employed initial state
492
490
```
493
491
494
492
```{code-cell} ipython3
495
-
mc.simulate(ts_length=4, init='unemployed')
493
+
mc.simulate(ts_length=4, init='unemployed') # Start at unemployed initial state
496
494
```
497
495
498
496
```{code-cell} ipython3
@@ -570,7 +568,7 @@ This is very important, so let's repeat it
The general rule is that post-multiplying a distribution by $P^m$ shifts it forward $m$ units of time.
571
+
The general rule is that postmultiplying a distribution by $P^m$ shifts it forward $m$ units of time.
574
572
575
573
Hence the following is also valid.
576
574
@@ -625,12 +623,12 @@ $$
625
623
626
624
627
625
(mc_eg1-1)=
628
-
### Example 2: Cross-sectional distributions
626
+
### Example 2: cross-sectional distributions
629
627
630
628
The distributions we have been studying can be viewed either
631
629
632
630
1. as probabilities or
633
-
1. as cross-sectional frequencies that the Law of Large Numbers leads us to anticipate for large samples.
631
+
1. as cross-sectional frequencies that the law of large numbers leads us to anticipate for large samples.
634
632
635
633
To illustrate, recall our model of employment/unemployment dynamics for a given worker {ref}`discussed above <mc_eg1>`.
636
634
@@ -641,21 +639,21 @@ workers' processes.
641
639
642
640
Let $\psi_t$ be the current *cross-sectional* distribution over $\{ 0, 1 \}$.
643
641
644
-
The cross-sectional distribution records fractions of workers employed and unemployed at a given moment t.
642
+
The cross-sectional distribution records fractions of workers employed and unemployed at a given moment $t$.
645
643
646
-
* For example, $\psi_t(0)$ is the unemployment rate.
644
+
* For example, $\psi_t(0)$ is the unemployment rate at time $t$.
647
645
648
646
What will the cross-sectional distribution be in 10 periods hence?
649
647
650
648
The answer is $\psi_t P^{10}$, where $P$ is the stochastic matrix in
651
649
{eq}`p_unempemp`.
652
650
653
651
This is because each worker's state evolves according to $P$, so
654
-
$\psi_t P^{10}$ is a marginal distribution for a single randomly selected
652
+
$\psi_t P^{10}$ is a [marginal distribution](https://en.wikipedia.org/wiki/Marginal_distribution) for a single randomly selected
655
653
worker.
656
654
657
-
But when the sample is large, outcomes and probabilities are roughly equal (by an application of the Law
658
-
of Large Numbers).
655
+
But when the sample is large, outcomes and probabilities are roughly equal (by an application of the law
656
+
of large numbers).
659
657
660
658
So for a very large (tending to infinite) population,
661
659
$\psi_t P^{10}$ also represents fractions of workers in
@@ -688,11 +686,11 @@ Such distributions are called **stationary** or **invariant**.
688
686
(mc_stat_dd)=
689
687
Formally, a distribution $\psi^*$ on $S$ is called **stationary** for $P$ if $\psi^* P = \psi^* $.
690
688
691
-
Notice that, post-multiplying by $P$, we have $\psi^* P^2 = \psi^* P = \psi^*$.
689
+
Notice that, postmultiplying by $P$, we have $\psi^* P^2 = \psi^* P = \psi^*$.
692
690
693
-
Continuing in the same way leads to $\psi^* = \psi^* P^t$ for all $t$.
691
+
Continuing in the same way leads to $\psi^* = \psi^* P^t$ for all $t \ge 0$.
694
692
695
-
This tells us an important fact: If the distribution of $\psi_0$ is a stationary distribution, then $\psi_t$ will have this same distribution for all $t$.
693
+
This tells us an important fact: If the distribution of $\psi_0$ is a stationary distribution, then $\psi_t$ will have this same distribution for all $t \ge 0$.
696
694
697
695
The following theorem is proved in Chapter 4 of {cite}`sargent2023economic` and numerous other sources.
698
696
@@ -767,7 +765,7 @@ For example, we have the following result
767
765
768
766
(strict_stationary)=
769
767
```{prf:theorem}
770
-
Theorem: If there exists an integer $m$ such that all entries of $P^m$ are
768
+
If there exists an integer $m$ such that all entries of $P^m$ are
771
769
strictly positive, with unique stationary distribution $\psi^*$, then
772
770
773
771
$$
@@ -801,11 +799,10 @@ First, we write a function to iterate the sequence of distributions for `ts_leng
801
799
def iterate_ψ(ψ_0, P, ts_length):
802
800
n = len(P)
803
801
ψ_t = np.empty((ts_length, n))
804
-
ψ = ψ_0
805
-
for t in range(ts_length):
806
-
ψ_t[t] = ψ
807
-
ψ = ψ @ P
808
-
return np.array(ψ_t)
802
+
ψ_t[0 ]= ψ_0
803
+
for t in range(1, ts_length):
804
+
ψ_t[t] = ψ_t[t-1] @ P
805
+
return ψ_t
809
806
```
810
807
811
808
Now we plot the sequence
@@ -814,12 +811,7 @@ Now we plot the sequence
814
811
ψ_0 = (0.0, 0.2, 0.8) # Initial condition
815
812
816
813
fig = plt.figure()
817
-
ax = fig.add_subplot(111, projection='3d')
818
-
819
-
ax.set(xlim=(0, 1), ylim=(0, 1), zlim=(0, 1),
820
-
xticks=(0.25, 0.5, 0.75),
821
-
yticks=(0.25, 0.5, 0.75),
822
-
zticks=(0.25, 0.5, 0.75))
814
+
ax = fig.add_subplot(projection='3d')
823
815
824
816
ψ_t = iterate_ψ(ψ_0, P, 20)
825
817
@@ -852,13 +844,9 @@ First, we write a function to draw initial distributions $\psi_0$ of size `num_d
852
844
```{code-cell} ipython3
853
845
def generate_initial_values(num_distributions):
854
846
n = len(P)
855
-
ψ_0s = np.empty((num_distributions, n))
856
-
857
-
for i in range(num_distributions):
858
-
draws = np.random.randint(1, 10_000_000, size=n)
859
-
860
-
# Scale them so that they add up into 1
861
-
ψ_0s[i,:] = np.array(draws/sum(draws))
847
+
848
+
draws = np.random.randint(1, 10_000_000, size=(num_distributions,n))
849
+
ψ_0s = draws/draws.sum(axis=1)[:, None]
862
850
863
851
return ψ_0s
864
852
```
@@ -917,7 +905,7 @@ The convergence to $\psi^*$ holds for different initial distributions.
917
905
918
906
919
907
920
-
#### Example: Failure of convergence
908
+
#### Example: failure of convergence
921
909
922
910
923
911
In the case of a periodic chain, with
@@ -1077,7 +1065,7 @@ Solution 1:
1077
1065
1078
1066
```
1079
1067
1080
-
Since the matrix is everywhere positive, there is a unique stationary distribution.
1068
+
Since the matrix is everywhere positive, there is a unique stationary distribution $\psi^*$ such that $\psi_t\to \psi^*$ as $t\to \infty$.
0 commit comments