Get Mean and Standard Deviation from an Array of Numbers Using Vanilla JavaScript
One way to get the mean and the standard deviation from an array of numbers is to use math.js.
<script src = "https://cdnjs.cloudflare.com/ajax/libs/mathjs/10.1.1/math.js"></script> <script> var arr = [1,2,3]; console.log(math.mean(arr)); // returns 2 console.log(math.std(arr)); // returns 1 </script>
What if we don't want to use any third party libraries.
We can build our own mean or standard deviation calculation function using
vanilla JavaScript.
Mean
function getMean(array){
var total = 0;
array.forEach(x=>{
total += x;
});
return total/array.length;
};
Standard Deviation Unbiased
function getStd(array){
var total = 0;
var l = array.length;
array.forEach(x=>{
total += x;
});
var mean = total/l;
var squareErrors = 0.;
array.forEach(x=>{
squareErrors += Math.pow(x-mean,2);
});
return Math.sqrt(squareErrors/(l-1));
};
Standard Deviation Biased
function getStdBiased(array){
var total = 0;
var l = array.length;
array.forEach(x=>{
total += x;
});
var mean = total/l;
var squareErrors = 0.;
array.forEach(x=>{
squareErrors += Math.pow(x-mean,2)
});
return Math.sqrt(squareErrors/l)
};
Variance Unbiased
function getVarianceUnbiased(array){
var total = 0;
var l = array.length;
array.forEach(x=>{
total += x;
});
var mean = total/l;
var squareErrors = 0.;
array.forEach(x=>{
squareErrors += Math.pow(x-mean,2)
});
return squareErrors/(l-1);
};
Variance Biased
function getVarianceBiased(array){
var total = 0;
var l = array.length;
array.forEach(x=>{
total += x;
});
var mean = total/l;
var squareErrors = 0.;
array.forEach(x=>{
squareErrors += Math.pow(x-mean,2)
});
return squareErrors/l;
};
We can also use the magical array.reduce method.
Mean
var myMean = somearray.reduce((a,b,c,d)=>{
if(c == d.length-1){
return (a+b)/d.length;
};
return a+b;
});
Standard Deviation Unbiased
var myStd = somearray.reduce((a,b,c,d)=>{
var l = d.length;
if(c == l-1){
var mean = (a+b)/d.length;
var squareErrors = 0;
for(let i = 0; i < l; i++){
squareErrors += Math.pow(d[i]-mean,2);
};
return Math.sqrt(squareErrors/(l-1));
};
return a+b;
});
Standard Deviation Biased
var myStd = somearray.reduce((a,b,c,d)=>{
var l = d.length;
if(c == l-1){
var mean = (a+b)/d.length;
var squareErrors = 0;
for(let i = 0; i < l; i++){
squareErrors += Math.pow(d[i]-mean,2);
};
return Math.sqrt(squareErrors/l);
};
return a+b;
});
Variance Unbiased
var myStd = somearray.reduce((a,b,c,d)=>{
var l = d.length;
if(c == l-1){
var mean = (a+b)/d.length;
var squareErrors = 0;
for(let i = 0; i < l; i++){
squareErrors += Math.pow(d[i]-mean,2);
};
return squareErrors/(l-1);
};
return a+b;
});
Variance Biased
var myStd = somearray.reduce((a,b,c,d)=>{
var l = d.length;
if(c == l-1){
var mean = (a+b)/d.length;
var squareErrors = 0;
for(let i = 0; i < l; i++){
squareErrors += Math.pow(d[i]-mean,2);
};
return squareErrors/l;
};
return a+b;
});
Comments
Post a Comment