statistics/commit
MODIFIED: Split list_standard_deviation/2 into list_population_standard_deviation/2 and list_sample_standard_deviation/2. Patrick Sannes.
author | Jan Wielemaker |
---|---|
Wed Mar 16 13:27:44 2011 +0100 | |
committer | Jan Wielemaker |
Wed Mar 16 13:27:44 2011 +0100 | |
commit | 3bdd1bf95a9a29751273e7bbfef87e1447140e56 |
tree | 90d9764674c9ec832500250e16fe4759a6ef0295 |
parent | 3088640762470174a135c0b2788e31482a9cc022 |
Diff style: patch stat
diff --git a/lib/stat_lists.pl b/lib/stat_lists.pl index 786e996..500305e 100644 --- a/lib/stat_lists.pl +++ b/lib/stat_lists.pl @@ -31,7 +31,8 @@ :- module(stat_lists, [ list_mean/2, % +List, -Mean list_variance/2, % +List, -Variance - list_standard_deviation/2 % +List, -StDev + list_sample_standard_deviation/2, % +List, -StDev + list_population_standard_deviation/2 % +List, -StDev ]). :- use_module(library(lists)). :- use_module(library(error)). @@ -75,13 +76,34 @@ variance([H|T], Mean, V0, V) :- V1 is V0+(H-Mean)**2, variance(T, Mean, V1, V). -%% list_standard_deviation(+List, -StDev:float) is det. +%% list_population_standard_deviation(+List, -StDev:float) is det. % -% True if StDev is the standard deviation of List. +% True if StDev is the _population_ standard deviation of List. +% List must be non-empty. % % @error domain_error(non_empty_list, List) if List is []. +% @see list_sample_standard_deviation/2. -list_standard_deviation(List, StDev) :- +list_population_standard_deviation(List, StDev) :- list_length_mean(List, Len, Mean), variance(List, Mean, 0, Variance), StDev is sqrt(Variance/Len). + +%% list_sample_standard_deviation(+List, -StDev:float) is det. +% +% True if StDev is the _sample_ standard deviation of List. List +% must hold at least two elements. +% +% @error domain_error(non_empty_list, List) if List is []. +% @error domain_error(two_or_more_element_list, List) if List is [_]. +% @see list_population_standard_deviation/2. + +list_sample_standard_deviation(List, StDev) :- + list_length_mean(List, Len, Mean), + ( Len == 1 + -> domain_error(two_or_more_element_list, List) + ; true + ), + variance(List, Mean, 0, Variance), + StDev is sqrt(Variance/(Len-1)). +