2009-09-26 3 views
8

У меня есть два набора статистических данных, полученных при обработке. Данные обработки могут быть большим количеством результатов, поэтому я бы предпочел не хранить все данные для повторного пересчета дополнительных данных.Слияние двух статистических наборов результатов

Скажем, у меня есть два набора статистических данных, которые описывают два разных сеанса работы над процессом.

Каждый набор содержит

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

Как бы объединить эти два в медиану и стандартное отклонение, чтобы получить комбинированную сводку два описывающих наборов статистики.

Помните, что я не могу сохранить оба набора данных, которые описывают статистика.

ответ

20

Вы можете получить среднее и стандартное отклонение, но не медианное.

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(0) это число трасс в первом наборе данных, n(1) это число трасс в секунду, и так далее, mean является средним и var является дисперсией (который является только стандартное отклонение в квадрате). n**2 означает «n квадрат».

Получение комбинированной дисперсии зависит от того, что дисперсия набора данных равна среднему значению квадрата набора данных минус квадрат среднего набора данных. В статистическом языке,

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

The var(n)+mean(n)**2 выше терминов дает нам E(X^2) часть, которую мы можем комбинировать с другими наборами данных, а затем получить желаемый результат.

С точки зрения медиан:

При совмещении ровно два набора данных, то вы можете быть уверены, что в сочетании медиана лежит где-то между этими двумя медианы (или равно одному из них), но есть немного больше, что вы можете сказать. Принимая их среднее значение должно быть ОК, если вы не хотите, чтобы медиана не была равна некоторой точке данных.

Если вы комбинируете множество наборов данных за один раз, вы можете либо взять медиану медиан, либо принять среднее значение. Если между различными наборами данных могут быть существенные системные различия, то, по-видимому, их среднее значение, вероятно, лучше, так как принятие медианного уменьшает эффект выбросов. Но если у вас есть систематические различия между прогонами, игнорирование их, вероятно, не очень хорошо.

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

Смежные вопросы