

時系列データ分析のstatsmodelsに関する質問です。

以下のコードを実行したところ、エラーが出てしまいました。

sigma引数が使用できるようなstatsmodelsのバージョンを教えていただけないでしょうか。  
使用しているPythonのバージョンは3.10.11、statsmodelsのバージョンは0.13.5になります。

よろしくお願いいたします。

**エラーメッセージ:**

[code]

    TypeError                                 Traceback (most recent call last)
    Cell In[2], line 12
          8 dist = lambda n: np.random.randn(n)  # 正規分布,  引数 n はダミー
          9 #dist = lambda n: np.random.standard_t(3, size=n)  # t 分布
         10 
         11 # 知りたい信号成分
    ---> 12 sig0_all = arma_generate_sample(ar, ma, nobs_all, sigma=1, distrvs=dist, burnin=500)
         14 # トレンドの信号（1次式型）
         15 coef_a, coef_b = 0.05, 4
    
    TypeError: arma_generate_sample() got an unexpected keyword argument 'sigma'
    
[/code]

**ソースコード:**

[code]

    import numpy as np
    import pandas as pd
    
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    import statsmodels.api as sm
    from statsmodels.tsa.arima_process import arma_generate_sample
    from statsmodels.tsa.arima_model import ARMA, ARIMA
    
    from scipy import stats
    
    np.random.seed(123)
    FLAG_fig = False
    
    ar = [1, -1.5, 0.7]
    ma = [1.0, 0.6]
    
    nobs = 1000
    nobs_test = 100
    nobs_all = nobs + nobs_test
    
    dist = lambda n: np.random.randn(n)  # 正規分布,  引数 n はダミー
    #dist = lambda n: np.random.standard_t(3, size=n)  # t 分布
    
    # 知りたい信号成分
    sig0_all = arma_generate_sample(ar, ma, nobs_all, sigma=1, distrvs=dist, burnin=500)
    
    # トレンドの信号（1次式型）
    coef_a, coef_b = 0.05, 4
    trend0_all = coef_a*np.arange(len(sig0_all)) + coef_b
    
    # 出力信号（トレーニングデータ＋テストデータ）
    y0_all = sig0_all + trend0_all
    
    index = pd.date_range('1/1/2000', periods=nobs_all, freq='D')
    y_all = pd.Series(y0_all, index=index)
    
    #信号だけのデータを作成
    sig_all = pd.Series(sig0_all, index=index)
    
    y = y_all[:nobs]      #観測データはｙ
    y_test = y_all[nobs:] #予測精度を見るためのテストデータはy_test
    
    y.tail(5)
    
    y.plot(color='b')
    y_test.plot(color='c')
    
    if FLAG_fig: plt.savefig('fig_ARIMA_ident_signal_trend.png')
    plt.show()
    
[/code]


CC BY-SA 4.0
2023-06-17T05:05:14.073
95272
2023-06-17T10:33:13.777
2023-06-17T10:33:13.777
3060
58348
question
python 機械学習
時系列分析のstatsmodels でエラー TypeError: arma_generate_sample() got an unexpected keyword argument 'sigma'


お望みの結果かどうかはわかりませんが、何点かコードを修正して結果が得られました。

metropolisさんのコメントどおり、sigmaをscaleに変えて実行してみました。

[code]

    sig0_all = arma_generate_sample(ar, ma, nobs_all, sigma=1, distrvs=dist, burnin=500)
    
[/code]

↓

[code]

    sig0_all = arma_generate_sample(ar, ma, nobs_all, scale=1, distrvs=dist, burnin=500)
    
[/code]

エラーが発生したため、以下のとおり変更しました。

[code]

    dist = lambda n: np.random.randn(n)  # 正規分布,  引数 n はダミー
    
[/code]

↓

[code]

    dist = lambda size: np.random.normal(loc=0, scale=1, size=size) 
    
[/code]

以上の変更により結果がでました。  
どうしてエラーが出たのか原因はわかっていません。

metropolisさんの、私の回答へのコメントのとおり↓修正して実行したところ同様に結果が出ました。

[code]

    dist = lambda size=None: np.random.randn(*size)
    
[/code]

* * *

確認にしようしたバージョン  
Python 3.10.12  
statsmodels 0.13.5

【実行結果】

[![実行結果](https://i.stack.imgur.com/QhUyG.png)](https://i.stack.imgur.com/QhUyG.png)

【発生したエラー】

* * *
[code]

    TypeError                                 Traceback (most recent call last)
    <ipython-input-5-8ba787bd6d92> in <cell line: 27>()
         25 
         26 # 知りたい信号成分
    ---> 27 sig0_all = arma_generate_sample(ar, ma, nobs_all, scale=1, distrvs=dist, burnin=500)
         28 
         29 # トレンドの信号（1次式型）
    
    /usr/local/lib/python3.10/dist-packages/statsmodels/tsa/arima_process.py in arma_generate_sample(ar, ma, nsample, scale, distrvs, axis, burnin)
        116         newsize = tuple(nsample)
        117         fslice = tuple([slice(None)] * np.ndim(newsize))
    --> 118     eta = scale * distrvs(size=newsize)
        119     return signal.lfilter(ma, ar, eta, axis=axis)[fslice]
        120 
    
[/code]


CC BY-SA 4.0
2023-06-17T10:00:18.303
95276
2023-06-17T10:18:49.483
2023-06-17T10:18:49.483
35558
35558
95272
answer