我正在尝试使用 statsmodels 包生成非零均值 AR(2) 样本。但看起来,默认情况下我们无法生成非零均值样本。
有没有任何解决方法,在Python中。我只想生成正样本。
我当前的代码是
import numpy as np
from statsmodels.tsa.arima_process import ArmaProcess
rng = np.random.default_rng(12345)
ar_1 = np.array([2, -0.25, -0.25])
ar_2 = np.array([2, -0.5, -0.25])
ma1 = np.array([1])
ar1_proc = ArmaProcess(ar_1, ma1)
ar1_dat = ar1_proc.generate_sample(nsample=2*60*60, distrvs=rng.lognormal)
ar2_proc = ArmaProcess(ar_2, ma1)
ar2_dat = ar2_proc.generate_sample(nsample=2*60*60, distrvs=rng.lognormal)
你的问题让我有点困惑。由于您使用的是
istrvs=rng.lognormal
,这应该足以确保没有负值。
为了检查这一点,我已将您的代码封装在蒙特卡罗模拟循环中。
import numpy as np
from statsmodels.tsa.arima_process import ArmaProcess
n_sim = 100000 # Number of simulations
nsample = 2*60*60
rng = np.random.default_rng(15)
# ARMA process parameters
ar_1 = np.array([2, -0.25, -0.25])
ar_2 = np.array([2, -0.5, -0.25])
ma1 = np.array([1])
# Initialize variables to store the minimum value from each simulation
min_values = []
for _ in range(n_sim):
# AR(1) process
ar1_proc = ArmaProcess(ar_1, ma1)
ar1_dat = ar1_proc.generate_sample(nsample=nsample, distrvs=rng.lognormal)
# AR(2) process
ar2_proc = ArmaProcess(ar_2, ma1)
ar2_dat = ar2_proc.generate_sample(nsample=nsample, distrvs=rng.lognormal)
min_values.append(min(ar1_dat.min(), ar2_dat.min()))
print(min(min_values))
在我的机器上只花了一分多钟,结果是: 0.004882878764670938