Beregning av optimalt antall kasser i et histogram

Jeg er interessert i å finne en så optimal metode som mulig for å bestemme hvor mange kasser jeg skal bruke i en histogram. Dataene mine skal maksimalt variere fra 30 til 350 objekter, og spesielt prøver jeg å bruke terskelverdier (som Otsus metode) der «gode» objekter, som jeg burde ha færre av og burde være mer spredt, er atskilt fra «dårlige» objekter, som burde ha en tettere verdi. En konkret verdi vil ha en score på 1-10 for hvert objekt. Jeg hadde 5-10 objekter med poeng 6-10 og 20-25 objekter med poeng 1-4. Jeg vil finne et histogram binning mønster som generelt gjør at noe i likhet med Otsus metode terskler av objekter med lav poengsum. Imidlertid, i implementeringen av Otsus «s» jeg har sett, var søppelstørrelsen 256, og ofte har jeg mange færre datapunkter som 256, noe som for meg antyder at 256 ikke er et godt binummer. Med så få data, hvilke tilnærminger bør jeg ta for å beregne antall søppelbøtter som skal brukes?

Kommentarer

  • Jeg tror at det ryker ‘ -regelen kan brukes til n < 200; hvor n er antall observasjoner

Svar

Freedman-Diaconis -regelen er veldig robust og fungerer bra i praksis. Skuffbredden er satt til $ h = 2 \ times \ text {IQR} \ times n ^ {- 1/3} $ . Antall søppelkasser er $ (\ max- \ min) / h $ , der $ n $ er antall observasjoner, max er maksimumsverdien og min er minimumsverdien.

I base R kan du bruke:

 hist(x, breaks="FD")  

For andre plottbiblioteker uten dette alternativet (f.eks. ggplot2), kan du beregne binbredde som:

 bw <- 2 * IQR(x) / length(x)^(1/3) ### for example ##### ggplot() + geom_histogram(aes(x), binwidth = bw)  

Kommentarer

  • @nico. Standard i R er pauser = » Stirrer » som ikke alltid gir gode resultater.
  • Hvordan gjør man beregne IQR?
  • @KurtMueller IQR betyr interkvartil rekkevidde. Se etter 1. kvartil og 3. kvartil, og forskjellen er IQR. IQR kommer allerede med R, slik at du kan bruke den.
  • Hvis jeg ikke tar feil, bør svaret lese num_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
  • nclass.FD eksisterte ikke for ni år siden.

Svar

Hvis du bruker for få kasser, viser histogrammet ikke dataene veldig bra. Hvis du har for mange kasser, får du et ødelagt kamutseende, som ikke gir en følelse av fordelingen.

En løsningen er å lage en graf som viser hver verdi. Enten et prikkplott eller en kumulativ frekvensfordeling som ikke krever noen kasser.

Hvis du vil lage en frekvensfordeling med jevnt mellomrom, må du bestemme hvor mange kasser (eller bredden avgjørelsen avhenger helt klart av antall verdier. Hvis du har mange verdier, vil grafen din se bedre ut og være mer informativ hvis du har mange søplett. Dette wikipedia-siden viser flere metoder for å bestemme søppelbredden ut fra antall observasjoner. Den enkleste metoden er å angi antall søppel som er lik kvadratroten av antall verdier du binner.

Denne siden fra Hideaki Shimazaki forklarer en alternativ metode. Den er litt mer komplisert å beregne, men ser ut til å gjøre en god jobb. Den øverste delen av siden er en Java-app. Bla forbi den for å se teorien og forklaringen, og fortsett å bla for å finne lenker til papirene som forklarer metoden.

Kommentarer

Svar

Kanskje papiret « Variasjoner på histogrammet «av Denby og Mallows vil være av interesse:

Denne nye skjermen som vi kaller» dhist «(for diagonalt -kutt histogram) bevarer de ønskelige funksjonene i både hist med samme bredde og hist med samme område. Det vil vise høye smale søppel som ea hist når det er pigger i dataene og vil vise isolerte avvikere akkurat som det vanlige histogrammet.

De nevner også den koden i R er tilgjengelig på forespørsel.

Svar

Så du Shimazaki-Shinomoto -metoden?

Selv om det ser ut til å være beregningsdyr, kan det gi deg gode resultater. Det er verdt å prøve hvis beregningstid ikke er problemet ditt.Det er noen implementeringer av denne metoden i java, MATLAB, etc, i følgende lenke, som går raskt nok: web-interface

Kommentarer

Svar

Jeg er ikke sikker på at dette regnes som god praksis, men jeg pleier å produsere mer enn ett histogram med forskjellige binbredder og velge histogrammet som histogrammet skal bruk basert på hvilket histogram som passer den tolkningen jeg prøver å kommunisere best. Selv om dette introduserer noe subjektivitet i valget av histogram, begrunner jeg det på grunnlag av at jeg har hatt mye mer tid til å forstå dataene enn personen jeg gir histogrammet til, så jeg må gi dem en veldig kortfattet melding.

Jeg er også en stor fan av å presentere histogrammer med samme antall punkter i hver søppel i stedet for samme søppelbredde. Jeg synes vanligvis disse representerer dataene langt bedre enn den konstante søppelbredden, selv om de er vanskeligere å produsere.

Kommentarer

  • beklager, jeg burde ha nevnt at jeg trenger å gjøre dette på en automatisert måte. muligheten for » å gjøre det flere ganger til jeg finner den som passer best for mitt formål » vant ‘ ikke jobbe for meg. må gjøres beregningsmessig …
  • Jeg er enig – ideen om at det er en » optimal » bredde er en enorm forenkling antakelse.

Svar

Hvis jeg trenger å bestemme antall søppelbøtter programmatisk, pleier jeg å begynn med et histogram som har mye mer søppelbøtter enn nødvendig. Når histogrammet er fylt, kombinerer jeg søppelkasser til jeg har nok oppføringer per søppel for metoden jeg bruker, f.eks. hvis jeg vil modellere Poisson-usikkerheter i et telleeksperiment med usikkerhet fra en normalfordeling til jeg har mer enn noe som 10 oppføringer.

Svar

Vennligst se dette svaret som et komplement til Mr. Rob Hyndmans svar .

For å lage histogramdiagrammer med nøyaktig samme intervaller eller «binwidths» ved hjelp av Freedman – Diaconis-regelen enten med grunnleggende R- eller ggplot2 -pakke, kan vi bruke en av verdiene til hist() -funksjonen nemlig breaks. Anta at vi vil lage et histogram på qsec fra mtcars data ved bruk av Freedman – Diaconis-regelen. I grunnleggende R bruker vi

x <- mtcars$qsec hist(x, breaks = "FD") 

I mellomtiden, i ggplot2 pakke bruker vi

h <- hist(x, breaks = "FD", plot = FALSE) qplot(x, geom = "histogram", breaks = h$breaks, fill = I("red"), col = I("white")) 

Eller alternativt

ggplot(mtcars, aes(x)) + geom_histogram(breaks = h$breaks, col = "white") 

Alle genererer histogramdiagrammer med nøyaktig samme intervaller og antall søppel som beregnet.

Svar

I har 600 observasjoner for Au g / t. Bin størrelse 1 gir meg dette: skriv inn bildebeskrivelse her

Automatisk valg (utelat søppelområdet) gir dette: skriv inn bildebeskrivelse her

Dataene ser O «K ut på første og andre graf, som om det er ikke noe problem med dataintegritet. Bare søppelstørrelse 0,1 (g / t) svarer på spørsmålet: målingene var både unøyaktige og upresise skriv inn bildebeskrivelse her

Min vurdering: 1. Det er ingen måleteknikk på jorden for å vise den virkelige verdien av naturfenomenet. Alle målinger er omtrentlige, noen er nær den sanne verdien. Det avhenger av prøvetakingsdesign, kalibrering, menneskelige kvalifikasjoner osv. 2. Dette er grunnen til at distribusjonen er skjev i stedet for symmetrisk. 3. Likevel, formen på distribusjonen skal ligne en «bjellignende» seksjon, i det minste omtrent. En bjelle om gangen (med mindre det er flere geologiske miljøer). 4. Frekvensfordeling med søppelstørrelsesmanipulering kan bidra til å avsløre mønster på hvor nøyaktig og nøyaktig hadde målingene blitt utført. Slik at man trenger en eksperimentell plukking av søppelstørrelsen snarere enn en regel som er kuttet på stein.

Kommentarer

  • Dette er mer en kommentar enn en svar med mindre du stave ut moralen. Jeg ‘ Jeg sier at moral er dette: Alle regler er tommelfingerregler, noen har mer statistisk grunnlag enn andre, men de fleste regler gjør kanskje ikke det du ønsker hvis distribusjoner har veldig høy skjevhet eller kurtose. Så bruk dommen din også.
  • Du har lagt til kommentarer, men det er ikke klart at noen bidrar med nyttige nye detaljer til tråden. 1.er bra for meg, men ikke problemet her. 2. følger ikke ‘ fra 1. da noen distribusjoner er nesten symmetriske. 3. er tvilsom: det er mange situasjoner der det forventes andre former enn bjeller. 4. er også tvilsom ettersom kvaliteten på de opprinnelige målingene ofte ikke fremgår av noe histogram, men ofte best undersøkt med hensyn til den meget fine strukturen til en distribusjon.
  • 2.Nesten symmetrisk er ikke symmetrisk. Du kan ikke være nær gravid: enten gravid eller ikke.
  • Visst, men nøyaktig symmetri i data er så veldig sjelden at hvis jeg hadde sagt » symmetrisk » noen kan med rimelighet motsette seg det også. Det ‘ er veldig lett å være nesten symmetrisk; det er derfor og hvordan vi har målinger av skjevhet.
  • Merket, men kommentaren din var generell og manglet den sammenhengen du nå gir. I sin tur sa jeg » tvilsom » ikke » feil «. Min største kommentar er fortsatt at svaret ditt ikke ‘ ikke virkelig legger mye til tråden om hvordan du velger søppelstørrelse eller tilsvarende antall søpla. Å ha et annet eksempel der det ‘ er vanskelig, er en vri på spørsmålet, ikke egentlig et svar.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *