lib/statistics/statistical_test/t_test.rb in ruby-statistics-1.0.2 vs lib/statistics/statistical_test/t_test.rb in ruby-statistics-2.0.0

- old
+ new

@@ -39,8 +39,30 @@ alpha: alpha, null: alpha < p_value, alternative: p_value <= alpha, confidence_level: 1 - alpha } end + + def self.paired_test(alpha, tails, left_group, right_group) + # Handy snippet grabbed from https://stackoverflow.com/questions/2682411/ruby-sum-corresponding-members-of-two-or-more-arrays + differences = [left_group, right_group].transpose.map { |value| value.reduce(:-) } + + degrees_of_freedom = differences.size - 1 + down = differences.standard_deviation/Math.sqrt(differences.size) + + t_score = (differences.mean - 0)/down.to_f + + probability = Distribution::TStudent.new(degrees_of_freedom).cumulative_function(t_score) + + p_value = 1 - probability + p_value *= 2 if tails == :two_tail + + { probability: probability, + p_value: p_value, + alpha: alpha, + null: alpha < p_value, + alternative: p_value <= alpha, + confidence_level: 1 - alpha } + end end end end