Sha256: f941b0178081a1c0813e1ccb93239595d0d45dafe6c26016fd637bcd3eee5ec9

Contents?: true

Size: 674 Bytes

Versions: 2

Compression:

Stored size: 674 Bytes

Contents

class Stats
	class << self
		
		def sum(ar, &block)
			ar.reduce(0.0) {|asum, a| (block_given? ? yield(a) : a) + asum}
	  end
		
	  def variance(ar)
	    v = sum(ar) {|x| (mean(ar) - x)**2.0 }
      v/(ar.count - 1.0)
	  end

	  def standard_deviation(ar)
	    Math.sqrt(variance(ar))
	  end

	  def z_scores(ar)
	    ar.map {|x| z_score(ar, x)}
	  end

	  def z_score(ar, x)
	    (x - mean(ar)) / standard_deviation(ar)
	  end

		def range(ar)
			ar.max - ar.min
		end

	  def mean(ar)
	    sum(ar) / ar.count
	  end

	  def median(ar)
			a = ar.sort
			if ar.count.odd?
				a[(ar.count-1)/2]
			else
				(a[ar.count/2 - 1] + a[ar.count/2]) / 2.0
			end
	  end
		
	end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
experiment-0.2.0 lib/experiment/stats.rb
experiment-0.0.1 lib/experiment/stats.rb