2016年12月11日日曜日

『非伝統的金融政策 -- 政策当事者としての視点』宮尾龍蔵

日本の非伝統的金融政策の効果を構造ベクトル自己回帰モデルで分析
経済学者であり、日本銀行政策委員会審議委員を2010年~2015年の間務めた宮尾龍蔵氏による非伝統的金融政策の解説と政策の効果の実証分析をまとめたものです。
宮尾氏の分析手法は時系列分析の構造ベクトル自己回帰(Structural VAR)モデルを利用したものです。構造ベクトル自己回帰モデルとは、複数の経済変数の相互依存関係をシンプルな(主として各変数の過去の値に依存するような)連立方程式体系で描写し、各式の誤差項を「構造ショック」とみなします。
宮尾氏は構造VARモデルで日本の非伝統的金融政策の効果を分析した結果、「2001年から2015年初めまでの日本のマクロ経済データを用いて検証した結果、マネタリーベースの増加は、長期金利の低下と資産価格の上昇 ―株価の上昇やドル/円為替レートの上昇(ドル高・円安)― を通じて、日本のGDPを持続的に引き上げ、また消費者物価上昇率にも持続的なプラスの効果をもたらすことが確認された」と結論づけています。
一方で「本章で示される分析結果が、日本の非伝統的金融政策の効果に関して確定的な最終結果を表すというものではありません。今後のデータの蓄積によって、また潜在的に起こりうる経済構造の変化によって、実証的な評価は変わりうるものです。むしろ、ここでの検証は、シンプルかつ再現可能な科学的分析を示すことで、今後のより詳細な分析につながり実証結果が蓄積されていく、そして非伝統的金融政策の効果の全体像に少しでも近づく、そうした試みの1つとして位置づけられるものと考えます」と断り書きをしており、経済学者としての真摯な姿勢が感じられます。
分析結果については日銀審議委員だった立場上、全く効果がなかったという結論は出しにくいでしょうし、VARモデルは使う変数の選び方やデータ期間によって結果が変わってくるので、いろいろと議論はあるかと思います。ただ、一流の経済学者が日本の金融政策の実証分析の手法を分かりやすく説明し、分析結果の見方を解説してみせた意義は大いにあるのではないかと思います。
なお、構造ベクトル自己回帰(Structural VAR)を使った分析については、前著の『マクロ金融政策の時系列分析』の方がより詳細に書かれているので、興味を持たれた方は『マクロ金融政策の時系列分析』を読むことをお勧めします。

また、アカデミックな参考文献をきちんと紹介されているのも大変参考になります。

2016年11月3日木曜日

『資産運用の本質』 アンドリュー・アング

久しぶりにファイナンスで高価な本を購入。今月の証券アナリストジャーナルで紹介されるまで、この本のことは知らなかった。

「悪環境期の損失に対する見返りとしてのプレミアムをもたらすファクター投資が重要」という視点から資産運用の全体像を概観している。

序文がいきなり「投資において最も重要な言葉は「bad times(悪環境期)」である」と始まっていて、ああこの人は分かっているなと感じさせる。

「単に資産クラスのみに焦点を当てるという制約のあるアプローチ(通常は、平均・分散最適化を用いる)は、あまりにも粗っぽく、資産クラスがなぜリターンを生むのかという経済原理を見過ごしており、そして最終的には、問題が多すぎてあまり投資家の役に立たないことが分かった。そこでその代わりに著者が焦点を当てているのが「ファクター・リスク」である。それは資産クラスをまたがる困難な局面の組合せであり、我々が市場の混乱を切り抜けてそれがもたらす報酬を得ようとするならば、留意の中心に置かれるべきものである。
(中略)
ミューチュアル・ファンド、ヘッジファンド、プライベート・エクイティのほとんどについて、ファンド・マネージャーは専門能力を有してはいるが、平均的にはアセット・オーナーにほとんど利益をもたらさず、それがファイナンス理論に則った結論であることを明らかにする。ヘッジファンドとプライベート・エクイティは資産クラスではない。すなわち、いずれも、よく知られているファクター・リスクの単なる集合体であり、それが不透明な契約によって覆い隠されているにすぎない。ヘッジファンドは特にボラティリティ・リスクに晒されたものであり、またプライベート・エクイティはその大部分がレバレッジの掛かった上場株式といえる」

本書の主要テーマは次の三つ。
・アセット・オーナーは自身の悪環境期を認識する必要がある
・ファクターは、悪環境期の損失に対する見返りとしてのプレミアムをもたらす。ファクターが重要であり、資産クラスのラベルが重要なのではない
・委託先のマネージャーがさらなる悪環境期の組合せをもたらさないか、注視すべきである

アンドリュー・アングの『資産運用の本質』は、資産運用を本格的に勉強したい人にはぜひお勧めしたい本である。

アングらは2009年にノルウェー政府年金基金(Norwegian Government Pension Fund-Global)の資産運用におけるアクティブ運用の効果・意義について包括的な評価を行った。そのペーパーは公表されており、今日のスマート・ベータの議論の先駆けになったとも言われている。

"Evaluation of Active Management of the Norwegian Government Pension Fund – Global" Ang, Goetzmann, Schaefer(2009)(pdf)

"Review of the Active Management of the Norwegian Government Pension Fund Global" Ang, Brandt, Denison(2014)(pdf)

青木真也『空気を読んではいけない』 芸術家のストイシズム、ビジネスマンの合理性


この本を読むまで格闘家の青木選手のことは知らなかったのだけれど、読んでみてこんな人がいたのかと驚いた。青木選手は驚くほどストイックである。まるで芸術家のようだ。すべては格闘技で勝つために捧げられている。また練習からファイトマネーの交渉まですべてが自らの合理的な判断の下に行われており、優秀なビジネスマンのようでもある。
各々のテーマが4ページにまとめられている。各々の1ページ目に大きな文字でテーマが見出しとして短い文章で印刷されており、それについて後の3ページで青木選手がなぜそのように考えるのかという理由がまとめられている。例えば『誰も進まない道を行く』というテーマでは「逆張り」の発想のメリットについて語り、最後に次のように締めている。「周りが行く方にはもう美しい果実は残っていない。誰もが見ていない裏山にこそ、人知れず足を踏み入れるべきだ」。投資の世界にいる自分も大いに共感するところである。このテーマ以外でも、すべてのテーマにおいて共感した。ここまで共感したのは岡本太郎の『自分の中に毒を持て』以来二冊目だ。最後に本書全体を貫く青木選手の考えを引用しよう。

「幸せに生きることは難しいことではない。
空気なんか読まずに、自分で人生を選べばいいだけだ」

2016年10月10日月曜日

経済学、統計学、最適化のための数学の本

基本的な数学だと、『経済学で出る数学』尾山・安田、『経済と金融工学の基礎数学』木島・岩城あたりがお勧めでしょうか。

永田靖『統計学のための数学入門30講』もコンパクトにまとまっていて読みやすいと思います。

難易度が高めだけれど良い本だと思うのは入谷・久我『数理経済学入門』と吉田・島『経済学に最低限必要な数学』。どちらも味わい深い。タイトルに「入門」とか「最低限必要」とか入っていますけど、レベルは相当高いです。
 
動学マクロに必要な数学にポイントを絞った本としてこれもお勧め。『基礎から学ぶ動学マクロ経済学に必要な数学』 中田真佐

多期間最適化問題、動的計画法、ベルマン方程式を経済学の観点から説明した日本語の本は割と少ない気がします。ディキシット『経済理論における最適化』や西村清彦『経済学のための最適化理論入門』で触れられていて、この二冊はお勧めです。
英語ですが、多期間最適化問題、動的計画法、ベルマン方程式の経済学への応用はこれがお勧め。
最適化の数学は入門として『これならわかる最適化数学』金谷、高度なものに『非線形最適化の基礎』福島、『最適化の手法』茨木・福島、『凸解析と最適化理論』田中。

 最適化プログラムは『Fortran77 最適化プログラミング』茨木・福島。Fortranですが、他の言語への移植も簡単かと思います。
これにも準ニュートン法などのC++のサンプルコードがあります。CD-ROM付きがお勧め。
Numerical Recipes with Source Code CD-ROM 3rd Edition :
経済学における数値計算ではこの本がお勧めです。"Numerical Methods in Economics (MIT Press)" Kenneth L. Judd
機械学習のための最適化の本だと、この本が手に入りやすいと思います。



2016年9月22日木曜日

機械学習、深層学習、Pythonの本と論文

『Python 機械学習プログラミング』

Pythonのサンプルが多くて分かりやすい良い本だと思います。
サンプルコードを以下のGitHubのurlから取得できます。図や説明も読めます。

python-machine-learning-book


『Pythonで体験する深層学習』
買ったばかりでまだ読めてないですが、これも良さそうな本です。Pythonのサンプル・コードもいくつかあります。

『機械学習と深層学習』
機械学習だとライブラリが充実していることからPythonが使われることが多いですが、C言語でのコードがアルゴリズムの参考になります。

『深層学習』
深層学習の理論面で、非常に参考になります。実装用のコード等はありません。

『統計的学習理論』
機械学習の統計的な理論が詳しく説明されていて参考になります。数学のレベルがやや高いので初心者にはハードルが高いかもしれません。

『Python エンジニア養成読本』
Pythonの初心者がざっくりとPythonの全体像をつかむのに良い本だと思います。機械学習、深層学習とは直接は関係はありません。

『実践 機械学習システム』
図書館で借りてさらっと読んだ程度ですが、この本も良いと思います。コードはPythonです。

図書館で借りてさらっと読んだ程度ですが、この本も良いと思います。機械学習は関係ないです。Pythonの本。オライリーの本は全体に良い本が多いと思います。

《いくつかの論文》

"Deep learning" LeCun, Bengio, Hinton(2015)(pdf)
この分野を牽引してきた三人による"Nature"総括論文

"LONG SHORT-TERM MEMORY" Hochreiter and Schmidhuber(1997)(pdf)

"Learning to Forget: Continual Prediction with LSTM" . Gers, Schmidhuber, Cummins(1999)(pdf)

"Mastering the game of Go with deep neural networks and tree search" Hassabis et al.(2016)(pdf)
碁の世界チャンピオンを倒して一躍有名になったGoogleのAlphaGO

"Very Deep Convolutional Networks for Large-Scale Image Recognition" Simonyan and Zisserman(2015)

"Conversational Speech Transcription Using Context-Dependent Deep Neural Networks" Seide, Yu(2011)

2016年9月11日日曜日

Jupyter Notebookとmatplotlib

Jupyter NotebookはWebブラウザ上で実行できるPythonの環境を提供する。データ可視化のためのパッケージmatplotlibと組み合わせることでスムーズに実行結果を確認できる。

WindowsのAnacondaのメニューからJupyter Notebookを起動するとブラウザが自動起動し、http://localhost:8888/が表示される。


Newで新しいPython環境をブラウザ上に作る。


入力エリア「コードセル」にPythonのコードを入力し「Shift」+「Enter」で実行される。
 

matplotlibをNotebook上で描画するために、コードセルで次のmagic functionを実行する。

matplotlib inline

plot()関数にリストx,yを与え、show()関数でグラフを描画する。

 pyplot.style.use('ggplot')で別のスタイルのグラフを描画。スタイルには

  • dark_background
  • bmh
  • grayscale
  • ggplot
  • fivethirtyeight

がある。
random.randn()関数はNumPyの乱数生成関数の1つ。hist()関数はヒストグラムを作成。引数のbinsは区間の数。

なんと、Jupyter NotebookではLaTex記法で数式を記述できる。これはありがたい。「code」のところを「markdown」にする。


Pandas: Pythonのデータフレーム、データ加工

Pythonのデータフレーム、データ加工

Pandas

データフレームは行列のようなものと言えるが、行名と列名でデータにアクセスできる点が配列との違い。
カレントディレクトリに以下のsample1.csvファイルを作っておき、Pandasを使って読み込む。(カレントディレクトリは"%pwd"で分かる)

〈sample1.csv>
Team,Win,Draw,Lose
Japan,3,0,0
Iraq,2,0,1
Jordan,1,0,2
Palestine,0,0,3

------------------------------------------------
In [53]: import pandas
In [55]: df=pandas.read_csv('sample1.csv',index_col='Team')

(Pandasのread_csv()関数を利用してcsvファイルのデータを読み込む。第一引数に読み込むファイルパスを指定。index_colには行名として採用する列を指定)

In [56]: df  (読み込んだデータを表示)
Out[56]:
           Win  Draw  Lose
Team
Japan        3     0     0
Iraq           2     0     1
Jordan       1     0     2
Palestine    0     0     3

In [57]: df['Win']  (列名を指定したデータ表示)
Out[57]:
Team
Japan        3
Iraq         2
Jordan       1
Palestine    0
Name: Win, dtype: int64

In [60]: df[['Win','Lose']]  (複数の列名を指定したデータ表示)
Out[60]:
           Win  Lose
Team
Japan        3     0
Iraq         2     1
Jordan       1     2
Palestine    0     3

In [61]: df[df.Win >=2]  (指定列の値によるデータの絞り込み)
Out[61]:
       Win  Draw  Lose
Team
Japan    3     0     0
Iraq     2     0     1

In [62]: df.sum(numeric_only=True)  (データの合計)
Out[62]:
Win     6
Draw    0
Lose    6
dtype: int64

In [63]: df.to_json('sample.json',orient='index')  (JSON形式でのファイル出力)

-----------------------------------------------------------
クロス集計

以下のsample2.csvを読み込む

date,item,price
2016-09-01,apple,300
2016-09-01,apple,300
2016-09-01,orange,250
2016-09-02,orange,240
2016-09-02,orange,240
2016-09-02,banana,260

In [64]: df2=pandas.read_csv('sample2.csv')

(アイテム、日付ごとに価格を合計)
In [73]: df2.pivot_table(index=['date'],columns='item',aggfunc=[sum])
Out[73]:
              sum
            price
item        apple banana orange
date
2016-09-01  600.0    NaN  250.0
2016-09-02    NaN  260.0  480.0

(レコード数を合計)
In [74]: df2.pivot_table(index=['date'],columns='item',aggfunc=[len])
Out[74]:
             len
           price
item       apple banana orange
date
2016-09-01   2.0    NaN    1.0
2016-09-02   NaN    1.0    2.0


Pythonの数式処理用パッケージ SymPy

SymPyは数式処理の機能を提供

In [43]: import sympy

In [44]: x,y=sympy.symbols('x y')

In [45]: expr=2*x+y

In [46]: expr
Out[46]: 2*x + y

In [47]: expr.subs([(x,2),(y,3)])
Out[47]: 7

In [49]: expr-y
Out[49]: 2*x

数式展開
In [50]: sympy.expand((x+y)**2)
Out[50]: x**2 + 2*x*y + y**2

微分
In [51]: sympy.diff(x**2+2*x+1,x)
Out[51]: 2*x + 2

積分
In [52]: sympy.integrate(3*x**2+2*x,x)
Out[52]: x**3 + x**2

Pythonのデータ分析系パッケージ NumPyとSciPy

Pythonのデータ分析系パッケージ
多次元配列、線形代数の計算などを行うNumPyをAnacondaのIPythonで扱う。
AnacondaからIPythonを開くとこんな感じ

In [1]: import numpy (NumPyをインポート) In [2]: numpy.array([1,2,3]) (1×3のベクトルを作成) Out[2]: array([1, 2, 3]) In [3]: numpy.array([[1,3],[2,4]]) (2×2の行列を作成) Out[3]: array([[1, 3], [2, 4]]) In [4]: a=numpy.array([[1,3],[2,4]]) (aという2×2の行列を作成) In [5]: a[0][1] (aの0行1列の要素を抽出) Out[5]: 3

-------------------------------------------------
NumPyのstd()関数で標準偏差を求める。

In [6]: score=numpy.array([80,70,75,82,90])

In [7]: numpy.std(score)
Out[7]: 6.7409198185410872

-------------------------------------------------
NumPyのcorrcoef()関数で相関係数を求める。
In [8]: x=numpy.array([1,2,3,4,5])

In [9]: y=numpy.array([1,3,3,4,5])

In [10]: numpy.corrcoef(x,y)
Out[10]:
array([[ 1.        ,  0.95940322],
       [ 0.95940322,  1.        ]])



-------------------------------------------------
SciPyを使う。SciPyのeuclidean()関数を使ってユークリッド距離を求める。

In [11]: import scipy

In [12]: from scipy.spatial import distance

In [13]: x=[1,2,3]

In [14]: y=[1,2,4]

In [15]: distance.euclidean(x,y)
Out[15]: 1.0

-------------------------------------------------
SciPyで最近傍探索を行う。

In [16]: from scipy.spatial import KDTree

In [17]: x,y,z=(1,1,2),(5,3,7),(2,5,1)

In [18]: label=('x','y','z')

In [19]: tree=KDTree((x,y,z))

In [20]: tree.data
Out[20]:
array([[1, 1, 2],
       [5, 3, 7],
       [2, 5, 1]])

In [21]: new_data=(4,5,1)

In [22]: d,n=tree.query(new_data)

In [23]: print('分類結果は{0}です'.format(label[n]))
分類結果はzです

In [24]: print('距離は{0}です'.format(d))
距離は2.0です

2016年9月10日土曜日

Python はじめの一歩

機械学習のライブラリが充実しているようなのでPython(Windows版)を始めてみることにする。





Python HOWTO

科学計算に特に推奨したいPythonディストリビューションとしてContinuum AnalyticsのAnacondaがある。Anacondaは営利目的での使用を含め、完全に無償のエンタープライズ向けのPythonディストリビューションである。データサイエンス、数学、工学に不可欠なPythonパッケージが1つのユーザーフレンドリなクロスプラットフォームディストリビューションにまとめられている。IPython、Jupyter Notebookなども含まれる。

Anaconda

数式処理用パッケージ
Sympy

データフレーム、データ加工
Pandas

-------------------------------------------------------------------------
ブロック構造をインデントで書くPython、慣れないとやり辛い。慣れるといいんだろうけれど。

Pythonの関数定義、こんな感じ。関数を書き終わったときは改行を入力。
>>> def add(a,b):
... return a + b
...
>>> add(1,3)
4


-------------------------------------------------------------------------
FizzBuzz.pyというPythonファイルを作成し、Windowsのコマンド・プロンプトから実行。

def fizzbuzz(num):
return num

print(fizzbuzz(4))

これは、ただ「4」を表示するだけ。for分で1から100を表示。

def fizzbuzz(num):
return num

for num in range(1,101): 
print(fizzbuzz(num))

-------------------------------------------------------------------------
Pythonが検索するパスは「sys」をimportして「sys.path」と入力すれば確認できる。それに例えばDドライブのmypythonというディレクトリを追加したい場合
>>> import sys
>>> sys.path.insert(0,'D:\\mypython')

-------------------------------------------------------------------------
ディレクトリの作成と移動
>>> import os
>>> os.mkdir('spam')
>>> os.chdir('spam')
>>> os.getcwd()
'D:\\mypython\\spam'
>>> import sys
>>> sys.exit(1)


-------------------------------------------------------------------------
時間に関するライブラリはtimeとtimedate

>>> import time
>>> now=time.localtime()
>>> time.strftime('%Y-%m-%d %H:%M:%S',now)
'2016-08-11 18:25:17'

>>> import datetime
>>> now=http://datetime.datetime.now()
>>> now.isoformat()
'2016-08-11T18:28:01.281138'

>>> nextyear=datetime.datetime(2017,1,1)
>>> delta=nextyear-now
>>> delta.days
142
>>>

-------------------------------------------------------------------------
mathは数学関数、randomは疑似乱数のライブラリ。itertoolsはイテレータ生成関数、shutilは高レベルなファイル操作、jsonはJSONエンコーダとデコーダ。

-------------------------------------------------------------------------
Pythonは標準ライブラリに加えて便利なサードパーティ製パッケージも提供されている。それらはPyPIというサイトで情報共有されている。なおPyPIの読み方はパイピーアイ。


-------------------------------------------------------------------------
サードパーティ製パッケージをインストールするには、pipコマンドを使用する。
パッケージをインストールするときには、virtualenvコマンドを使用して独立したPython環境を構築することをお勧め。

-------------------------------------------------------------------------
一度Pythonを抜けて
D:\mypython>pip install virtualenv
Collecting virtualenv
Downloading virtualenv-(中略)

Successfully installed virtualenv-15.0.

virtualenvで独立した環境を構築しようとするとエラーが表示される。

OSError: Command D:\mypython\env\Scripts\python.exe - setuptools pip wheel failed with error code 1

anaconda3のライブラリに関するメッセージも表示されるが、詳細は今のところ不明。そのうち分かるでしょ。



-------------------------------------------------------------------------
Python用の統合開発環境PyCharm(Windows版)のダウンロード



PyCharm Professional版は有償で、30日間のトライアル期間がある。Community版は無償だが機能制限がある。
PyCharmをインストール

PyCharmで「print('hello world')」というPythonのコードを実行し、下の出力画面に「hello world」を表示させる。


-------------------------------------------------------
AnacondaからIPythonを開くとこんな感じ
%pwd でカレントディレクトリを表示
-------------------------------------------------------
Pythonのデータ分析系パッケージ

2016年7月3日日曜日

『最新 日本経済入門』 小峰 隆夫, 村田 啓子


日本経済についての良い入門書。データに基づいて日本経済を様々な視点からバランス良く見る目が養えると思います。紙は5版、kindleは4版まで出ているようです。私が読んだのは3版。

「日本経済を考えるということは、経済学の応用問題だと言えます。経済学が教えてくれる理論や経済的なものの考え方を踏まえて、日本経済の姿を見直してみると、それを踏まえないよりはずっと明瞭に経済の動きを理解することができます」

小峰氏が考える「経済の基本」は次の四つ。
・整理して考えよう
・データに基づいて考えよう
・「自由」が経済の基本
・一般均衡的なものの考え方をしよう

「整理して考えよう」

経済は一般に考えられているより範囲はずっと広い。こうした多様な経済問題を考えるとき、「誰が行うのか」という経済主体軸、「どんな経済活動を行うのか」という経済活動軸、「国内問題か国際問題か」という国境軸、「どんなタイムスパンか」の時間軸の4つで整理する。

「データに基づいて考えよう」

「経済問題を議論するときはできるだけ客観的なデータに基づいた議論を展開することが重要です。この「データに基づいて考える」ということは、経済を観察する上で大変重要なことです。これは、私の見るところ、経済学の本質的な部分に根差しているように思われます。」
物理などの自然科学と比べると、経済学などの、「社会科学という学問の大きな特徴は、「唯一の正解はない」ということであることが分かります。その証拠に、世の中には山のように経済的問題があふれていますが、論じる人によって問題解決のための処方箋は異なっています。これは社会科学は「実験ができない」という根本的な限界があるためだと思います。自然科学であれば、条件をコントロールした実験を行うことによって、因果関係を厳密に証明することができ、疑問に思った人は追試をすればよいのです。
しかし、社会科学ではそうは行きません。そこで、たくさんの議論がある中で、自分の主張を納得してもらうためにはどうしてもデータで裏付ける必要があるのです」
「経済問題というものは「誰もが論じることができる」という特徴があります。(中略)私は、「データで根拠を示しているか」ということは、その議論が単なる「茶飲み話」か、きちんとした「経済的な議論」かを区別する一つの基準となるものだと考えています。しかし、データは分かりやすいだけに、誤った結論を人々に信じさせる場合もあります。(中略)データを活用した議論は、切れ味の良い包丁のようなものです。正しく使えば美味しい料理を作るための便利な道具となりますが、使い方を誤るととんでもない凶器ともなるのです。データを説明しはじめると、「細かい議論はいいから、結論だけ言ってくれ」と言いたげな反応を示す人もたくさんいます。しかし、データを凶器に変えないためには、我々一人一人がデータの内容を吟味しながら経済の議論に加わっていくことが必要です」

「自由が経済の基本」

一定の前提の下、自らの利益の最大化を目指して行動することが、社会的に見ても資源の最適配分が実現するという価格理論は経済学の基礎だが、現実の日本経済を論じる場合も基礎となる。経済的な目的はインセンティブで誘導したほうが良いし、少ない規制、小さな政府が望ましい

「一般均衡的なものの考え方をしよう」

「「部分均衡的に考える」ということは、何か一部が変化した時、他の部分は一定として、その変化した部分の影響だけを考えるという考え方です。一方、「一般均衡的に考える」ということは、何かが変化したとき、できるだけ多様な変化の経路を考慮して、全てが変化し終わったときに何が起きるのかという考え方です。」
「「できるだけ部分均衡的な考え方をしないようにする」、これは経済問題を考えるときの一つの鉄
則だと思います」

そういう意味では、黒田日銀の「マネタリーベースを2倍にすれば、2年で消費者物価上昇率2%」というのは、「データに基づかない」、「部分均衡的な考え方」の典型例ですね。

2016年5月5日木曜日

時系列分析のお勧め本リスト


時系列分析のお勧め本のリストを作成しました。みなさんのお役に立てばうれしいです。

時系列分析の本は多くはないですが、それぞれ特徴があるので、ハミルトンを中心としつつ、自分の興味に合った本を読んでいけばいいのではないかと。サンプルコードがついていれば、より理解が深まります。
あと、洋書のpdf、なぜかまるまるネット上に落ちていることがあるので、ダメもとで探してみると見つかるかもです。
時系列分析なら、今でも北川源四郎『時系列解析プログラミング FORTRAN77』が最高だと思う。絶版ですが。改訂版の『時系列解析入門』でFORTRANのコードを省いてしまったのは残念。
この本のFortranのプログラムのライブラリをRを使って呼び出すパッケージを統計数理研究所が公表している。
『時系列解析プログラミング』にモンテカルロ・フィルタの章を追加して、FORTRANのコードを除いたもの。最近モンテカルロ・フィルタのコードを書くのに参考になった。
時系列解析といえばこれが鉄板。ハミルトンの上下さえ押さえておけば十分ではある。
入門編的な本
カルマン・フィルターの理論的説明としては優れている。

赤池先生の古典的名著。AIC誕生のきっかけになったセメント・キルンの制御についてまとめられています。Fortranのコードもついています。 

2018年の本。Rで実装できます。カルマンフィルタだけでなくMCMCや粒子フィルタも。

これも2018年の本。RとStanで実装できます。
Matlabのサンプルコードを出版社(朝倉書店)のウエブサイトでダウンロードできる。粒子(モンテカルロ)フィルタのコードを書くのに大変参考になった。お勧め。
これもすごく良い本。絶版。STAMPのサンプルコードがネット上にあるはず。しかしAmazonの中古高過ぎでしょ。
北川の本をRで再現。
これもよい本。カルマンフィルタと非線形カルマンフィルタ。
VAR, Garch等。カルマンフィルタはなし。 S+FinMetricsは高くて個人では買えない。
VAR, Garch等。カルマンフィルタはなし。EViewsの学生向けなら個人でも買える。
1変量のARMAモデル等を丁寧に解説。入門にいいかも。
PcGiveはOx言語で書かれている。日本だとOxってあまり使われてないんですかね。
ITSMというソフトがついているけど、これも絶版ですねえ。
私は紙の本を買ったのだけれど、ネット上にPDFがある。

これも良い本。レジーム・スイッチング・モデルならこれ。GAUSSのコードが参考になる。
著者のウェブサイトにもGAUSSのコードが。
わりと有名な本。
国友直人、山本拓が翻訳。

さすがにちょっと古くなってきましたかね。
沖本先生の本、比較的新しくて評判がいいです。私はまだ持っていない。
個人的に、いろいろと参考になった本。谷崎久志氏のウエブサイトで印刷不可なpdfを読める。
私は持っていないのだけれど、ツイッターで紹介されました。
時系列分析の実務への応用例(1)

時系列分析の実務への応用例(2)。最後の章のAICの赤池弘次氏の「時系列解析の心構え」が味わい深い。

以上が時系列分析についての本のリストです。時系列モデルの選択に使われるAIC等の情報量規準についても何冊かあるのでご紹介します。
 
時系列モデルの選択で使われる情報量規準についての統計学の本。時系列分析の本ではない。
一般化した情報量基準についての統計学の本。時系列分析の本ではない。
情報量規準による統計解析の入門書。前の二冊より一般向けなので、これを先に読んだ方が理解が早いかも。