2015-01-01から1年間の記事一覧

MD5(Message Digest 5)やSHA1(Secure Hash Algorithm 1)などのハッシュ値を計算したい時にはdigestパッケージ

R

ちょっと シミュレーションした結果がばらばらになってて、その値を再整理、及びグループ化する ために、そのグループのキーとしてハッシュ値を使おうかなって思ったんだ。そのためにはRcppで有名なDirk氏が開発されたdigestパッケージを用いる。 install.pa…

glmnetで多クラスのロジスティック回帰

R

誰かやってるようでなかったのでメモ。 glmnetはElastic Net(L1で罰則つけるlasso回帰、L2で罰則つけるリッジ回帰のまぜあわせ)ができるパッケージで、こいつを使うと多クラスのロジスティック(多項ロジスティック)回帰もできる。まずパッケージを突っ込…

ERROR:invalid initialization of non-const reference of typeを直す

C++

Visual Studio(MSVC)からGCCに移植する際に食らったエラーメモ。 #include <iostream> template<class T_> int hoge(int value, T_ & x) { return x(value); } struct PlusOne { int operator()(int x){ return x + 1; } }; int main() { std::cout << "hoge: " << hoge(1, PlusO</class></iostream>…

ggplot2のデフォルトの色(color, colour)パレット

R

これのgg_color_hue関数を見るんじゃ。ggplo2本 by Hadleyのにも載ってるらしい。 r - Emulate ggplot2 default color palette - Stack Overflow

常微分方程式をRで解く際の精度

R

という常微分方程式の解は で、これをRで数値的に確かめたい。 ついでに、数値積分の手法(ここではEuler法とRunge-Kutta4次)によって、どのくらい厳密解とずれるのかも調べる。Rで常微分方程式を解く際にはdeSolveパッケージを用いるのが楽。結果を算出す…

引数があったりなかったりする処理

R

今まで使ったことなかった。引数が存在しているか否かはmissing関数で判定するということだ。関数のデフォルト引数との使い分けをどうしたらいいのかはわからない。 f <- function(x, y) { if(missing(y)){return(x)} if(missing(x)){return(2*y)} x + y } …

C言語の関数ポインタを取るインターフェイスにRcpp::Functionを渡したい

R C++

最近だとtemplateの魔力を使ったC++を使えばこんなことする必要はないですが、古いC言語で書かれたライブラリなんかに、関数ポインタを引数として渡す必要がある場合のお話。以下のコードでは、関数ポインタ(typedef double(*Simulate)(double x))を引数にと…

線形代数ライブラリEigenの資料まとめ

C++

C++のテンプレートメタプログラミングを活用した線形代数ライブラリであるEigenに関連した資料へのLINKまとめ。 公式ドキュメント とりあえずここを探す。 Eigen: Main Page 特にクイックリファレンスガイド良く見る。 Eigen: Quick reference guide 講演資…

カイ二乗値を計算する

今まであまり考えないで検定用の関数に突っ込んでたんで実際に計算してみんとす。例が悪くてあれなんだが、以下のような取引戦略A・B、およびその勝敗のデータがあったとする。 > x <- matrix(c(110, 119, 200, 207), 2, 2) > rownames(x) <- paste0("Strate…

可視化で理解する中心極限定理(ベルヌーイ分布編)

こういう話がある。 可視化で理解する中心極限定理 #rstatsj 非常に素晴らしいので、指数分布じゃなくて、ベルヌーイ分布版をアニメーションにしてみた。 下図は ベルヌーイ分布(コイン投げでいうところの表が出る確率p=0.2)からサンプリングしたデータのヒ…

Rcppで定義するC++の関数に関数を渡すときはRcpp::FuncでOK

R C++

この辺 Calling R Functions from C++ http://dirk.eddelbuettel.com/papers/rcpp_intro_genentech_2015-01.pdf の例では1引数しか渡さないケースばかりだったので、複数引数の関数を渡せることに気がつかなかった。以下では適当な関数(someFunc)と、Rから…

Rcpp使ってパフォーマンスを測ったらに分類される…?

R C++

こういうどうでもいい関数があったとする。 hoge <- function(x) { result = x + 1; for(i in 1:10000000){ result <- result + 1; } result } この関数の実行速度+パフォーマンスを測るにはRprof関数を使って以下のように書く。 > Rprof(tmp <- tempfile())…

tidyrでダミー変数を作成する(赤ペン先生希望)

R

とりあえず必要なパッケージを読み込んでおく。 library(tidyr) library(dplyr) library(pipeR) 例えば、以下のようなデータを考える。 > df <- data.frame(id=1:10, feature=c(1,NA,2,2,2,NA,NA,3,3,1)) > df id feature 1 1 1 2 2 NA 3 3 2 4 4 2 5 5 2 6 …

ガウシアンを一様乱数でモンテカルロ積分した際の一様乱数の幅依存性

ガウシアンを、一様乱数でモンテカルロ積分した際の結果の、一様乱数の範囲依存性がみたい。こんな感じか。 f <- function(x){exp(-0.5*x^2)} N <- 10^3 L <- c(1:10, 20, 50, 100) y <- numeric(length(L)) for(i in 1:length(L)){ y[i] <- L[i]/N*sum(f(ru…

時系列データに対するブートストラップ法(ブロック・ブートストラップ法)について

あたまだし 検定やクロスバリデーション等への応用を企図した、サンプル数を水増しするための手法としてブートストラップ法がある。これをRで実行するにはsample関数を使って自分でリサンプリングするコードを実装するか、あるいはbootパッケージのboot関数…

MSYS2のbash上にgitのブランチ(branch)名を表示する

最近のWindowsにおけるLinuxコマンド環境として(俺の中で)熱いのが、MSYS2なのですが、そいつのコンソール上で、作業中のgitのブランチ(branch)名を出すためには、MSYS2がデフォルトのインストール先だとすると、.bashrcの中に source /c/msys64/usr/share…

リサンプリング(復元抽出)で積分値を評価する

復元抽出のアルゴリズム - My Life as a Mock Quant の応用かつ、「これで間違ってねぇよな?」という自分への備忘録。インポータンスサンプリングや測度変換とは微妙に分母の形式が違ってくるので間違いやすいんだ。 数式の整理 以下の積分I を計算すること…

何回も使うリストの要素は変数に突っ込んでおいた方がいい

R

当たり前のお話ですが、何回もアクセスするなら代入コスト払っても、一時変数使った方がよさげ。 > x <- list(list(a=1:3, b=100:103), list(a=2:4, b=200:203)) > system.time(sapply(1:10^6, function(i){ + force(x[[2]]$a[[2]]) + force(x[[2]]$a[[2]]) …

復元抽出のアルゴリズム

もくてき 粒子フィルタ(パーティクル・フィルタ)を実行する際には、粒子のウェイト(weight)に比例する確率でリサンプリングを実行する必要がある。そのためのアルゴリズムとコードを考えたい。ここでは手元にある各粒子のウェイトはK個の要素からなるベク…

クロス集計〜公式:dplyr + tidyr = (xtabs|(f)table)

R

特にやりたくはないんだけど、クロス集計をしなければならない状況がある。そんなときExcelを使ってもいいんだろうけど、レポーティングまで含めてRでやってしまいたい、あると思います。そんな時どうするかって話。Rには既に xtabs関数 (f)table関数 という…

RmdファイルからRコードを抜くのはpurl関数

R

例えば、以下のような内容のR Markdownファイル(hoge.Rmd)を用意していたとする。 げっへっへ、本文だぜー!! ```{r, cache=TRUE} #Rのコード x <- 1:10 ``` また、本文だぜー! ここから、Rのコードだけを抽出するためにはknitrパッケージにあるpurl関数を…

無敵(不死)タイムのある指数分布っぽい確率分布からのサンプリング

こいつ 非同次/確率的な強度λを持つ指数分布に従う確率変数τ(死亡/消滅時刻)の生成 - My Life as a Mock Quant の応用で、 時点1〜5までは無敵(不死) になるような確率分布からのサンプリングをやってみた。 具体的には lambda <- function(t){ifelse(t …

非同次/確率的な強度λを持つ指数分布に従う確率変数τ(死亡/消滅時刻)の生成

非同次な指数分布 非同次なポアソン分布ってのがある。日本語で定義がちゃんと載ってるページがなかったので、英語版のwikipediaを参照すると Poisson point process - Wikipedia が該当する。要するにこれは、今まで、一定だと思っていたポアソン分布の強度…

shinyappsのデプロォーイ(deploy)周りのメモ

R

はじめに 今、日本の国債金利を自動でデータ更新して可視化するようなもんを作ろうとしてるんですが https://teramonagi.shinyapps.io/JGBViewer/ こいつを作るときにあわあわした点をメモっておく。 認証名のトークン・パスワードは.Rprofileに書いておくの…

F#の配列(Array)を辞書(Dictionary)のキーにしちゃいかん!!代わりにタプル(tuple)を使おう

F#

すごいハマった。 let dic = new System.Collections.Generic.Dictionary<int option [], string>() dic.[[|Some 1; Some 1|]] <- "A" dic.[[|Some 1; Some 2|]] <- "B" dic.[[|Some 1; Some 3|]] <- "C" というコードをを実行しても System.Collections.Generic.KeyNotFoundExcepti</int>…

Enumの全要素をゲッツしたい

F#

こういうEnumがあったとする。 type Direction = | Up = 0 | Right = 1 | Down = 2 | Left = 3 その要素を全ゲッツしたければ System.Enum.GetValues(typeof<Direction>) とすればよい。System.Enumを叩けば、Enum周りのものはだいたい出てくると覚えよう。これも.NETの</direction>…

やってみよう分析!F#で強化学習(Q-learning, ε-greedy行動選択)

やってみよう分析!Rで強化学習(Q-learning, ε-greedy行動選択) - My Life as a Mock Quant やってみよう分析!おまけ 2 - 1: Excel VBAで強化学習(Q-learning, ε-greedy / softmax 行動選択) のF#実装版。強化学習自体の解説は上の記事読んどいたらいい。…

俺の無名関数が何かおかしい

R

適当な定数を定義する(なくてもいいんだけど、わかりやすさ的に定義したい)。 a <- 3 そして、以下のような無名関数かつクロージャーを使ったコードを実行してみる。 > g1 <- function(y){function(x){x+y+a}}(1) > g2 <- (function(y){function(x){x+y+a}…

(正規)分布の確率密度関数を乱数から推定する

すごい基本的なお話な気がするけど、数回は書き直しているのでメモっておく。ここでは 正規分布に従う乱数を生成して、それがある幅(dx)の中に入っているか否かをカウントして確率にする 正規分布の確率密度関数に幅(dx)をかけて確率を計算する の2つの方法…

F#におけるenumの扱い方とその変換(キャスト)

F#

F#でのenumの書き方がよくわからなかったんでメモ。基本、判別共有体と同様の書き方をするもんだと理解すればよい。特に、intならenum関数で指定したenumへキャストできるけど、そうじゃなかったらLanguagePrimitives.EnumOfValueを使う点がミソ。 //AB enum…