2009-09-26 10 views
8

처리에서 생성 된 두 세트의 통계가 있습니다. 처리 된 데이터는 많은 양의 결과가 될 수 있으므로 나중에 모든 데이터를 저장하지 않아도 나중에 추가 데이터를 다시 계산할 수 있습니다.두 개의 통계 결과 세트 병합

말 프로세스에 대한 두 가지 실행 세션을 설명하는 두 가지 통계 집합이 있습니다.

각 세트는 내가 통계의 두 기술 세트의 결합 요약을 얻기 위해 2의 평균 및 표준 편차를 병합 할 방법

Statistics : { mean, median, standard deviation, runs on process} 

가 포함되어 있습니다.

통계가 설명하는 두 데이터 집합을 모두 보존 할 수는 없습니다.

답변

20

평균 및 표준 편차는 얻을 수 있지만 중간 값은 얻을 수 없습니다. 단지 표준 편차이다 (n(0) 첫 번째 데이터 세트의 실행의 개수

new_n = (n(0) + n(1) + ...) 
new_mean = (mean(0)*n(0) + mean(1)*n(1) + ...)/new_n 

new_var = ((var(0)+mean(0)**2)*n(0) + (var(1)+mean(1)**2)*n(1) + ...)/new_n - new_mean**2 

, n(1) 번째의 런 수, 등, mean는 평균값이며, var가 분산이며 제곱). n**2은 "n 제곱"을 의미합니다.

결합 된 분산을 얻는 것은 데이터 세트의 분산이 데이터 세트의 제곱 평균에서 데이터 세트의 평균 제곱을 뺀 것과 같다는 사실에 달려 있습니다. 통계 언어로,

Var(X) = E(X^2) - E(X)^2 

var(n)+mean(n)**2 용어

위의 우리에게 우리가 다음 다른 데이터 세트와 결합하고 원하는 결과를 얻을 수 E(X^2) 부분을 제공합니다.

는 중간 값의 측면에서

:

당신이, 당신이 결합 된 평균 두 중간 값 사이의 어딘가에 놓여 있음을 특정 (또는 그 중 하나 동일) 할 수 있습니다 정확히 두 개의 데이터 세트를 결합하는 경우,하지만 거의 없다 더 말할 수 있습니다. 평균값을 취하는 것은 중간 값이 어떤 데이터 요소와 동일하지 않도록하려는 경우가 아니라면 OK 여야합니다.

한 번에 많은 데이터 세트를 결합하려는 경우 중앙값의 중간 값을 취하거나 평균값을 취할 수 있습니다. 서로 다른 데이터 세트간에 상당한 체계적 차이가있을 수있는 경우 중앙값을 취하면 외재 값의 영향이 줄어들 기 때문에 평균을 취하는 것이 좋습니다. 그러나 달리기 사이에 체계적인 차이가 있다면 무시하는 것이 좋지 않을 것입니다.

3

중간 값을 사용할 수 없습니다. 두 개의 튜플 (1, 1, 1, 2)과 (0, 0, 2, 3, 3)이 있다고 가정 해보십시오. 중앙값은 1과 2이며, 전반적인 중간 값은 1입니다. 말할 길이 없습니다.

23

Artelius는 수학적으로 옳지 만, 분산을 계산하는 방법은 수치 적으로 불안정합니다. 코멘트
원래 코드의 문제를에서

new_var=(n(0)*(var(0)+(mean(0)-new_mean)**2) + n(1)*(var(1)+(mean(1)-new_mean)**2) + ...)/new_n 

편집하여 편차가 평균에 비해 작은 경우, 당신은에서 많은 수를 뺀 끝날 것입니다 : 다음과 같이 분산을 계산하려면 부동 소수점 정밀도를 잃을 수있는 상대적으로 작은 숫자를 얻기 위해 큰 숫자.새로운 코드는이 문제를 피합니다. E (X^2)로 변환하지 않고 전체 분산에 모든 기여도를 합산하고 샘플 크기에 따라 적절하게 가중치를 부여합니다.

+0

좋은 지적이지만 약간 확장 할 수 있습니까? – Artelius

+9

예. 원래 코드의 문제점은 편차가 평균에 비해 작 으면 큰 숫자에서 많은 수를 빼서 상대적으로 작은 수를 얻음으로써 부동 소수점 정밀도를 잃을 수 있다는 것입니다. 새로운 코드는이 문제를 피합니다. E (X^2)로 변환하지 않고 전체 분산에 모든 기여도를 합산하고 샘플 크기에 따라 적절하게 가중치를 부여합니다. 당신의 대답과 논평은 – comingstorm

+1

+1입니다. 둘 다 자리를 잡고 아주 잘 쓰여 있습니다. – duffymo