È possibile accumulare una serie di statistiche che descrivono un gran numero di campioni in modo da poter produrre un diagramma a scatole?


22

Devo chiarire immediatamente che sono uno sviluppatore di software praticante, non uno statistico, e che la mia classe di statistiche del college era molto tempo fa ...

Detto questo, vorrei sapere se esiste un metodo per accumulare una serie di statistiche descrittive che potrebbero quindi essere utilizzate per produrre un diagramma a scatole, che non comporta la memorizzazione di un gruppo di singoli campioni?

Quello che sto cercando di fare è produrre un riepilogo grafico dei tempi del servizio di coda all'interno di un complesso processo multi-coda. In passato ho usato un pacchetto chiamato tnftools che ha permesso di accumulare campioni di grandi dimensioni e quindi post-elaborarli in un bel grafico di tempi di risposta e valori anomali ... Ma questi non sono disponibili per la mia piattaforma attuale.

Idealmente, vorrei poter accumulare una serie di statistiche descrittive "al volo" durante l'esecuzione del processo e quindi estrarre i dati per l'analisi su richiesta. Ma non posso semplicemente fare in modo che il processo accumuli campioni poiché la memoria / I / O coinvolta nel fare ciò avrebbe un impatto inaccettabile sulle prestazioni del sistema.


Kaelin:> vuoi dire se esiste un metodo "al volo" per calcolare statistiche riassuntive come mediana e quartili? Se questo è quello che vuoi, potrei darti dei link ai documenti che li descrivono. Potresti anche fornire maggiori dettagli sulle piattaforme su cui stai lavorando poiché l'implementazione GNU efficiente di questi metodi probabilmente esiste in R.
user603

@kwak: Sì, sembra quello che sto cercando. Gradirei molto quei collegamenti. :-) Sto lavorando su Mac OS X ... posso usare R per i dati di post-elaborazione, ma per i soliti motivi non riesco a collegare il codice GPL al prodotto della mia azienda.
Kaelin Colclasure,

Risposte:


27

Per il diagramma a scatola "al volo", avrai bisogno di quartili "al volo" min / max (banale) e "al volo" (0,25,0,5 = mediana e 0,75).

Di recente è stato svolto molto lavoro sul problema dell'algoritmo online (o "al volo") per il calcolo mediano.

Uno sviluppo recente è binmediano . Come calcio di punizione, gode anche di una migliore complessità nel caso peggiore rispetto alla selezione rapida (che non è né online né single pass).

È possibile trovare la carta associata così come codice C e FORTRAN on-line qui . Potrebbe essere necessario controllare i dettagli della licenza con gli autori.

Sarà inoltre necessario un algoritmo a passaggio singolo per i quartili, per il quale è possibile utilizzare l'approccio sopra e la seguente caratterizzazione ricorsiva dei quartili in termini di mediane:

Q0.75(x)Q0.5(xi:xi>Q0.5(x))

e

Q0.25(x)Q0.5(xi:xi<Q0.5(x))

cioè il quartile del 25 (75) percento è molto vicino alla mediana di quelle osservazioni che sono più piccole (più grandi) della mediana.

Addendum:

Esistono numerosi metodi multi-pass precedenti per il calcolo dei quantili. Un approccio popolare è quello di mantenere / aggiornare un serbatoio di dimensioni deterministiche di osservazioni selezionate casualmente dal flusso e calcolare ricorsivamente i quantili (vedi questa recensione) su questo serbatoio. Questo (e relativo) approccio sono sostituiti da quello proposto sopra.


1
+1 a destra; Ero ancora in età oscura per fare approssimazione dall'istogramma.

Comprendo correttamente che tale definizione ricorsiva di quartili da parte dei mediani richiede due passaggi se implementata in modo ingenuo? Sei a conoscenza di algoritmi single pass?
Quarzo,

@Quartz: no, farà un singolo passaggio: hai due, un singolo passaggio, eseguendo calcoli mediani.
user603

2

Invece di trovare solo la mediana, esiste un algoritmo che mantiene direttamente un istogramma stimato: " l'algoritmo del quadrato P per il calcolo dinamico di quantili e istogrammi senza memorizzare le osservazioni". Questo sarà probabilmente molto più efficiente del ripetuto binning per ogni quantile che desideri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.