2009-09-26 11 views
8

Ho due serie di statistiche generate dall'elaborazione. I dati dall'elaborazione possono essere una grande quantità di risultati quindi preferirei non dover memorizzare tutti i dati per ricalcolare i dati aggiuntivi in ​​seguito.Unione di due set di risultati statistici

Dire che ho due serie di statistiche che descrivono due diverse sessioni di esecuzioni su un processo.

Ogni set contiene

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

Come faccio a unire le due della mediana, e la deviazione standard per ottenere un riepilogo combinata dei due gruppi che descrivono di statistiche.

Ricordare, non è possibile conservare entrambi i gruppi di dati che le statistiche stanno descrivendo.

risposta

20

È possibile ottenere la media e la deviazione standard, ma non la mediana.

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 

dove n(0) è il numero di run nella prima serie di dati, n(1) è il numero di cicli al secondo, e così via, mean è la media, e var è la varianza (che è appena deviazione standard quadrato). n**2 significa "n al quadrato".

Ottenere la varianza combinata si basa sul fatto che la varianza di un set di dati è uguale alla media del quadrato dell'insieme di dati meno il quadrato della media dell'insieme di dati. Nel linguaggio statistico,

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

I var(n)+mean(n)**2 termini sopra ci dà la porzione E(X^2) quale possiamo poi combinarsi con altri insiemi di dati, e quindi ottenere il risultato desiderato.

In termini di mediane:

Se si combinano esattamente due insiemi di dati, allora si può essere certi che la mediana combinato trova da qualche parte tra le due mediane (o uguale a uno di loro), ma c'è poco più che puoi dire. Prendendo la loro media dovrebbe essere OK a meno che non si voglia evitare che la mediana non sia uguale a qualche punto di dati.

Se si combinano molti set di dati in una volta sola, è possibile prendere la mediana delle mediane o la media. Se ci possono essere significative differenze sistematiche tra i diversi set di dati, quindi la loro media è probabilmente migliore, poiché prendere la mediana riduce l'effetto dei valori anomali. Ma se hai delle differenze sistematiche tra le esecuzioni, ignorarle non è probabilmente una buona cosa da fare.

3

La mediana non è possibile. Supponi di avere due tuple, (1, 1, 1, 2) e (0, 0, 2, 3, 3). Le mediane sono 1 e 2, la mediana complessiva è 1. Nessun modo di dire.

23

Artelius ha matematicamente ragione, ma il modo in cui suggerisce di calcolare la varianza è numericamente instabile. Si vuole calcolare la varianza come segue:

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

Modifica dal commento
Il problema con il codice originale è, se la vostra deviazione è piccolo rispetto alla tua media, si finirà per sottrarre un gran numero da un numero elevato per ottenere un numero relativamente piccolo, che ti farà perdere precisione in virgola mobile.Il nuovo codice evita questo problema; piuttosto che convertire in E (X^2) e indietro, aggiunge semplicemente tutti i contributi alla varianza totale insieme, correttamente ponderati in base alla loro dimensione del campione.

+0

Buon punto, ma potresti espanderci un po '? – Artelius

+9

Sicuro. Il problema con il codice originale è, se la tua deviazione è piccola rispetto alla media, finirai per sottrarre un numero elevato da un numero elevato per ottenere un numero relativamente piccolo, che ti farà perdere la precisione in virgola mobile. Il nuovo codice evita questo problema; piuttosto che convertire in E (X^2) e indietro, aggiunge semplicemente tutti i contributi alla varianza totale insieme, correttamente ponderati in base alla loro dimensione del campione. – comingstorm

+1

+1 per la tua risposta e commento. Entrambi sono chiari e molto ben scritti. – duffymo