餡子付゛録゛

ソフトウェア開発ツールの便利な使い方を紹介。

最尤法による欠損値の補定と回帰モデルの推定の同時実行

ここ10年間ぐらいで多重代入法を用いた欠損データ処理が一般化しましたが、多重代入法を使わなくても多重代入法と同様の結果が得ることもできます。Fully Bayesian Imputation Methodと呼ばれている手法ですが*1、最尤法による単一代入(imputation model)…

R/FortranでHamiltonian Monte Carlo法によるベイズ推定を書いてみたよ!

マルコフ連鎖モンテカルロ法(MCMC)には様々なアルゴリズムがあり、メトロポリス・ヘイスティングス法は尤度関数があれば推定ができる使い勝手のよい方法だと知られています。しかし、高次元で効率が悪いことが知られており、また多峰の確率分布には上手く…

Rで呼び出したFortranのプロシージャからRの関数を呼ぶ方法

仕様上はできそうなので試してみたらできたと言うだけの話なのですが、Rで呼び出したFortranのプロシージャからRの関数を呼ぶ方法を記しておきます。技術的にどうこうと言うのは無いのですが、流れはややこしくて以下のようになります。 .CallでRのコールバ…

FortranでRの対数尤度関数とその一階微分を用意すると

Rもだいたい線形代数の範囲で片付けている限りは、そこそこ速いことがわかります。Fortranとの速度差が出ないというか、R vs R/FortranだとRの方が微妙に速く*1。遅くなるのになぜFortranでRの対数尤度関数とその一階微分を用意したかと言うと、Fortranでハ…

浮動小数点用高速メルセンヌ・ツイスタ(dSFMT)のFortran用インターフェイス

(多くのプログラミング言語の標準ライブラリのものよりは)新しく高速な乱数生成アルゴリズムdSFMTのFortranでの使い方を確認してみました。Fortran標準の乱数生成プロシージャrandom_numberは遅くて偏りのある線形合同法なので、シミュレーションで使うと…

打点と得点の合計値を他の指標で回帰するベイズ推定

野球の出塁率と長打率を足し合わせた値OPSの評価をするために、打点と得点の合計値を他の指標で回帰するコードです。非負制約をつけるために、ベイズ推定をしています。なお、結果は以下で、OLSで推定してもほとんど同様の値になりました。線形回帰モデルな…

FortranのコードをRから呼び出す

「Modern fortranでルンゲクッタ法」のFortranのコードをRから呼び出すようにしてみました。 RからFortranを呼び出す方法は前にまとめたものがあるのと、ソースコードはMercurialのリポジトリで公開しているので詳細は省きますが、 Rから呼び出すFortranのサ…

Cで計算した常微分方程式の結果を、Rでプロット

「ルンゲクッタ法で様々な連立微分方程式を解く数値計算例(C言語)」のラングフォードの方程式のプロット結果をgifアニメにしてみたので、コードを残しておきます。 Langford Reactor Cで常微分方程式を計算 Rでプロット Cで常微分方程式を計算 gnuplotあたり…

Fortranで書いたバイナリファイルをRで読む

数値解析の速度は申し分がないFortranですが、プロットなどのI/O周りの使い勝手は悪いです。Fortranでサブルーチンを書いて、Rから呼び出すのが良いかなとは思うのですが、Fortranの計算結果をファイルに書き出して、Rに読ますのもひとつの方法です。テキス…

Rでmmap

計算機でmapと言うと、リストの要素を無名関数で一括処理することや(Python)、ハッシュテーブルのような構造(Java)を思い浮かべる人が多いかも知れませんが、mmapはファイルに仮想メモリーを割り当てるOSの提供するAPIです。巨大データを処理したり、高…

MCMCpackを使った順序プロビットの推定と限界効果の計算

MCMCpackで順序ロジットのベイズ推定をするかなと思ったのですが、用意されていたのは順序プロビットのMCMCoprobitだったので、順序プロビットをします。順序ロジットの尤度関数はそんなに複雑ではないのですが、微積分をしない限りは大差ないので。 限界効…

順序ロジットの推定にordinalパッケージを用いた場合の限界効果を計算する方法

前のエントリーを書いているときに、Rのordinalパッケージに限界効果を計算する関数が用意されていないことに気づきました。MASSパッケージとererパッケージを使えばよいわけですが*1、ererパッケージの更新が微妙な感じがしたので、ordinalパッケージの結果…

人文系(哲学)大学教員のためのRによる成績評価方法(α版)

最近は理工系はもちろん、社会科学系の大学教員も研究で統計解析をしていることが多いので、Rで成績評価する方法を解説しても需要はあまり無さそうな気もするのですが、人文系でニーズがあるようなので。 名簿と試験の成績とレポートの評価の3つのCSVファイ…

Bloggerで独自ドメインを利用している場合のSSL/TLS化

ここ5年ぐらい代表的ブラウザーのGoogle Chromeが非SSL/TLSであるhttp://のページに警告を出すようになっていて、Bloggerで独自ドメイン www.anlyznews.com で書いているブログのほうもLet's Encryptを使ってSSL/TLS化したのでメモ書きを。ブログごとの設定…

粒子フィルタ(particle filter)で状態とパラメーターを同時推定

ノイズが多い時系列データに対しては、観測値から観測誤差を取り除いて、分析者の興味関心である観察不能な状態を取り出すカルマンフィルターがよく使われています。しかし、カルマンフィルタは線形近似になるため、より一般的に用いることができるアルゴリ…

Rで計量経済学の変量効果モデルを推定

だいぶ前にパッケージを使わず固定効果モデルで推定する例は書いていたのですが、変量効果モデルで推定する例も書いてみました。計量経済学で言う変量効果モデルは、観測値ごとの誤差に加えて、個体ごとの誤差がある線形回帰モデルです。は被説明変数、は説…

miceの並列処理で時間短縮

「欠測処理でRのmiceパッケージのmice()を使うとして、処理時間の問題皆さんどうしてますかね。」と言う質問に、「多重代入法はM個の代入を独立して実行するのが望ましいので、マルチコアを使える演算環境ならば、並列処理することができます…Flexible Imput…

コーシー分布も扱えるランク基準線形モデル推定(Rank-based Estimation for Linear Models)

Kloke and McKean (2012) "Rfit: Rank-based Estimation for Linear Models," The R Journal, Vol.4(2)にアルゴリズムの概要と利用方法の詳細が書いてあるので説明する必要はないのですが、U検定やBrunner-Munzel検定を使ってきた外れ値がある観測値がコーシ…

尖度で自由度を補正したF検定による等分散性の検証

教科書の分散比のF検定をつかった等分散性の検証は、F検定が正規分布に依存しているので利用できる場合が限られるわけですが、それは分布の裾野の厚さ、尖度が問題であって、尖度が分かればそれで自由度を補正してより広い分布に使えることが知られています…

RでBEEP音を鳴らす方法

BEEP音を鳴らしたかったのですが、検索するとbeeprパッケージを使え、alarm関数を使えと言うコレじゃないソリューションや、system関数でOSのコマンドを叩けと言うベタな手が引っかかります。どうやらRでBEEP音を鳴らしたい人々はほとんどいないようです。C…

ggplot2やplotlyを使わないbubble plot

Rではggplot2やplotlyを使うと簡単にbubble plotを描画できますが、標準のplotを使ってもそんなに手間暇でもないです。より楽ができて、見栄えのするggplot2かplotlyの利用をお勧めしますが。 1. データセット 以下のデータセットをプロットすることを考えま…

DiagrammeR/Mermaid.jsで描いた図をreveal.jsに何とか埋め込む方法

Rで簡単にフローチャートやシーケンス図やER図を描いてくれるDiagrammeRパッケージで生成した図を、標準的な方法でR Markdown Format for reveal.js Presentationsで使おうとしたら、微妙に挙動不審なhtmlが出来上がったので、問題の回避策を記しておきたい…

Rでバイナリファイルを置換

なるべく避けた方が良い気がするのですが、Rでもバイナリのデータを扱えます。0から255の範囲を整数のpack形式と、0か1のunpack形式のraw型として処理されるのですが、C言語あたりから入った人だとややこしく感じるかも知れません*1。 1. pack/unpack形式のr…

Rによる解析結果をShinyでインタラクティブにプレゼンテーションしよう

数理モデルの数値解析や統計解析では、パラメーターを色々といじったり、変数や分析期間を変えたりして計算をやり直したり、結果の一部分を切り取って参照したいときがあります。プログラムをぽちぽちと変えていけば実現できるわけですが、ぱっと見ではその…

Rでnames(x) <- "a name"的な代入を定義するには

今まで一度たりとも作る必要を感じたことがなく、言語定義を見ても特段何も書いていないようなので、関数呼び出しへの代入(?)はユーザー定義はでき無いのかなと思っていた*1のですが、ヘルプを見ていたら*2 The functions 'dim' and 'dim などと書いてあ…

Rの関数の引数が参照渡しから値渡しに変わるとき

実用上はRの関数の引数は値渡しと理解しておけばよいのですが、引数を他の変数に代入したり、関数の中の関数呼び出しで使ったりする前は、参照渡しになっています。実際、 fn1 <- function(x) x^2 fn2 <- function(x, fn){ rm("fn1", envir = parent.env(env…

Rでエッジワース・ボックスを描こう

Edgeworth Box以前に描いたコードを整理しなおしたと言うか、手計算で微分して均衡や契約曲線を求めていたのでどちらかと言うと作り直したものですが、applyやwhichやexpressionなどに慣れるのに良さそうだったので。数値解析で均衡点を求めているので、初期…

Rのリスト処理のざっとした説明

説明用です。他のプログラミング言語の連想配列/マップ/ハッシュと同様に使えるわけですが、[ ]と[[ ]]の使い分けがややこしいですね。 # 空リストを作成 lst <- list() # リストを作成 lst <- list("a"=123, "b"=456, "c"=789) # ベクターをリストに変えて…

前世紀風のRの日付処理

以前書いたエントリーを見直していて、操作を手早く紹介する例をつくっておきたくなりました。文字列型や数値型の日付データを、タイムゾーンUTCでのUNIX秒を保持するクラスPOSIXctか、日付構造体になっているリストPOSIXlt型に変換して操作して、文字列型に…

Rで線形混合モデル×多重代入法

反復測定分散分析をlme4パッケージとmiceパッケージを使った線形混合モデル*1×多重代入法で行なう作業を確認したので公開します*2。以前のエントリー「反復測定分散分析を主観ベイズ推定に置き換えよう」で、こっちの方が楽と書いたのですが、欠損値補定がや…