餡子付゛録゛

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

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

Account Auto-DiscoveryをBloggerテンプレートに埋め込む

ブログ・サービスのBloggerはテンプレートが使えるのですが、ダブル・コーテーション(")で書いたタグが、シングル・コーテーション(')に勝手に変換される癖があります。仕様上は特に問題が無いのですが、はてなブックマークのAccount Auto-Discoveryを埋…

Rで解くFizzBuzz問題

前のエントリーでFizzBuzz問題がもっと速くなるのでは無いかと指摘したら、“エレガントではないけどと速いコード”を書いて頂けたので、他のコードとあわせて紹介したいと思います。遅い順に合計7種類。 1. @kos59125 氏 Type I @kos59125 氏が説明用に示した…

Rのベクター処理にバグ? - ではありませんでした

FizzBuzz問題を解いていて気付いたのですが、Rにバグがあるかも知れません。と思ったら、無かったです。 ちょっと紛らわしいコードを書きます。ベクターに添字をすることで、ベクターの一部分の文字列を取得しているのですが、1から11まで一度に計算したとき…

RでFizzBuzz問題を高速化

「裏 RjpWiki」で「R らしく FizzBuzz」と言うエントリーがあるのですが、ワンライナーですっきりしていますが、速度的にちょっと彼らしくない書き方になっています。 ifelse()を減らせば、もっと速度が改善しますよ。手元の計測では裏 RjpWiki版が4.96秒、i…

Rで解いていないFizzBuzz問題

「Rで解くFizzBuzz問題」を見ていて理解できる事は、Rで高速なコードを書くのはトリッキーだと言う事ですね。素直にCで実装した方が速いかも知れないと言うことで、試してみました。 速度的には、Rで最も速かった「裏 RjpWiki 変態チック版」の約1.5倍という…

「Rと手作業で覚える最尤法」のコードに関して補足

どうもコメント欄で粗雑なコードで御迷惑をおかけしましたと書いたら、『裏 RjpWiki』と言うブログで「Rと手作業で覚える最尤法」に関して、『ある意味「えれがんと」だなあ』と皮肉を言われています(ダメ出し:簡明直截なプログラムを書こう)。ダメ出しを…

Ubuntu Linux 11.10へのバージョンアップ失敗と修復

VMware Player上のUbuntu 11.04から11.10へバージョンアップをしたら、再起動後に「Waiting for up to 60 more seconds for network configuration」と表示されたあと、動作が停止してしまうようになりました。検索してみると、良くある事例の模様(Ubuntu 1…

M-Hアルゴリズムによるポアソン分布推定コードのチューニング

「Rでマルコフ連鎖モンテカルロ法を試す」で書いたMCMCのコードが、NR法による最尤推定とのつながりで混乱していたせいか、それをチューニングしようと言うエントリーが出てしまったので、ちょっと補足をします。 以前のエントリーでは対数尤度関数を使って…

-1*f()より-f()

Rで「-1*f()が気持ち悪い」と言う指摘を受けて、-f()だとSyntax errorになりそうで逆に気持ち悪いんじゃないかと思っていたら、年寄りの戯言でした。 どういう事かと言うと、この二つがRではS式が異なるわけです。 f <- function(n){ n + 1 } as.list(quote(…

加算後の除算≿除算後の加算

かなり大量に演算しないと目立ちませんが、500万サンプルで比較すると、0.10秒と0.16秒で差が計測できました。 obs <- 5000000 x <- runif(obs) y <- runif(obs) ### まとめて割り算 ### gc();gc() system.time({ n <- x + y m <- n / 2 print(sum(m)) }) ##…

Rは行列演算≿apply関数≿ループ演算

Rのプロビット回帰を用いたマイクロ・ベンチマークを書いたので、ソースコードを公開しておきます。 1. セットアップ 推定結果が常に同じになるように、セットアップします。 ### セットアップ ### set.seed(20120209) obs crt x1 x2 y frml # 説明変数を行…

ifelse()と論理値の掛け算

Rでは論理値TRUEとFALSEは、それぞれ1と0として演算する事ができます。ゆえにyとzがxの値に関わらず計算可能な値になるのであれば、ifelse()の代わりに論理値で演算を行う事ができます。 ifelse()はベクター演算にならないので、論理値を使う方が速いです。…

配列の拡張とパフォーマンス

動的に配列サイズが変更されるほど、パフォーマンスは劣化します。 num = 50000### 配列を拡張していく ### gc(); gc() system.time({ x <- numeric(0) i <- 1 while(i <= num){ x[i] <- i i <- i + 1 } })### 配列を一度に初期化 ### gc(); gc() system.tim…

Rでトービット・モデルによる打ち切りデータの推定

金額で測った不動産の保有量を考えましょう。大半の貧乏人はゼロでありますが、一定以上の所得がある人から保有量が増加してきます。集合住宅、持ち家、そして別荘や投資物件など増加していくわけです。 こういう説明変数の値に対して、一定まではゼロ(もし…

地獄のミサワ的Rユーザーのソースコード

別のブログでアイナちゃんの課題をミサワ君とサエコ先輩が助ける話を書いたのですが、検証用にその物語中のソースコードを公開しておきます。 1. データセットの作成 データセットは課題で出されたモノになりますが、ファイルを用意するのも面倒なので、今回…

Rでマルコフ連鎖モンテカルロ法を試す

地味にここ5年間ぐらい、マルコフ連鎖モンテカルロ法(MCMC)が流行っているようです。汎用的な分布でベイズ推定を行う時に有用な数値解析アルゴリズムの総称で、Metropolis-Hastings algorithm(M-Hアルゴリズム)などが主要なメソッドとして使われています…

Rによる数値微分

Rはderiv()関数で記号/微分ができるものの、和や積、つまりsum()やprod()があると微分できません。以下のようなコードを実行すると、『関数 'sum' は導関数の表中にありません』のようにエラーメッセージが出ます。 # ベクトルxを代入 x # 変数bを2とする b …

Rと手作業で覚える最尤法

OLSより進んだ統計手法で最初に覚えるのは最尤法だと思います。大半の人はツールとして知っていて、あまり中身を意識していない気がするのですが、「尤度」の説明無しで『尤度が最大になるパラメーターを求める方法』と言う説明が横行しているのは、問題があ…