Sha256: ab6754ddcc5a2636f97da325c0fa1b1d48aeb8d24ec67f01b75a0963e50c9edc

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

module Statsample
  module Anova
    # One Way Anova
    # Example:
    #   v1=[2,3,4,5,6].to_scale
    #   v2=[3,3,4,5,6].to_scale
    #   v3=[5,3,1,5,6].to_scale
    #   anova=Statsample::Anova::OneWay.new([v1,v2,v3])
    #   anova.f
    #   => 0.0243902439024391
    #   anova.probability
    #   => 0.975953044203438
    #   anova.sst 
    #   => 32.9333333333333
    #
    class OneWay < Statsample::Test::F
      def initialize(vectors,opts=Hash.new)
        @vectors=vectors
        opts_default={:name=>_("Anova One-Way"), :name_numerator=>"Between Groups", :name_denominator=>"Within Groups"}
        super(ssbg,sswg, df_bg, df_wg)
      end
      # Total mean
      def mean
        sum=@vectors.inject(0){|a,v| a+v.sum}
        sum.quo(n)
      end
      
      # Total sum of squares
      def sst
        m=mean
        @vectors.inject(0) {|total,vector| total+vector.ss(m) }
      end
      # Sum of squares within groups
      def sswg
        @sswg||=@vectors.inject(0) {|total,vector| total+vector.ss }
      end
      # Sum of squares between groups
      def ssbg
        m=mean
        @vectors.inject(0) do |total,vector|
          total + (vector.mean-m).square * vector.size 
        end
      end
      # Degrees of freedom within groups
      def df_wg
        @dk_wg||=n-k
      end
      def k
        @k||=@vectors.size
      end
      # Degrees of freedom between groups 
      def df_bg
          k-1
      end
      # Total number of cases
      def n
          @vectors.inject(0){|a,v| a+v.size}
      end
      
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
statsample-0.9.0 lib/statsample/anova.rb