Journal InTime


2015-12-17 (Thu) [長年日記]

_ 累積分布関数

Rubyで累積分布関数を扱う方法を調べてみた。 ぐぐったところSciRubyのstatsampleライブラリを使えばいいらしい。

ドキュメントがあまり見当たらないけど、サンプルのhistogram.rbとかを見るとこんな感じで使えばよいようだ。

require "statsample"

# テスト用に平均値40、標準偏差10のデータを1000個生成
v = Statsample::Shorthand::rnorm(1000, 40, 10)

# 最小値から最大値まで0.5ずつループ
v.min.step(v.max, 0.5) do |x|
  # 値xと、xにおける累積分布値をカンマ区切りで出力
  puts [x, Distribution::Normal.cdf((x - v.mean) / v.sd)].join(",")
end

Normalのところを変えると正規分布以外も扱えるらしい。

LibreOfficeのNORMDIST()関数の結果と比べると一致したのでたぶん合ってると思うけど、使い方が間違ってたら教えてください。

Tags: Ruby