質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1619閲覧

ARIMAモデルで予測の信頼区間を図示したい

multinguish

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/14 14:38

https://momonoki2017.blogspot.com/2018/03/python10.html
こちらのサイトを参考に、秒刻みで記録されたflow1のARIMAによる予測を行っています。

python

1import statsmodels.api as sm 2import pandas as pd 3import numpy as np 4import requests 5import io 6from matplotlib import pylab as plt 7%matplotlib inline 8# グラフを横長にする 9from matplotlib.pylab import rcParams 10rcParams['figure.figsize'] = 15, 6 11 12row_data = pd.read_csv('2020.1.13sec.csv', encoding = "SHIFT-JIS") 13 14# float型にしないとモデルを推定する際にエラーがでる 15row_data.flow = row_data.flow.astype('float64') 16row_data.flow1 = row_data.flow1.astype('float64') 17# datetime型にしてインデックスにする 18row_data.time = pd.to_datetime(row_data.time) 19data = row_data.set_index("time") 20# 線形補間 21data['flow1'].interpolate(method='linear', inplace=True) 22 23# 階差を取る 24diff = data.flow1.diff() 25diff = diff.dropna() 26 27# Split data into train / test sets (約50000データあり) 28train = data.iloc[:len(data)-10000] 29test = data.iloc[len(data)-10000:] 30 31from statsmodels.tsa.arima_model import ARIMA 32model=ARIMA(train['flow1'],order=(5,1,2)) 33results=model.fit() 34 35start=len(train) 36end=len(train)+len(test)-1 37pred=results.predict(start=start,end=end,typ='levels').rename('ARIMA Predictions') 38pred.plot(legend=True) 39test['flow1'].plot(legend=True)

イメージ説明

python

1predict_dy = results.get_prediction(start ='2021/1/14 3:41:01', end='2021/1/14 6:27:40') 2type(predict_dy)

AttributeError Traceback (most recent call last)

<ipython-input-50-d23d818922c4> in <module>
----> 1 predict_dy = results.get_prediction(start ='2021/1/14 3:41:01', end='2021/1/14 6:27:40')
2 type(predict_dy)
~/opt/anaconda3/lib/python3.8/site-packages/statsmodels/base/wrapper.py in getattribute(self, attr)
34 pass
35
---> 36 obj = getattr(results, attr)
37 data = results.model.data
38 how = self._wrap_attrs.get(attr)
AttributeError: 'ARIMAResults' object has no attribute 'get_prediction'

ここで行き詰まってしまいます。
最終的には

python

1plt.figure(figsize=(8, 4)) 2 3plt.plot(test, label="Actual") 4plt.plot(predict_dy.predicted_mean, c="b", label="model-pred", alpha=0.7) 5 6plt.fill_between(predict_dy_ci.index, predict_dy_ci.iloc[:, 0], predict_dy_ci.iloc[:, 1], color='g', alpha=0.2) 7plt.legend(loc='upper left')

を用いて予測の信頼区間を塗りつぶした図を目指しています。
get_predictionがうまくいかない理由がわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

arima_modelじゃなくてarima.modelにはget_prediction()があるみたいです
statsmodels.tsa.arima.model.ARIMAResults.get_prediction

投稿2021/01/14 23:11

jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

multinguish

2021/01/15 06:13

無事解決しました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問