人気ブログランキング | 話題のタグを見る

統計計算スニペット

配列に統計計算をするスニペットをつくった。

使い方

C:\Users\******\Ruby>irb
irb(main):001:0> require 'stat.rb'
=> true
irb(main):002:0> [1,2,3].stat ........ 個数、総和、平均、標準偏差
=> [3, 6, 2.0, 1.0]
irb(main):003:0> [1,2,3].sum ........ 総和
=> 6
irb(main):004:0> [1,2,3].mean ........ 平均
=> 2.0
irb(main):005:0> [1,2,3].sd ........ 標準偏差
=> 1.0
irb(main):006:0> [1,2,3].cor([4,5,6]) ........ 相関係数
=> 0.262612865719445

ファイル名: stat.rb

class Array
  def stat
    sum = 0
    ss = 0
    n = self.size
    self.each do |x|
      sum += x
    end
    mean = sum / n.to_f
    self.each do |x|
      ss += (x - mean) ** 2
    end
    ss = ss / (n - 1).to_f
    sd = Math.sqrt(ss)
    return n, sum, mean, sd
  end

  def sum
    return self.stat[1]
  end

  def mean
    return self.stat[2]
  end

  def sd
    return self.stat[3]
  end

  def cor(other)
    sum_x = 0
    sum_y = 0
    n = self.size
    for i in 0...n
      sum_x += self[i]
      sum_y += self[i]
    end
    mean_x = sum_x / n.to_f
    mean_y = sum_y / n.to_f
    ss_x = 0
    ss_y = 0
    ss_xy = 0
    for i in 0...n
      ss_x += (self[i] - mean_x) ** 2
      ss_y += (other[i] - mean_y) ** 2
      ss_xy += (self[i] - mean_x) * (other[i] - mean_y)
    end
    r = ss_xy / Math.sqrt(ss_x) / Math.sqrt(ss_y)
    return r
  end
end
by tnomura9 | 2008-09-23 07:53 | Ruby | Comments(0)
<< 車輪を二度発明しないためには edit.rb で snipp... >>