Skip to content

Commit f3c42f9

Browse files
Update rng usage in likelihood_var.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rs2tDEcDXLnfMnM88v8e1D
1 parent 370a58f commit f3c42f9

1 file changed

Lines changed: 14 additions & 12 deletions

File tree

lectures/likelihood_var.md

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ import quantecon as qe
6262
from numba import jit
6363
from typing import NamedTuple, Optional, Tuple
6464
from collections import namedtuple
65+
66+
rng = np.random.default_rng()
6567
```
6668

6769
## VAR model setup
@@ -217,7 +219,7 @@ def log_likelihood_path(X, model):
217219
218220
return log_L
219221
220-
def simulate_var(model, T, N_paths=1):
222+
def simulate_var(model, T, rng, N_paths=1):
221223
"""
222224
Simulate paths from the VAR model
223225
"""
@@ -227,13 +229,13 @@ def simulate_var(model, T, N_paths=1):
227229
228230
for i in range(N_paths):
229231
# Draw initial state
230-
x = mvn.rvs(mean=model.μ_0, cov=model.Σ_0)
232+
x = mvn.rvs(mean=model.μ_0, cov=model.Σ_0, random_state=rng)
231233
x = np.atleast_1d(x)
232234
paths[i, 0] = x
233235
234236
# Simulate forward
235237
for t in range(T):
236-
w = np.random.randn(m)
238+
w = rng.standard_normal(m)
237239
x = model.A @ x + model.C @ w
238240
paths[i, t+1] = x
239241
@@ -322,7 +324,7 @@ Let's generate 100 paths of length 200 from model $f$ and compute the likelihood
322324
# Simulate from model f
323325
T = 200
324326
N_paths = 100
325-
paths_from_f = simulate_var(model_f, T, N_paths)
327+
paths_from_f = simulate_var(model_f, T, rng, N_paths)
326328
327329
L_ratios_f = compute_likelihood_ratio_var(paths_from_f, model_f, model_g)
328330
@@ -384,8 +386,8 @@ Let's generate 50 paths of length 50 from both models and compute the likelihood
384386
T = 50
385387
N_paths = 50
386388
387-
paths_from_f = simulate_var(model2_f, T, N_paths)
388-
paths_from_g = simulate_var(model2_g, T, N_paths)
389+
paths_from_f = simulate_var(model2_f, T, rng, N_paths)
390+
paths_from_g = simulate_var(model2_g, T, rng, N_paths)
389391
390392
# Compute likelihood ratios
391393
L_ratios_ff = compute_likelihood_ratio_var(paths_from_f, model2_f, model2_g)
@@ -453,11 +455,11 @@ def model_selection_analysis(T_values, model_f, model_g, N_sim=500):
453455
454456
for T in T_values:
455457
# Simulate from model f
456-
paths_f = simulate_var(model_f, T, N_sim//2)
458+
paths_f = simulate_var(model_f, T, rng, N_sim//2)
457459
L_ratios_f = compute_likelihood_ratio_var(paths_f, model_f, model_g)
458460
459461
# Simulate from model g
460-
paths_g = simulate_var(model_g, T, N_sim//2)
462+
paths_g = simulate_var(model_g, T, rng, N_sim//2)
461463
L_ratios_g = compute_likelihood_ratio_var(paths_g, model_f, model_g)
462464
463465
# Decision rule: choose f if log L_T >= 0
@@ -683,12 +685,12 @@ def create_samuelson_var_model(a, b, γ, G, σ, stationary_init=False,
683685
684686
return model, G_obs, info
685687
686-
def simulate_samuelson(model, G_obs, T, N_paths=1):
688+
def simulate_samuelson(model, G_obs, T, rng, N_paths=1):
687689
"""
688690
Simulate Samuelson model
689691
"""
690692
# Simulate state paths
691-
states = simulate_var(model, T, N_paths)
693+
states = simulate_var(model, T, rng, N_paths)
692694
693695
# Extract observables using G matrix
694696
if N_paths == 1:
@@ -731,8 +733,8 @@ T = 50
731733
N_paths = 50
732734
733735
# Get both states and observables
734-
states_f, obs_f = simulate_samuelson(model_sam_f, G_obs_f, T, N_paths)
735-
states_g, obs_g = simulate_samuelson(model_sam_g, G_obs_g, T, N_paths)
736+
states_f, obs_f = simulate_samuelson(model_sam_f, G_obs_f, T, rng, N_paths)
737+
states_g, obs_g = simulate_samuelson(model_sam_g, G_obs_g, T, rng, N_paths)
736738
737739
output_paths_f = obs_f[:, :, 0]
738740
output_paths_g = obs_g[:, :, 0]

0 commit comments

Comments
 (0)