餡子付゛録゛

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

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

Rでニュートン・ラフソン法

文系の学生などで特に目的無くプログラミングを覚えたい人には、Rが最適です。統計解析に使わなくても、ちょっと計算した気になるプログラミングの練習をしてみましょう。 1. よくある近似解を求める 関数f(x)=0があるとして、テーラー展開をしてみます。f(x…

Rで年次ダミーを作成

実際の計量分析ではダミー変数は無くてはならないテクニックで、技術進歩の計測でもしない限りは、複数年にまたがるデータには年次ダミーが含まれている事が通例です。Rでは簡単にダミー変数を作る事ができます。 例えば以下のようなデータフレームdfがある…

Rでデータフレームに、t-1期のデータを追加する(ミクロデータ向き)

被説明変数が説明変数に影響を与えている事を同時性と言います。アイドルのCMやドラマ露出時間と、アイドルの人気度の関係などが例にあげられるでしょう。単回帰では問題ないのですが、重回帰分析では分析に深刻な影響を及ぼす可能性があります。 これを解決…

Rでバランスド・データの作り方

複数年に渡るミクロデータでは、個体が入ったり抜けたりします。例えば地域住人のデータでは、転居や死亡などで個体が減りますし、逆に転入や誕生で個体が増えたりします。サンプル数が膨大な場合は誤差になりますが、限定されたサンプルでは推定結果に影響…

Rでミクロデータにマクロデータを紐付ける

ミクロデータへのマクロデータへの紐付けはデータ分析では良くある作業です。例えば企業の財務データを、その年のインフレ率で割り引く作業があります。Rの演算は各年各企業のデータにインフレ率が無いと演算しにくいので、Excelのvlookup関数で紐付けを済ま…

PidginでYahoo!Japanに接続不能のときの対処方法

PidginでYahoo!Japanに接続できなくなりました。 原因は、認証サーバーのIPアドレスをもどすマスター・サーバーが停止したためのようです。Pidginはマスター・サーバーしか問い合わせに行かないようで、サーバー応答が無いとメッセージが出て接続できなくな…

今日は第何週?

R言語は、他の人気スクリプト言語に比較すると、ベクトル演算以外は記述が煩雑な気がします。特に日付関係は特殊なオブジェクトが乱立しており、少なくとも他の言語とは扱い方がちょっと違います。 例えば、今日が第何週かを調べるには以下のようにすれば良…

64bits版Linuxでは、64bits版Flashを使う

64bits版Ubuntu Linuxでは、64bits版Flashを使う方が良いようです。 Synapticパッケージマネージャーでは32bits版をインストールするのですが、ia32-libsをインストールするためか、C++/Qtでアプリケーションを作成すると、ELF class: ELFCLASS64エラーが出…

Ubuntu Linux 11.04でSUN Javaの一部文字化け対策

SUN版の方が、OpenJDK版よりも3割程度高速なので、Ubuntu Linux 11.04でもSUN版が動くようにします。 今はSUN版はオプションのリポジトリに登録されているパッケージなので、aptのリポジトリの追加をしてから、インストールを行います。 sudo add-apt-reposi…

なるほど、VelocityよりJSP+ELは遅い・・・ところでJSPだけのベンチマークは?

ベンチマークも無しに遅いと主張されても論拠が薄いと批判したところ、id:kwatchさんがVelocityとJSP+ELのベンチマークを作ってくれました。ご苦労様です。 なるほど、VelocityよりJSP+ELは遅いと言う事ですね。これで他のテンプレート > Velocity > JSP+EL…

id:kwatch氏の上手くないJavaの中傷の仕方

id:kwatch氏がエントリーにコメントをしてくれたので、「プログラミング言語の速度とアプリケーションの速度がいかに関係ないかがわかるグラフ」と「JSPが遅い理由をJava屋さんはまるでわかってないらしい」の作文的な問題点を整理してみます。 id:kwatch氏…

あるPHPer/RubiestのJavaに対するちょっとした誤解

「JSPが遅い理由をJava屋さんはまるでわかってないらしい」と言う、Javaを全く理解していないPHPer/Rubiestを発見してしまいました。分かっていないのは、ここの部分。 #つうかさ、「Javaの文字列操作は遅い」とか、Javaに対して失礼だろ。 プログラミング…

あるPHPer/RubiestのJSPに対するちょっとした誤解

「JSPが遅い理由をJava屋さんはまるでわかってないらしい」と言う、JSPを全く理解していないPHPer/Rubiestを発見してしまいました。分かっていないのは、ここの部分。 VeocityやJSPが遅いのは、単に動的な独自言語を導入したから。 Veocityはともかく、JSPは…

PHPの設定オプションprecisionが17以上のときの挙動

PHP

id:hnw氏が以前のエントリのコメントで「PHPの新しいround関数にバグをみつけた」の詳しく説明してくれました。 なるほどなるほど。私は以下の理由で勘違いをしていたようです。 JavaのFormatNumberも17桁以上の有効桁数は取らない new BigDecimal("10000000…

1000000000000000.125はIEEE754倍精度浮動小数点の範囲内?

PHP

id:hnw氏に、延髄反射で早合点するなバーカと言われました。derick氏と同じにされてケシカラン。私は早合点ですが、derick氏は理解した上でBogusにしているのだと思います。 1000000000000000.125と19桁指定がBogusにされた理由 derick氏が早合点では無いバ…

PHP 5.3のround関数の挙動は仕様かも

PHP

PHPは4.06までしか知らないJava屋からPHPerのid:hnw氏へ。「PHPの新しいround関数にバグをみつけた」に関して、ちょっと疑問があります。 Bogus扱いにされて怒っているPHP :: Bug #54479ですが、症状は確認できました。 しかし、バグでは無さそうです。まず…

Eclipseで編集画面分割

Eclipseで編集画面の分割方法をPHPerに聞かれたので、編集画面分割の実演動画を作製しました。 タブの部分で右クリックして新規エディターを選択すると、同一のファイルが複数のタブで編集できるようになります。新たにできたタブをマウスで下側までドラッグ…

Eclipseで短径選択

縦選択がしたいとPHPerに聞かれたので、調べてみた。 日本語では、矩形選択(くけいせんたく)と言う機能。Eclipseでは、ブロック選択モードとなる。 ショートカットだと、Alt+Shift+A(Windows)、Option+Command+A(Macintosh)でブロック選択モードに切り…