配列の値の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%予言的中区間」と表現されてたけど。んー。ちなみに本はこれです。
- 作者: 小島寛之
- 出版社/メーカー: ダイヤモンド社
- 発売日: 2006/09/29
- メディア: 単行本(ソフトカバー)
- 購入: 215人 クリック: 3,105回
- この商品を含むブログ (113件) を見る