2020/05/28

R - 実践編 4 時系列のモデル推定

時系列データに当てはまるモデルの推定を R で行ってみましょう。実践編 3 で用いたものと同じ時系列 TS を対象として、モデルを推定した様子を紹介したいと思います。

R - 実践編 3 時系列の単位根検定

R で実際に時系列データの単位根検定をしてみましょう。Phillips-Perron 検定と Augmented Dickey-Fuller 検定が使用できます。

R - 実践編 2 データフレームにおける計算、集計

分析対象データをデータフレームに読み込んだあと、本格的な分析に入る前に、計算や集計などを行う必要があることが多いかと思います。R での代表的なやり方を説明します。

R - 実践編 1 ファイルの読み込み、データフレームの加工

実際に R でデータ解析を行うために、CSV ファイル、TSV ファイルの読み込みを行ったときの知見をまとめました。

2020/05/27

都心にカブトムシいた!

先日、千鳥ヶ淵付近を散歩していたら、カブトムシを発見しました。

カブトムシ

こんな都心部にカブトムシがいるとは、と思いましたが、良く考えたら靖国神社や皇居にはいっぱい居るはずですね。そのあたりから飛んできたんでしょうか。それよりも、5月にこんなしっかりしたサイズのカブトムシが居ることの方が珍しいかもしれません。

いずれにしても珍しいものを見ました。

R - 入門本編 7章 ファイルからデータを読み込む

実践的には、プロンプトから data.frame() だの c() だのを駆使してデータフレームを構築することはまずありません。当然ながら、外部ファイルからデータを読み込んでデータフレームを構成することができますので、その方法を習得しておきましょう。

2020/05/24

アーキテクチャ設計のポイント

業務要件を実現するだけであれば、アーキテクチャ設計は不要です。ではアーキテクチャ設計では何をすべきなのか? 私がアーキテクチャ設計を行うときのポイントを備忘録的にまとめました。


2020/05/23

時系列分析 (5) - 状態空間モデル

AR, MA, ARMA, ARIMA, VAR, VARMA, VARIMA, ... などの時系列モデルは、観測値を直接モデル化するものでした。今回紹介する状態空間モデル (State-space model) の場合は、状態の時系列変化と、その状態から観測される値とに分けてモデル化する手法です。AR モデル、ARMA モデルなども状態空間表現を取ることができますし、状態空間モデルではより多様なシステムが記述できます。例えば、時変的な回帰係数を持つ回帰モデルなどが表現できます。
また、状態空間モデルではカルマンフィルタという強力なアルゴリズムによって、条件付き同時分布が効率よく計算できるため、ARMA のパラメータ推定を行うに際して、ARMA の状態空間表現に対してのカルマンフィルタによる推定が良く行われています。


時系列分析 (4) - 多変量の時系列分析

複数の変量が相互作用を持って発展していく形の時系列は珍しくありません。こういったデータは、各変量を個別にモデル化しようとしてもうまくいきません。このような場合は、ベクトル自己回帰 (Vector Autoregressive / VAR) モデルが有効な場合があります。VAR モデルは、AR モデルを多変量に拡張したものです。今回は VAR モデルについて簡単に触れたいと思います。


2020/05/22

時系列分析 (3) - モデルの推定と診断

いよいよ、時系列データからモデルを作ることを考えます。モデルを推定し、そのモデルの善し悪しを診断する方法を紹介します。

2020/05/21

時系列分析 (2) - 自己相関のモデル

ある時系列データが、自己相関検定を経て自己相関があると分かったら、その自己相関のモデル化に取り組む価値があります。自己相関のモデル化にあたっては、移動平均過程 (MA過程) と自己回帰過程 (AR過程) という2つの過程が基本となります。この2つの過程とその組み合わせである自己回帰移動平均過程 (ARMA過程) について見ていきましょう。

2020/05/20

時系列分析 (1) - 時系列の性質の把握

為替レートなどの価格時系列データの分析をよく行うので、統計学的に分析する場合の一般論について書いてみました。
理系大学の学部生が使う教科書に書いてあるレベルより少し丁寧に説明しているつもりです。

2020/05/19

R - 研究編 5 メモリ管理に関する関数

R のメモリ管理に関する関数をまとめて紹介します。

R - 附録 1 pkginfo() - パッケージ内のオブジェクトの一覧を表示する

R のパッケージ内のオブジェクトの一覧を表示する関数です。オブジェクトの名前とクラスとサイズを表示します。

2020/05/16

R - 研究編 1 評価機構

R は、C や Java で育ったプログラマには直感的には馴染み辛い、ある種独特な評価機構を持っているので、その振舞いを他のプログラミング言語と比較する形でまとめてみました。

MetaTrader4 設定情報取得スクリプト

MetaTrader4 で、口座情報、証拠金状況情報、時刻情報、マーケット情報、商品情報を取得するスクリプトを作りました。

AccountXxx() や MarketInfo() を使って情報を取得するスクリプトはけっこうあちこちで見掛ける、珍しくもなんともないものなのですが、一応いくつか特徴があります。

  • コード値を返すものは、その意味が分かるようなメッセージにしている
  • 日付・時刻はフォーマットしている
  • サーバ時刻とローカル時刻の時差を計算している
  • 単位のある数値は、単位を表記するようにしている
    • point とか % とか
    • 例えば JPY 口座で USDCHF の情報を見ているときに、各種金額が JPY なのか USD なのか CHF なのかを明示している
  • おそらく MetaTrader5 由来だと思うのですが、AccountInfoXxx() や SymbolInfoXxx() でしか拾えない情報があるので、それらも表示するようにしている

2020/05/06

R Version 4.0 リリース

4/24、R Version 4.0 がリリースされました。主要な変更点を説明します。

2020/05/05

日付処理 - 月末日を計算する

月末日を求めたいときは、だいたい月で条件分岐しますよね。1, 3, 5, 7, 8, 10, 12月なら31日、4, 6, 9, 11月なら30日、2月なら閏年判定をやって28か29日。

でも今回は、計算式で月末日を算出してみたいと思います。

日付処理 - MetaTrader - ニューヨークサマータイム判定 (第n日曜日以降判定)

ニューヨークのサマータイム期間は、以下のようになっています。

  • 2006年以前
    • 4月第1日曜日~10月最終日曜日
  • 2007年以降
    • 3月第2日曜日~11月第1日曜日

ある日がサマータイム期間に入っているかどうかを判定するためには、第n日曜日以降なのかどうかを調べる必要があります。
Java ならこうするだけなのですが、今回は MetaTrader での実現を考えました。MetaTrader ではサマータイム情報を持っていないため、算出してみようという話です。

Blogger - 本ブログのテーマ等の変更


いくつか理由があって、本ブログのテーマや、記事の構造などを変更してみました。1つは、トップページに表示される記事が少ないと思ったこと。他に、Google のインデックス登録が進まないのが、レスポンスが悪いせいではないかと思ったことや、Blogger テーマの XML の構造が複雑で管理しにくいと思ったことなどです。
ざっと、どんなことをやったか書いておきたいと思います。


2020/05/02

日付処理 - Java - ニューヨークサマータイム判定

JRE がちゃんとアップデートされていて、2007年のサマータイム開始・終了日の変更に対応していれば、これでOK。

Java - Generics のワイルドカードについて

Java 総称型における、型パラメータのワイルドカードを正しく理解しましょう。上限境界、下限境界についても説明します。Capture helper idiom についても触れています。

Java - Proxy でプロパティアクセスログを取る

java.lang.reflect.Proxy は、動的プロキシを生成するためのクラスです。
ここで言うプロキシとは、オブジェクトを包み込むような形で、かつ元のオブジェクトの型を維持したオブジェクトです。プロキシはメソッド呼び出しを代理で一旦受け取り、何らかの処理を追加できます。型は維持されるので、呼び出し元からはプロキシを介していることをあまり意識する必要がありません。

動的プロキシのサンプルとして、getter/setter へのアクセスをロギングするようなプロキシを生成するユーティリティクラスを作ってみました。

Java - 赤ちゃんに動画を見せているときに PC/Mac を操作されるのを防止する

昔 (8年ほど前)、娘に PC で DVD を見せているときに、キーボードをいじってしまっていろんなことが起きるのを防ぐために作成した Babyproof という Java アプリケーションです。
当時は Java 6 の時代で、Windows での使用しか想定していませんでしたが、今回は Java 14 ベースの Mac 版にリライトしてみました。Windows でも動くんじゃないかと思いますが、未確認です。

Java - 割り込み可能な反復処理スレッドを作る

Java にはスレッドに対する割り込み機構があります。
スレッドからスレッドに interrupt シグナルを送って、割り込みたいという意思を伝える仕組みです。しかし、どんなスレッドでも interrupt を送れば割り込める、というような簡単なものではなく、割り込まれる側のスレッドが、interrupt シグナルを受け取ったときの処理を正しく実装していなければ、割り込むことはできません。
具体的には、InterruptedException や Thread.interrupted() のハンドリングを正しく行う必要があります。
今回はサンプルとして、繰り返し処理をし続けるスレッドを割り込み可能として作るためのちょっとした基底クラスを用意しましたので、見ていきたいと思います。

2020/05/01

Java の文字列連結の変遷とベンチマーク

Java で文字列を連結するときは、+ 演算子ではなく StringBuffer や StringBuilder を使え、ということがよく言われてきました。
しかし、そうしなければならない理由や、しなくてもいいケース、あるいは + 演算子の方が良いケースもあることが、正しく理解されていないように思います。ベンチマークも交えて詳しく説明します。