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

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

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

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

Q&A

0回答

1094閲覧

偏自己相関の値が-1を下回ってしまう

a18.

総合スコア13

Python

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

0グッド

0クリップ

投稿2021/10/11 06:27

編集2021/10/11 07:59

#概要
アイスクリームの売り上げの月ごとデータがあり、コレログラムを書いたところ偏自己相関の値がおかしいです。
-40くらいになってしまう点が一つあります。
どこがおかしいのでしょうか?
以下のコードでやっていることは、

データを読み込んでfloat型にする。
最初の100時点のデータの差分を取って、AICとBICが最小になる次数を表示。
(p,q)=(2,2)でモデルを当てはめて、偏自己相関のコレログラムを作成。

という感じです。
(一番最後のlagsを指定しなければ自動的に20になり、コレログラムはおかしくありません。)

csvファイルを取ってきたURLは以下です。
アイスクリームの売り上げデータのURL
csvファイルはおかしくないと思います。最後にdf_iceの概要となるものを追加で示しました。

python

1import numpy as np 2np.random.seed(555) 3import matplotlib.pyplot as plt 4import pandas as pd 5from statsmodels.graphics import tsaplots 6from statsmodels.tsa import stattools 7from statsmodels.tsa.arima_model import ARMA 8 9df_ice = pd.read_csv('icecream.csv',encoding='shift-jis',skiprows=[0]) 10y = pd.Series(df_ice.アイスクリーム.values, 11 index=pd.date_range('2003-1', periods=len(df_ice), freq='M')) 12y = y.astype('float') 13y

2003-01-31 331.0
2003-02-28 268.0
2003-03-31 365.0
2003-04-30 492.0
2003-05-31 632.0
...
2012-08-31 1332.0
2012-09-30 849.0
2012-10-31 515.0
2012-11-30 326.0
2012-12-31 414.0
Freq: M, Length: 120, dtype: float64

python

1y_diff = y.diff()[:100].dropna() 2 3# 次数選択の指標にAICとBICを選択 4info_criteria = stattools.arma_order_select_ic(y_diff, ic=['aic', 'bic']) 5# AICとBICが最小になる次数をそれぞれ表示 6info_criteria.aic_min_order, info_criteria.bic_min_order

((2, 2), (2, 2))

python

1# p=2, q=2のARMAモデルのインスタンスを生成 2model = ARMA(y_diff, (2, 2)) 3# y_diffに対してモデルを当てはめる 4results = model.fit() 5# 残差の抽出 6res = results.resid 7# 偏自己相関 8tsaplots.plot_pacf(res, lags=40) 9#lagsの指定なしだと自動的に20になり、コレログラムはおかしくならない

###df_iceの概要

python

1df_ice = pd.read_csv('icecream.csv',encoding='shift-jis',skiprows=[0]) 2df_ice
年 月 アイスクリーム

0 2003 1 331
1 2003 2 268
2 2003 3 365
3 2003 4 492
4 2003 5 632
... ... ... ...
115 2012 8 1332
116 2012 9 849
117 2012 10 515
118 2012 11 326
119 2012 12 414
120 rows × 3 columns

python

1df_ice.アイスクリーム.plot()


######コード一部引用

時系列解析―自己回帰型モデル・状態空間モデル・異常検知 ― 島田 直希著

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

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

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

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

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

BeatStar

2021/10/11 07:36 編集

プログラミングっていうのは『書いて終わり』ではありません。 デバッグという処理も含みます。 まずは自分でデバッグしてみてください。 それにCSVファイルを読み込んでいるようですが、CSVファイルの中身への言及がありません。 場合によっては解決不能になります。 たとえば「そもそもデータがおかしい」とか「(CSVfファイルの)書式がおかしい」とか「単なる(脳内の)計算ミス」とかもあり得ます。
a18.

2021/10/11 07:57

そうですね、もちろん書いて終わりとは自分も思っていません。 色々試しましたが、試したことをどこまで書くべきなのか迷っていました。 csvファイルを改めてダウンロード、csvファイルを開いてみて中身の確認、(p,q)の値を変えて実行、lagsの値を変えて実行 等です。 csvファイルについてですが、質問編集で追記しましたが、ファイル自体におかしなところはないと思います。
BeatStar

2021/10/11 08:00

> そうですね、もちろん書いて終わりとは自分も思っていません。色々試しましたが... それならすべて書きましょう。 回答者は質問者じゃないので、試したことすら知りません。 仮に「調べてから質問している」場合でも、質問者が「こういう風に試したが、これはこういう結果になった」とかのように提示すると、回答者はあらゆる可能性を一つ一つ候補から外していけます。 そうすると回答者は少ない労力で回答できます。そうすれば回答がしやすいので回答する人が出てきますよ。
a18.

2021/10/11 08:04

確かにそうですね。 自分がこのサイトで回答者側に立ったことが無かったこともあり、 想像力や配慮が足りなかったと今更ですが思っています。 ありがとうございます。
BeatStar

2021/10/11 08:07

ファイルが読み込めていない可能性は無いですかね?( たまにある) あるいは読みこんだファイルが実際には別のファイルだったり。
a18.

2021/10/11 08:15

追加で編集した、「df_iceの概要」にある通りの結果です。 読み込みの段階ではエラーは無いですし、plotしてもおかしなグラフではないように見えます。 アイスクリームの売り上げなので、年での周期性があることが見て取れ、10年分のデータなので大きな山がきれいに10個あります。 ファイル名や、他のファイル名や、パスを確認しましたが間違っていなさそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問