Class: Statsample::Anova::OneWay

Inherits:
Object
  • Object
show all
Defined in:
lib/statsample/anova.rb

Overview

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.significance
=> 0.975953044203438
anova.sst 
=> 32.9333333333333

Instance Method Summary collapse

Constructor Details

#initialize(vectors) ⇒ OneWay

Returns a new instance of OneWay.



17
18
19
# File 'lib/statsample/anova.rb', line 17

def initialize(vectors)
  @vectors=vectors
end

Instance Method Details

#df_bgObject

Degrees of freedom between groups



49
50
51
# File 'lib/statsample/anova.rb', line 49

def df_bg
    @vectors.size-1
end

#df_totalObject

Total Degrees of freedom



53
54
55
# File 'lib/statsample/anova.rb', line 53

def df_total
    n-1
end

#df_wgObject

Degrees of freedom within groups



45
46
47
# File 'lib/statsample/anova.rb', line 45

def df_wg
    @vectors.inject(0) {|a,v| a+(v.size-1)}
end

#fObject

Fisher



61
62
63
64
# File 'lib/statsample/anova.rb', line 61

def f
    k=@vectors.size
    (ssbg*(n-k)) / (sswg*(k-1))
end

#meanObject

Total mean



25
26
27
# File 'lib/statsample/anova.rb', line 25

def mean
  sum.quo(n)
end

#nObject

Total number of cases



57
58
59
# File 'lib/statsample/anova.rb', line 57

def n
    @vectors.inject(0){|a,v| a+v.size}
end

#significanceObject

Significance of Fisher



66
67
68
# File 'lib/statsample/anova.rb', line 66

def significance
    1.0-Distribution::F.cdf(f,df_bg,df_wg)
end

#ssbgObject

Sum of squares between groups



38
39
40
41
42
43
# File 'lib/statsample/anova.rb', line 38

def ssbg
  m=mean
  @vectors.inject(0) do |total,vector|
    total + (vector.mean-m).square * vector.size 
  end
end

#sstObject

Total sum of squares



29
30
31
32
# File 'lib/statsample/anova.rb', line 29

def sst
  m=mean.to_f
  @vectors.inject(0) {|total,vector| total+vector.sum_of_squares(m) }
end

#sswgObject

Sum of squares within groups



34
35
36
# File 'lib/statsample/anova.rb', line 34

def sswg
  @vectors.inject(0) {|total,vector| total+vector.sum_of_squares }
end

#sumObject

Total sum



21
22
23
# File 'lib/statsample/anova.rb', line 21

def sum
  @vectors.inject(0){|a,v| a+v.sum}
end