+++ /dev/null
--module(stat).
--export([sum/1,mean/1,r_value/1,frequency/1,frequencies_to_scatterplot/2]).
-
-sum([]) -> 0;
-sum([Head|Tail]) -> Head + sum(Tail).
-
-mean(List) -> sum(List) / length(List).
-
-covariance(Points, MeanX, MeanY) ->
- sum(lists:map(fun({X,Y}) -> (X - MeanX) * (Y - MeanY) end, Points)).
-
-standard_deviation(Samples, Mean) ->
- math:sqrt(sum(lists:map(
- fun(Item) -> math:pow(Item - Mean, 2) end,
- Samples))).
-
-r_value(Points) ->
- Xs = lists:map(fun({X,_}) -> X end, Points),
- Ys = lists:map(fun({_,Y}) -> Y end, Points),
- MeanX = mean(Xs),
- MeanY = mean(Ys),
- Covariance = covariance(Points, MeanX, MeanY),
- StandardDeviationX = standard_deviation(Xs, MeanX),
- StandardDeviationY = standard_deviation(Ys, MeanY),
- Covariance / StandardDeviationX / StandardDeviationY.
-
-frequency([],Result) -> Result;
-frequency([Head|Tail],Result) ->
- frequency(Tail,dict:update_counter(Head,1,Result)).
-
-frequency(Sample) -> frequency(Sample, dict:new()).
-
-fetch_values(Dict) -> lists:map(
- fun({_,Value}) -> Value end,
- dict:to_list(Dict)).
-
-frequencies_to_scatterplot(Fx,Fy) ->
- FxPoints = dict:map(fun(_,Value) -> {Value,0} end, Fx),
- FyPoints = dict:map(fun(_,Value) -> {0,Value} end, Fy),
- KeysToPoints = dict:merge(
- fun(_,{X,_},{_,Y}) -> {X,Y} end,
- FxPoints,
- FyPoints),
- fetch_values(KeysToPoints).