在 python 中生成非零均值 AR(2) 样本

问题描述 投票:0回答:1

我正在尝试使用 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)
python statsmodels autoregressive-models
1个回答
0
投票

你的问题让我有点困惑。由于您使用的是

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

© www.soinside.com 2019 - 2024. All rights reserved.