Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 숫자 배열의 분산(Variance) 계산하기

문제

오름차순으로 정렬된 숫자 배열을 인수로 받아, 해당 배열의 분산(variance)을 계산하는 JavaScript 함수를 작성해야 합니다.

분산은 숫자 집합이 평균으로부터 얼마나 흩어져 있는지를 나타내는 통계적 척도입니다. 각 데이터 값과 평균 사이의 차이(편차)를 제곱한 뒤, 그 값들을 모두 더하고 데이터 개수로 나누어 구합니다.

먼저 평균(M)은 다음과 같이 계산합니다.

$Mean (M) = ( \sum_{i=0}^{n-1} arr[i])$ / n

그리고 분산(V)은 다음 공식으로 구합니다.

$Variance (V) = $(\sum_{i=0}^{n-1} (arr[i] - M)^2)$ / n

예시 코드

다음은 위 공식을 JavaScript로 구현한 코드입니다.

const arr = [4, 6, 7, 8, 9, 10, 10];
const findVariance = (arr = []) => {
   if(!arr.length){
      return 0;
   };
   const sum = arr.reduce((acc, val) => acc + val);
   const { length: num } = arr;
   const median = sum / num;
   let variance = 0;
   arr.forEach(num => {
      variance += ((num - median) * (num - median));
   });
   variance /= num;
   return variance;
};
console.log(findVariance(arr))

출력 결과

4.204081632653061

코드 동작 원리

위 코드의 실행 과정을 단계별로 살펴보면 다음과 같습니다.

1단계 — 빈 배열 처리: 배열이 비어 있으면 분산을 계산할 수 없으므로 0을 반환하여 오류를 방지합니다.

2단계 — 합계 및 평균 계산: reduce() 메서드로 배열 요소의 총합을 구한 뒤, 요소 개수로 나누어 평균(median 변수)을 계산합니다.

3단계 — 편차 제곱의 합: forEach()로 각 요소를 순회하면서 (요소값 − 평균)² 을 누적합니다.

4단계 — 분산 산출: 누적된 편차 제곱의 합을 요소 개수로 나누어 최종 분산 값을 반환합니다.

참고: 모분산과 표본분산

위 코드는 전체 데이터를 대상으로 하는 모분산(population variance) 방식으로, 편차 제곱의 합을 n으로 나눕니다. 반면 표본 데이터의 분산(표본분산, sample variance)을 구하려면 불편 보정을 위해 n이 아닌 (n - 1)로 나누어야 합니다. 필요에 따라 마지막 줄을 variance /= num - 1;로 수정하면 됩니다.