思っちゃったんだからしょうがない

統計学を学ぶ傍でひっそりとやっていきます。 #statistics #R

Rでcaretがインストールできない人へ

caretを使おうと思ったらそもそもインストールエラーで丸一日潰した話

caret便利そうなので一通り触ってみるかと思ってインストールしたらエラーorz

fatal error: not found omp.h

色々調べまくってOpenMPをちゃんと呼び出せてないらしいということまでが分かったが 解決できず丸一日を費やしてしまってもうRは終わったんやとおもってた。

次の日気を取り直してまた調べてたら、以下の記事を見て、

qiita.com

まさかそもそもhomebrewからRをインストールしたせいか・・・、と疑い 一旦homebrewからRを抹消して直でCRANからインストールしてみたら・・・、

普通に動いた

しばらくはhomebrew経由でRをインストールするのはやめようと思いました。

検証はしていないのですが、 Rで not found omp.h というエラーが出ていてhomebrew経由で インストールしているからは一旦やめてみるのが良いかもしれません。

prettydocパッケージを使ってみた

Rstudio、Rmarkdownで資料作成するとき、いい感じのテンプレート提供してくれるパッケージを使って見ました。

 

>|r|
install.packages("prettydoc")
||<

これを走らせておいて、

Rstudioで file ->  New file -> R markdown -> From Template からPretty Document が2種類追加されている。どちらかを選んで作成するだけ。

 

そんなに堅苦しくない報告書やレポートを作るのに便利かも!

開発者のデモページはこちら

Creating Pretty Documents from R Markdown

R で Nelder and Mead 法を実装してみる(勉強のため)

久しぶりの更新です。事情によりNelder and Mead法を実装する必要が出たのでやってみました。参考文献はNelder and Mead(1965)と

ネルダー–ミード法 - Wikipediaです。お世話になりました。

ネルダーミード法はRのoptim関数で使われていたり、調べたらRのパッケージとしても公開されていたり、別に自分で実装しなくてもいい人はたくさんいると思いますが、私はそういうわけにも行かなかったのでやりました。そしてついでにブログに書きます。

 

この方法の一番の特徴は導関数を求めなくてもいいという点ですね。実行するために必要なのは

  • 関数形: y=f(x)
  • 初期値: x_{init}
  • パラメータ  \alpha, \gamma, \rho, \sigma
  • 定量 criterion

になります。今回のシミュレーションでは論文のResultの1個目としました。(下記)

  •  f(x) = 100(x_2 - x_1^2)^2 + (1 - x_1)^2
  •  x_{init} = (-1.2, 1)
  •  \alpha = 1, \gamma=2, \rho = 0.5, \sigma=0.5
  •  criterion = \sqrt( \sum_{i=1}^{n+1} ( f(x_i) - \bar{ f(x_i) } )^2 )  

関数定義とサンプルコードも載せておきます。でも初期値依存するので場合によっては正解に収束していないケースも・・・。

 

Nelder and Mead 1965 for R

 

Sample Nelder and Mead 1965 1 for R

Rで日本地図を書く(たぶん最終回)

一体Rで何をしたいんだというのは置いといて、自分の作業内容でRで日本地図を柔軟に書きたいなぁと思ったので、これまで書いてきたコードをちょこっと改良しました。多分今回作ったのでだいたいやりたいことはできるはずなので最終回のはず。

一応本の方もちゃんと読み進めています。一応。

 

今回ので何ができるようになったのかというと、

  • 指定した都道府県のみをかけるようにした
  • 描画範囲を自動と任意とで使い分けができるようにした

の2点です。

まずは、以下のコードで世界地図がのデータから日本のデータを引っ張ってきます。この時に全部描く用と県毎に描く用のデータを分けて作っています。データについては前回か前々回のブログを参照ください。

gist5ec1f0eec3d282aa9db3bcb9892d486e

 

これでmap.dataとmap.Allというリストができました。これらを使ってプロットする関数を次のように2Dと3Dに分けてそれぞれ定義します。

 

gist58eb3c17bb62660d01a8bbdea6496c74

gist02d8484b4d91bf698fdb7c692d6c0131

すごい手抜きなブログですが、内容は以上です。

こんな感じでプロットできます。

1つ目は3dプロットの全国地図

もう1つのは2dプロットの熊本、神奈川、埼玉、青森、新潟、岡山、京都、岐阜の地図です。

f:id:forest-of-sheep-and-steel:20161221205737p:plainf:id:forest-of-sheep-and-steel:20161221205734p:plain

 

 

年内にもう一回更新したいなと思ってます。普通に統計の話で・・・。

以上でーす。

更新:ちなみに、shapeファイルを扱うRのパッケージもあるので、こんなめんどくさいことは実はやらなくてもいいのです笑

Rで日本地図を書く(3次元で)②

よくよく見たら、この前書いた日本地図、県境がかなり適当。細々した島も無い。特に沖縄が適当。ってことで、もっといい地図はないのものか探してきました。んで、見つけたのがこのデータ!

www.naturalearthdata.com

今回は上から5グループ目の

Admin 1 – States, Provinces

という見出しの Download as scale ranks というデータを使いました。

さっそくコードを。。

gist025531edb17547aa2803766ad18887a4

このデータは県境もあるし、結構細かいし、なかなか良いと思う。二次元にプロットするとこんな感じ。

gist57b20e6b5ba46b69e03f6fed1b45a176

f:id:forest-of-sheep-and-steel:20161101005200p:plain

3次元で写したい場合はこちら。

gist283c11451c49f1949bbd652d1710bfa6

結果はこんな感じ。いい感じ。。

f:id:forest-of-sheep-and-steel:20161101005355p:plain

そもそも何がやりたかったかというと、天気予報とかでよくある降水量のバーがついた地図を作りたかったのです。降水量のデータはちょっと載せられないのでサンプルデータで書いた結果だけ。やってみればそんなに苦労せずできますね!

f:id:forest-of-sheep-and-steel:20161101010246p:plain

そういえば最近、PVが20を超えました笑

全く関係ない話2(対数関数の性質)

高校で初めて対数関数を習ったとき、それを使うメリットがわからなかった。今は理解しているつもりだけど、こんな説明があったら理解の助けになるのかなと思って作図。またまたx軸, y軸を平行にしてどのように値が変化されているのか確認する。普通の二次元プロットでもわかる人はわかるんだろうけど・・・。

f:id:forest-of-sheep-and-steel:20161030160548p:plain

gisteef85984474dbb1c667ca76f1eb0bed9

 

上の横軸がxの値、下の横軸がyの値ですね。ちなみに、この時対数の底の値はネイピア数eとしています。適当にxの値を2つ持ってきたときに、それを対数変換によってy軸に移しても、それぞれのx軸での大小関係は保たれたままy軸に移ってる事がわかると思います。

これが結構大切で、大小関係を評価したいとき、対数を取っても問題ないというのはこの性質からきているんですね。

もう一点は、対数関数の場合、xは0より大きいという制約がありますね。それを踏まえて、この対数関数は、すごく小さい数(1より小さく0より大きい)は負のより大きい数字に、すごく大きい数は正のより小さい数字にしてくれるという性質があります。

0.001 -> -6.907,   1000 -> 6.907,

のように、0.001と1000ではその差が999.9もあったのに、2つの対数をとると、大小関係を保ったまま、-6.907, 6.907とその差が13.815となっています。極端に大きい数字とか、極端に小さい値を扱う時、対数をとると普段使っているようなスケールの数字に変換してくれるんですね。しかも大小関係は保存してくれるという嬉しさです。

とりあえず以上。。。

Rで日本地図を書く(3次元で)

かなりニッチな需要だと思いつつ、Rで3次元の中の平面に日本地図を書こう、ということをやっていきます。目的はと言いますと、天気予報なんかである、日本地図の対応する地点に観測された降雨量の棒グラフを書きたい、みたいなことがあって、今回はじゃあ3次元の中に平面の日本地図を書くというところまでやっていきます。

必要なパッケージは3つ、Nippon, spsurvey, rgl の2つです。とりあえず読み込みましょう

gistfa75446b9c7707ba6829d351f02361e9

Nipponは他の方のブログでもよく紹介されているように、日本地図を書いてくれる関数がありますが、この記事は、いやいや俺は座標の行列から日本地図を書きたいんだよ!っていう人向けでもありますね。

Nipponのパッケージを使えば地図がかける、つまり座標はこのパッケージの中にあるわけです。まずはそれを抽出していきましょう。そのために、Nipponパッケージがあるフォルダーにアクセスする必要があります。windowsのことはよくわからないのでごめんなさい。macの方は

/Library/Frameworks/R.framework/Versions/3.3/Resources/library/Nippon/shapes

ここにshpファイルがあって、その中にプロットに必要な情報が色々と入っています。

では、座標データだけ抽出していきましょう。次のコードを実行すればOKです。

giste07d64552229c7dbbaa125891e151fd4

これで座標を取り出せました。例えばこれを使って北海道をプロットするとこんな感じになります。

gist83ccd26a79fe22632aa844d6ece88e21

f:id:forest-of-sheep-and-steel:20161025235622p:plain

 あとは力技でちょっとカッコ悪いんですが、3次元平面にプロットしていくだけです。(三軸目の値は全て0にしています。)

gistde0302bc23bbbbb84dc95b42c60f99b3

どうしても、色々いじりたい場合はパッケージの関数一発で書くよりも、座標データだけ欲しい状況が出てくるわけです。こんな感じのニッチな需要を持っている人の役に立てばいいなーと思います。

結果はこんな感じでした。でもこの地図、沖縄がかなり省略されてるみたいですね。

f:id:forest-of-sheep-and-steel:20161026000122p:plain