無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

配列の値の95%が属する範囲を算出する関数

配列の要素をto_iした値が正規分布することが知られている場合に、「値の要素の95%が属する範囲」を算出する関数です。

class Array
  # 要素をto_iした値が正規分布することがわかっている場合に、
  # 値の95%が属する範囲を算出する。
  def predictionInterval95
    a = avg
    sd = standard_deviation
    { :min=>a-1.96*sd,  :max=>a+1.96*sd }
  end
  # 要素をto_iした値の平均を算出する
  def avg
    inject(0.0){|r,i| r+=i.to_i }/size
  end
  # 要素をto_iした値の分散を算出する
  def variance
    a = avg
    inject(0.0){|r,i| r+=(i.to_i-a)**2 }/size
  end
  # 要素をto_iした値の標準偏差を算出する
  def standard_deviation
    Math.sqrt(variance)
  end
end

サンプル。

array = [160, 172, 148,151,161,160,160,163]
pi = array.predictionInterval95
puts <<-STR
avg: #{array.avg}
sd:   #{array.standard_deviation}
min: #{pi[:min]}  
max: #{pi[:max]}
STR

実行結果です。

avg: 159.375
sd:   6.8545149354276
min: 145.940150726562  
max: 172.809849273438

算出した範囲ですが、「95%予測区間」と表現していいのかな。参考にした本では、「95%予言的中区間」と表現されてたけど。んー。ちなみに本はこれです。

完全独習 統計学入門

完全独習 統計学入門

具体例を使った説明が多いので、Wikipedia予測区間の解説(というか数式)にどんびきするような文系さんにもわかりやすい。お勧めです。