サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
teramonagi.hatenablog.com
掲題の件、Tidy Evalというかrlangパッケージを、下記の記事をはじめいろいろ使いこなそうと試行錯誤してきた。 いい加減、俺なりの楽なやり方が見つかったのでまとめておく。 eval(parse(text=...))をモダンに書きたい - My Life as a Mock Quant 全ての引数の名前と値をlistとして取得したい - My Life as a Mock Quant rlangパッケージとかTidy Eval周りをお勉強するための日本語の参考資料は、油谷さんのこれしかほぼこれしかないと思う。 dplyr再入門(Tidyeval編) - Speaker Deck ちなみに俺はとっかかりとして、このHadleyの動画が一番しっくりきた。 www.youtube.com これを見た後 Programming with dplyr • dplyr を読めばなんとなく使いこな
glueパッケージのglue()は、いわばPythonでいう .format() を使えるようにするパッケージなわけで、以下のようにテンプレートの文字列 (ここでは"a is {a}" )を、その”傍にある”*1 変数で勝手に埋めてくれるので便利に使えるわけです。 > a <- 123 > glue::glue("a is {a}") a is 123 このテンプレートの文字列に指定する変数は関数の引数になっててもよくて、以下のように使うこともできるのです、おお便利だ! > f <- function(x) + { + hoge <- "aaa" + glue::glue("{hoge} + {x}") + } > f(123) aaa + 123 しかし、3連ドット(...)を引数にした場合、その中に所望の変数(ここではx)が入っていたとしても、うまく動きません。 > f <- func
ちゃんと一致するのかなって不安になったので適当なデータでチェック。 元になるデータはこの記事のものをそのまま流用している&何なのかは知らん。 Python編 その1 Pythonのコード import pandas as pd import sklearn.linear_model df = pd.read_csv("https://stats.idre.ucla.edu/stat/data/binary.csv") # rank列をone-hot encodingで0・1に変換&はじめの列は余計なので削除(drop_first=True)&元のrank変数もいらないのでカット df = pd.concat([df, pd.get_dummies(df['rank'], prefix='rank', drop_first=True)], axis=1) df.drop('rank', ax
これもr-wakalangに投げ込んで教えてもらった話なので、まずは簡単にまとめる。 基本的な使い方 適当な...を持つ関数を定義する。 f1 <- function(x, ...) { dots <- list(...) print(dots) } これに対して以下の実行結果からわかるように、引数にマッチしなかったもの(ここではx以外)がリストのdots変数として関数内で使えるようになっているのがわかる。 要するに、多言語でいうところの可変長変数のようなもんだ。 list(...)という書き方の原点がどこにあるのかは不明だが、下記参考資料にあるR Language Definitionにも載ってるし、まぁこれはこういうもんかと思っておく。 > f1("a", 3) [[1]] [1] 3 > f1("b", a=3, b=7) $a [1] 3 $b [1] 7 ...のマッチに関する注
とりあえず必要なパッケージを読み込んでおく。 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 6 NA 7 7 NA 8 8 3 9 9 3 10 10 1 このデータのfeature列の値を回帰分析なりにつっこみたいので、feature列の値毎にダミー変数(列)を作る必要がある。model.matrix関数なんかでイケるのかなと思ったけど、どうもそうではないっぽいので自分でやってみようということです。 とりあえず何も考えずにtidyrパッケージのspreadをすれば良さそうだぞと。NAはう
コンソールから以下を打つ。 > nvidia-smi -l Sat Jul 18 12:57:58 2015 +------------------------------------------------------+ | NVIDIA-SMI 346.46 Driver Version: 346.46 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |=============================
ロジックメモ ある確率変数とその写像で定義される2つの確率変数、特に確率変数の確率分布について考えたい。 の確率分布関数は と確率変数の確率分布関数を用いてあらわすことができる。ここで、は単調増加な関数であると仮定している。単調減少の場合は不等号の向きが逆になる。それ以外の場合は、単調増加・現象とみなせる区間に切って、確率を分けて計算し、最後に足しあげる操作が必要。 したがって、確率変数の確率密度関数は確率変数の確率密度関数を用いて と書くことができる。 Rで確かめる これを確かめてみよう。ここではと定義する。すると上式から とすることができる。ここで関数はを境に単調減少から単調増加関数へと変わるので、上のように項が2つ出てくる。上で言及した最後の"足しあげ"に相当するものだ。 従って確率密度関数は となる。更に(本来、何でもいいんだが)確率変数が標準正規分布に従うと仮定して上の結果を確か
あたまだし 掲題の件、最近出たわかりやすいデータ分析の入門書、 において 売上げ v.s. 気温 として回帰分析をしていたケースがあった。これが時系列データに対するやってはいけない回帰、すなわち、みせかけの回帰に相当するケースではないか?という話を久保先生としていた。 @teramonagi ときどき時系列データ解析を一般化状態空間モデル(GSSM)でごちゃごちゃ解析していて,あまり進捗はしてないのですが…まあ,わりと簡単な場合なら,GSSMで乱歩なのか直線まわりの正規乱数なのかは区別がつけられそうです…そこから先の「売上~気温」はまだですが…— 久保拓弥 (@KuboBook) 2015, 11月 1 ここでは、これを簡単なモデルのシミュレーションを通じてチェックしてみたい。 売上げ(平均値が正の正規分布)を気温(平均回帰過程)で回帰してみる 簡単のため、 売上げ: 各年度(日にちだと思
匿名知的集団であるホクソエムの親分が可視化で理解する「負の二項分布」 - ほくそ笑むで言及している負の二項分布ですが、シンクロニシティというか、同じ匿名知的集団ホクソエムなので当たり前と言えば当たり前なのですが、私も負の二項分布、特に負の二項分布のパラメータを推定するための関数であるglm.nb関数の挙動を調べる必要があったのでまとめる。数式変形も大体理解しているが、参考テキストや資料によって表記のギリシア文字のぶれがあるので、その辺どれを使うのがいいのか決めてからまとめたい。 ダミーデータの作成 glm.nb関数に食わせるためのダミーデータをrnegbin関数(負の二項分布に従う乱数を生成)作成する。もちろんシードは71だ。 ここで 負の二項分布の平均はexp(3.7*x+2)、形状パラメータは10.7 と適当に設定している。このあたりのパラメータの呼称が混乱の原因になるように思うが、こ
最近、ランダムフォレスト系のパッケージの高速実装が複数 CRAN - Package Rborist CRAN - Package ranger 出てきたので、それ調べておきたい。 各々install.packagesを使えば入るので入れておくこと。また旧型(randomForest)も比較対象にしておく。 まず、速度比較。Rboristだけが"ランダムフォレストの各木において、ノードの分割する際に何個特徴量使うか"のmtry引数がなく、それに近いpredProbオプションを適当に調整して設定している点に注意。これでいいのかあまり自信ない。データはirisだ。 library("Rborist") library("ranger") library("randomForest") library("microbenchmark") microbenchmark( ranger = rang
こういう話がある。 可視化で理解する中心極限定理 #rstatsj 非常に素晴らしいので、指数分布じゃなくて、ベルヌーイ分布版をアニメーションにしてみた。 下図は ベルヌーイ分布(コイン投げでいうところの表が出る確率p=0.2)からサンプリングしたデータのヒストグラム(灰色) 平均値の推定値(理論値、青い密度描画、中心極限定理から平均0.2, 標準偏差sqrt(0.2*0.8/データ数)の正規分布に従う) データから推定した平均値、およびその1σ信頼区間(赤色縦棒、1σ信頼区間は正規分布の1σにそのまま対応) となっている。 データが溜まってくると平均値の推定値の精度があがる(赤線の間隔 or 正規分布の標準偏差が縮まる)ことが可視化されてわかりやすい。 コードは以下で、ほぼ@hoxo_m氏の上記の記事のパクリ。ggplot2の勉強になりました。 library(animation) li
あたまだし 検定やクロスバリデーション等への応用を企図した、サンプル数を水増しするための手法としてブートストラップ法がある。これをRで実行するにはsample関数を使って自分でリサンプリングするコードを実装するか、あるいはbootパッケージのboot関数を用いればいい。 ただ、通常このようなリサンプリングにおいては、例えば、データのレコードの行番号を一様にリサンプリングするなど、"データの順序"を考慮したものとはなっておらず、これはデータの順序に意味があるデータ、特に(時)系列データに対して問題となってくるので、通常のブートストラップ法を適用することはできない。 時系列データに対するブートストラップ法に関しては、まず、大枠としてのブロック・リサンプリング法があり、その構成要素としてブロック・ジャックナイフ法、ブロック・ブートストラップ法が研究されてきた。ブロック・ジャックナイフ法はさほどメ
もくてき 粒子フィルタ(パーティクル・フィルタ)を実行する際には、粒子のウェイト(weight)に比例する確率でリサンプリングを実行する必要がある。そのためのアルゴリズムとコードを考えたい。ここでは手元にある各粒子のウェイトはK個の要素からなるベクトルだと仮定して、さらにそれを復元を許してN個リサンプリングするという状況で考える。 こんな面倒な状況を考えなくても、要するにこれは いろんな色の球が入ってる壺から、1個適当に球を取り出して、その色をメモって、球を戻す を複数回繰り返すことと同じで、高校生で習う確率の範囲で理解できる計算なわけだ。 アルゴリズム1(逆変換法) 逆変換法のアイディアを使って以下のようにするのが素朴なアイディアでコードも短い(後述)。 1: weightを確率に直し、その累積確率を計算し、これを{Qk, k=1,2,...K}とする 2: [0, 1]の実数値乱数rを
特にやりたくはないんだけど、クロス集計をしなければならない状況がある。そんなときExcelを使ってもいいんだろうけど、レポーティングまで含めてRでやってしまいたい、あると思います。そんな時どうするかって話。 Rには既に xtabs関数 (f)table関数 というクロス集計してくれる関数があるんだけど、こいつらの使い方覚えるのめんどくさい(毎度ググってる)し、特に他のデータハンドリング系関数との相性もよくはないので、全てdplyr&tidyrパッケージで済ませたい。 なので、以下、xtabs&table関数の結果と同じになるように、dplyr&tidyrで書いてみる。 使用するパッケージ 当然、dplyr&tidyrは使う。 library(dplyr) library(tidyr) dplyr, tidyrの使い方については plyr: データ分割-関数適用-再結合を効率的に - Hea
例えば、以下のような内容のR Markdownファイル(hoge.Rmd)を用意していたとする。 げっへっへ、本文だぜー!! ```{r, cache=TRUE} #Rのコード x <- 1:10 ``` また、本文だぜー! ここから、Rのコードだけを抽出するためにはknitrパッケージにあるpurl関数を用いると良い。documentation引数に応じて出力が変わる(チャンク・オプション、本文のコメント化など)ので、以下にその結果をメモる。 documentation=0 コマンド purl("hoge.Rmd", documentation=0) 結果 #Rのコード x <- 1:10 documentation=1(デフォルト) コマンド purl("hoge.Rmd", documentation=1) 結果 ## ----, cache=TRUE----------------
非同次な指数分布 非同次なポアソン分布ってのがある。日本語で定義がちゃんと載ってるページがなかったので、英語版のwikipediaを参照すると Poisson point process - Wikipedia が該当する。要するにこれは、今まで、一定だと思っていたポアソン分布の強度(普通のポアソン分布だと平均だと思っていたパラメータ)を時間や空間に依存させてみたりするってもんだ。あと、この拡張として、この自身を確率過程だと思っても以下の話は大体同じになる。正確な測度論の記述じゃないけど。 そして、 指数分布とポアソン分布のいけない関係 from tera monagi の資料に説明があるように、その非同次なポアソン分布の裏側には、非同次な指数分布が生まれてるんだろうなぁと考えることが出来るわけで、ここではそれを考えたい。具体的には、非同次な指数分布に従う乱数を生成するにはどうしたらよいの
はじめに 今、日本の国債金利を自動でデータ更新して可視化するようなもんを作ろうとしてるんですが https://teramonagi.shinyapps.io/JGBViewer/ こいつを作るときにあわあわした点をメモっておく。 認証名のトークン・パスワードは.Rprofileに書いておくのがよさげ 以下を参考に、.Rprofileファイル内に、optionなんかを使って設定しておくのがよいのかなと。これがベストプラクティスなのかは知らない。 RでNHKにログインして語学の進捗を取得する - 盆栽日記 optionを自分で追加できるってのがミソ。 > options(teramonagix=1:10) > options()$teramonagix [1] 1 2 3 4 5 6 7 8 9 10 今回の場合だと shinyapps::setAccountInfo( name='tera
「低金利ここに極まり」みたいな水準の国債市場、みなさんいかがお過ごしですか? どのくらいキテるのかを見るために、直近1年程度の10年ものの日本国債(JGB, Japanese Government Bond)の推移を可視化してみました。 RPubs - The time series of JGB Interest Rate(10Y)
はじめに 前々からDeep Learning系、特にその時系列への応用に興味があって、それにはリカレント・ニューラル・ネットワーク(Recurrent Neural Network, 以下RNN)ってのを理解する必要があるのは知っていたが、@yamano氏から @teramonagi こちらです。まずは手軽に使わせていただきました。 http://t.co/WTWmePJ0Hc— バイアス撲滅委員会 (@yamano357) 2015, 1月 8 というありがたいアドバイスを頂戴した。それに基づいてググりはじめると、Stuttgart(シュトゥットガルト)大学というドイツにある、たぶん日本でいう東工大的なポジションの大学が開発している、ニューラルネット関連の実装をたくさん詰め込んだライブラリ http://www.ra.cs.uni-tuebingen.de/SNNS/ が元々あって、それ
はじめに 蓮君というイケメン中国人クオンツストラテジストがいる。 Kun Ren (@renkun_ken) | Twitter 彼は、pipeRパッケージの CRAN - Package pipeR の作者だ。これに関する日本語のスライドとしては、 TokyoR42_around_chaining from TokorosawaYoshio pipeR の使い方【ノーカット版】 from hoxo_m を見ておくとよいだろう。 また、スライドではなく、Webページとしての資料の場合、日本語だと 【超訳】pipeR の使い方 #rstatsj が大変よくまとまっていてありがたい。英語で良いなら、蓮君自身が作成している Introduction | pipeR Tutorial のチュートリアルを追うのが良いだろう。 本論 無駄に前置きが長くなったが、やりたいことは簡単で、 Rって、list
仕事が早いことで有名なRStudioがまた新しいライブラリを出したようだ htmlwidgets: JavaScript data visualization for R | RStudio Blog ここで紹介されているhtmlwidgets for Rパッケージは、javascriptの可視化系ライブラリのRへのラッパーとなっているとのことだ。今のところ、 Leaflet for R - Introduction dygraphs for R networkD3 DT: An R interface to the DataTables library GitHub - bwlewis/rthreejs: Three.js widgets for R and shiny の5つが用意されている*1が、俺の興味があるところは時系列データの話なので、dygraphs for Rをいじりたい。
はじめに この記事はR Advent Calendar 2014の2日目の記事です。Rの話というより、Japan.Rに向けた前フリで、「登壇者の1人であるアリさん(@AriLamstein)は何者で、何がどうしてJapa.Rに参加されたのか?」というお話です。R Advent Calendar 2014に参加していてJapan.Rにまだ参加登録していない良い子の皆は、ここから先は読まなくていいから、とりあえずJapan.Rに参加登録しておくといいと思うんだ。 前フリ〜DTの価値はアリさんだけにアリはしない〜 Japan.Rのタイムテーブル 13:00〜13:30 受付 13:30〜13:45 オープニングトーク @gepuro, @0kayu 13:45〜14:15 choroplethrパッケージでコロプレスマップを簡単作成 @AriLamstein 14:15〜14:45 データサイエ
Rで二次元カーネル密度推定してみる。別に2次元が好きなわけではなく、これはたまたまだ。1次元の場合は、Rにデフォルトで組み込まれているstatsパッケージのdensity関数を使えばヨロシ。 デフォルトで入ってくるパッケージの調べ方とインストール MASSパッケージにあるkde2d関数を使いたいので、このパッケージを入れるんだが、MASSってデフォルトで入っていたような気もする。気もするが、どうだったかは覚えていない。こんな時、実際に入っているかいないかを調べてみる。RでロードされるデフォルトのパッケージはgetOption関数にdefaultPackagesを文字列として与えると取得できる。 > getOption("defaultPackages") [1] "datasets" "utils" "grDevices" "graphics" "stats" "methods" あぁ、入
頭出し ある半径Rの円内に一様分布する乱数を生成する時には注意しないといけないことがありますよというお話。所謂「一度はやってしまうミス」系でもある。この手の話は円に限ったわけではなく、円の高次元版である球、あるいは超球(次元>3)、あるいは任意の座標変換をかませてそこにヤコビアンが出て来るときでも同じ。 使うライブラリは以下の2つ。なければinstall.packages関数でインストールしておく。 library(ggplot2) library(dplyr) また、以下のように定数を2つ定義しておく。意味はコメントにある通りだ。 #サンプル数 N <- 10^4 #半径のサイズ R <- 4 本題 さて、問題のある半径Rの円内に一様分布する乱数を生成するにはどうしたらいいのかというと、非常に単純に考えた場合、以下のように(俺は)思考する。 X方向の成分として[-R, R]の間の一様乱数
foreachパッケージについて 遅い遅いと巷で噂のR君も並列化すればそれなりにパフォーマンスが期待できるわけです。Rにおいてどうやって並列化をするのかというと、foreachパッケージ&関数で並列化するのが手っ取り早くて、これはざっくりでいうと foreach(i in 1:3) %dopar%{ #ここに処理 } と書くだけで処理の並列化をすることが可能です。ここで%dopar%と書いている箇所を%do%に直せば並列化させないとして処理されるのも良いところだ。この裏側の仕組みとしてはforeachパッケージが各種並列化パッケージであるsnow/multicore/parallel/Rmpiへのフロントエンドとして機能していて、裏側ではそれらのパッケージに処理をブン投げる形になっているそうだ。詳しくは を読むとよい。上述の書籍を読むに、このforeachパッケージとparallelパッケ
例えば、二次元のランダムウォークシミュレーションの結果を返す関数を作る。 randomwalk2D <- function(){cbind(x=cumsum(rnorm(100)), y=cumsum(rnorm(100)))} これはまぁ、二次元平面上にプロットすると原点(0,0)を始点とする二次元のランダムウォークになる。 library(dplyr) randomwalk2D() %>% plot(type="l") 最近はこの手の数値シミュレーション結果を複数回走らせた結果を捌く場合、 一旦リストで受けておいて、その結果をdata.frameにdplyrパッケージのrbind_all関数を使ってdata.frameに倒してから可視化なりする ってのが、主に俺の中でのデファクトスタンダードになっている。例えば以下のように書くということだ。 library(dplyr) res <-
掲題の件、そういうことです。動的にインタラクティブに地図いじりたい!って人はgoogleVisパッケージでいいけど、静的な地図ならggmapなな印象だね!・・・と以下に書いてあった。 R help - googleVis plot and knitr/sweave というわけで、今、静的な地図に興味がある俺はggmapをちょいとお勉強。 日本を中心として地図を描く 基本にして、ここで紹介するget_map, ggmap関数がggmapパッケージのメイン関数となる。 get_map関数はGoogle Mapを筆頭とする4つのデータソースから地図を取得する関数になってて、source引数でデータソースを指定する。 また、それぞれにソースに対して直接アクセスする関数 - get_googlemap - get_openstreetmap - get_stamenmap - get_cloudma
俺たちの最強Rクオンツブロガー・Timely Portfolioことタイポさんの記事をみると、ファーマ・フレンチの3ファクターをサクッとゲットできるなんて方法を解説されていたので、パク真似てみた。上の記事で、彼はzooパッケージによる可視化をしていたので、こちらは負けじとrCharts使っておこうと思ったら、複数行のPLOT法わからなかったので、tsで妥協した。。。 #なきゃいれとく install.packages("Quandl") #ライブラリの読み込みと認証 library(Quandl) Quandl.auth("ここに認証コード") #月次データ取得(月次・ts)&tsとして描画 f <- Quandl("KFRENCH/FACTORS_D", type="ts", collapse="monthly") plot.ts(f, main = "ファーマフレンチの3ファクター推移
前回の記事:投資信託「eMAXIS」のデータを分析する−1(データ取得関数作成編) - My Life as a Mock Quant 前回書いたeMAXISのデータ取得関数をもうちょっと使いやすいように書き換えた。そしてついでにPerformanceAnalyticsパッケージの使い方を覚えたかったのでこのデータを分析してみたという内容。以下のサンプルコードでは xts PerformanceAnalytics パッケージを使用するので、それは別途インストールしておく必要がある。まずはデータ取得関数 library(xts) library(PerformanceAnalytics) #eMAXISのファンドデータを取得 GeteMAXIS <- function(){ #各資産の列名(英語),順に以下のものの略 #基準日:Date #基準価額 : Constant value #基準価
次のページ
このページを最初にブックマークしてみませんか?
『My Life as a Mock Quant』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く