2

標準スコアのヒストグラムを生成するために使用したい数値がたくさんあります。

したがって、数値の平均と標準偏差を計算し、この式で各 x を正規化します

x' = (x 平均)/std_dev

結果は -4 から 4 の間の数値です。その結果をグラフにしたいと思います。小さなバーを避けるために、数字をグループ化する方法を探しています。

私の計画は、間隔 [-4,4] のビンを、連続する四半期単位、つまり [-4,-3.75,...,3.75,4] を中心とすることです。

例: 0.1 => ビン "0.0"、0.3 => ビン "0.25"、-1.3 => ビン "-1.5"

それを達成するための最良の方法は何ですか?

4

2 に答える 2

3

これは、サードパーティのライブラリを使用しないソリューションです。数値は Array にある必要がありますvals

MULTIPLIER  = 0.25 
multipliers = []
0.step(1, MULTIPLIER) { |n| multipliers << n }

histogram = Hash.new 0

# find the appropriate "bin" and create the histogram
vals.each do |val|
  # create an array with all the residuals and select the smallest
  cmp = multipliers.map { |group| [group, (group - val%1).abs] }
  bin = cmp.min { |a, b| a.last <=> b.last }.first
  histogram[val.truncate + bin] += 1
end

適切な丸めを実行すると思います。しかし、私はそれを試しただけです:

vals = Array.new(10000) { (rand * 10) % 4 * (rand(2) == 0 ? 1 : -1) }

分布は少し歪んでいますが、それはおそらく乱数ジェネレーターのせいです.

于 2009-04-04T14:01:14.540 に答える
2

Rails は Enumerable#group_by を提供します -- Rails を使用していないと仮定して、こちらのソースを参照してください: http://api.rubyonrails.org/classes/Enumerable.html

リストが xs と呼ばれると仮定すると、次のようなことができます (未テスト):

bars = xs.group_by {|x| #determine bin here}

次に、次のようなハッシュが得られます。

bars = { 0 => [elements,in,first,bin], 1 => [elements,in,second,bin], etc }
于 2009-04-04T00:10:30.683 に答える