@@ -62,6 +62,8 @@ import quantecon as qe
6262from numba import jit
6363from typing import NamedTuple, Optional, Tuple
6464from 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
323325T = 200
324326N_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
327329L_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
384386T = 50
385387N_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
391393L_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
731733N_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
737739output_paths_f = obs_f[:, :, 0]
738740output_paths_g = obs_g[:, :, 0]
0 commit comments