Ik “ben geïnteresseerd in het vinden van een zo optimaal mogelijke methode om te bepalen hoeveel bakken ik in een histogram. Mijn gegevens moeten variëren van 30 tot maximaal 350 objecten, en in het bijzonder probeer ik drempels toe te passen (zoals de methode van Otsu) waar goede objecten, waarvan ik er minder zou moeten hebben en die meer verspreid zouden moeten zijn, worden gescheiden van “slechte” objecten, die een hogere waarde zouden moeten hebben. Een concrete waarde zou een score van 1-10 hebben voor elk object. Ik “had 5-10 objecten gehad met scores 6-10 en 20-25 objecten met scores 1-4. Ik zou graag een histogram-binning-patroon willen vinden waarmee zoiets als de methode van Otsu over het algemeen de laag scorende objecten kan uitschakelen. Bij de implementatie van Otsus die ik echter heb gezien, was de bin-grootte 256, en vaak heb ik veel minder datapunten dan 256, wat voor mij suggereert dat 256 geen goed bin-nummer is. Met zo weinig gegevens, welke benaderingen moet ik nemen om het aantal te gebruiken bakken te berekenen?
Opmerkingen
- Ik denk dat Sturges ‘ regel kan worden gebruikt voor n < 200; waarbij n het aantal waarnemingen is
Antwoord
De Freedman-Diaconis is zeer robuust en werkt goed in de praktijk. De bin-breedte is ingesteld op $ h = 2 \ times \ text {IQR} \ times n ^ {- 1/3} $ . Het aantal bakken is dus $ (\ max- \ min) / h $ , waarbij $ n $ is het aantal waarnemingen, max is de maximumwaarde en min is de minimumwaarde.
In basis R kun je gebruiken:
hist(x, breaks="FD")
Voor andere plotbibliotheken zonder deze optie (bijv. ggplot2
), kunt u binwidth berekenen als:
bw <- 2 * IQR(x) / length(x)^(1/3) ### for example ##### ggplot() + geom_histogram(aes(x), binwidth = bw)
Reacties
- @nico. De standaardwaarde in R is breaks = ” Sturges ” wat niet altijd goede resultaten oplevert.
- Hoe doe je dat bereken
IQR
? - @KurtMueller IQR betekent interkwartielbereik. Zoek naar het 1e kwartiel en het 3e kwartiel en het verschil is IQR. IQR wordt al geleverd met R, dus je kunt het gebruiken.
- Als ik me niet vergis, zou het antwoord moeten zijn
num_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
-
nclass.FD
bestond negen jaar geleden niet.
Antwoord
Als u te weinig bakken geeft het histogram de gegevens niet echt goed weer. Als je te veel bakken hebt, krijg je een kapotte kamlook, die ook geen idee geeft van de verdeling.
Een oplossing is om een grafiek te maken die elke waarde laat zien. Ofwel een puntplot, of een cumulatieve frequentieverdeling, waarvoor geen bakken nodig zijn.
Als u een frequentieverdeling wilt creëren met bakken met gelijke tussenafstanden, moet u beslissen hoeveel bakken (of de breedte van elk). De beslissing hangt duidelijk af van het aantal waarden. Als u veel waarden heeft, ziet uw grafiek er beter uit en is hij informatiever als u veel opslaglocaties heeft. Dit wikipedia-pagina bevat verschillende methoden voor het bepalen van de bakbreedte op basis van het aantal waarnemingen. De eenvoudigste methode is om het aantal bakken gelijk te stellen aan de vierkantswortel van het aantal waarden dat u aan het verzamelen bent.
Deze pagina van Hideaki Shimazaki legt een alternatieve methode uit. Het is een beetje ingewikkelder om te berekenen, maar lijkt uitstekend werk te leveren. Het bovenste deel van de pagina is een Java-app. Scroll daar voorbij om de theorie en uitleg te zien, en blijf scrollen om links te vinden naar de artikelen die de methode uitleggen.
Opmerkingen
- De link naar Hideaki ‘ s pagina is verbroken. Ik ‘ m niet zeker of dit hetzelfde is: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
Antwoord
Misschien is de krant “ Variaties op het histogram “door Denby and Mallows zullen interessant zijn:
Deze nieuwe weergave die we” dhist “noemen (voor diagonaal -cut histogram) behoudt de gewenste kenmerken van zowel de hist met gelijke breedte als de hist met gelijke oppervlakte. Het toont hoge, smalle bakken zoals de ea hist wanneer er pieken in de gegevens zijn en toont geïsoleerde uitschieters, net als het gebruikelijke histogram.
Ze vermelden ook die code in R is op verzoek beschikbaar.
Answer
Heb je de Shimazaki-Shinomoto -methode?
Hoewel het rekenkundig duur lijkt, kan het u goede resultaten opleveren. Het is de moeite waard om het eens te proberen als rekentijd niet jouw probleem is.Er zijn enkele implementaties van deze methode in java, MATLAB, enz., In de volgende link, die snel genoeg werkt: webinterface
Opmerkingen
- Hier is een implementatie: gist.github.com/salotz/0158a99a75078b47538452111ec0faa2 . En ja, het is duurder omdat u een bereik kiest voor het aantal bakken en u voor elk een histogram moet maken en vervolgens de kosten moet berekenen, en vervolgens de minst kostbare kiest.
Answer
Ik “weet niet zeker of dit strikt een goede gewoonte is, maar ik heb de neiging om meer dan één histogram met verschillende bakbreedten te produceren en het histogram te kiezen dat gebruik op basis van welk histogram past bij de interpretatie die ik het beste probeer te communiceren. Hoewel dit enige subjectiviteit introduceert in de keuze van het histogram, rechtvaardig ik het met de basis dat ik veel meer tijd heb gehad om de gegevens te begrijpen dan de persoon aan wie ik het histogram geef, dus ik moet ze een heel beknopt bericht geven.
Ik ben ook een grote fan van het presenteren van histogrammen met hetzelfde aantal punten in elke bak in plaats van dezelfde bakbreedte. Ik vind meestal dat deze de gegevens veel beter weergeven dan de constante bakbreedte, hoewel ze moeilijker te produceren zijn.
Reacties
- sorry, ik had moeten zeggen dat ik dit op een geautomatiseerde manier moet doen. de optie om ” het meerdere keren te doen totdat ik degene vind die het beste bij mijn doel past ” won ‘ werkt niet voor mij. moet rekenkundig worden gedaan …
- Ik ben het ermee eens – het idee dat er één ” optimale ” bin is breedte is een enorm vereenvoudigende aanname.
Antwoord
Als ik het aantal bakken programmatisch moet bepalen, doe ik dat meestal begin met een histogram met veel meer bakken dan nodig. Zodra het histogram is gevuld, combineer ik bakken totdat ik genoeg invoer per bak heb voor de methode die ik gebruik, bijv. als ik Poisson-onzekerheden wil modelleren in een telexperiment met onzekerheden van een normale verdeling tot ik meer dan zoiets als 10 invoeren heb.
Antwoord
Zie dit antwoord als een aanvulling op Mr. Rob Hyndman “s antwoord .
Om histogramplots te maken met exact dezelfde intervallen of “binwidths” met behulp van het Freedman – Diaconis-regel ofwel met basis R- of ggplot2
-pakket, we kunnen er een gebruiken van de waarden van de hist()
functie namelijk breaks
. Stel dat we een histogram willen maken van qsec
van mtcars
gegevens met behulp van de Freedman – Diaconis regel. In basis R gebruiken we
x <- mtcars$qsec hist(x, breaks = "FD")
Ondertussen, in ggplot2
pakket dat we gebruiken
h <- hist(x, breaks = "FD", plot = FALSE) qplot(x, geom = "histogram", breaks = h$breaks, fill = I("red"), col = I("white"))
Of, alternatief
ggplot(mtcars, aes(x)) + geom_histogram(breaks = h$breaks, col = "white")
Ze genereren allemaal histogramplots met exact dezelfde intervallen en hetzelfde aantal bakken als bedoeld.
Antwoord
I hebben 600 waarnemingen voor Au g / t. Bin-grootte 1 geeft me dit:
Automatische selectie (laat het bin-bereik weg) geeft het volgende:
De gegevens zien er O “K uit in de eerste en tweede grafiek, alsof er is geen probleem met de gegevensintegriteit. Alleen bakgrootte 0,1 (g / t) beantwoordt de vraag: de metingen waren zowel onnauwkeurig als onnauwkeurig
Mijn oordeel: 1. Er is geen meettechniek op aarde om de ware waarde van natuurverschijnselen aan te tonen. Alle metingen zijn bij benadering, sommige liggen dicht bij de werkelijke waarde. Het hangt af van het ontwerp van de steekproef, de kalibratie, de menselijke kwalificaties, enz. 2. Daarom is de verdeling scheef in plaats van symmetrisch. Niettemin moet de vorm van de distributie op zijn minst ongeveer lijken op een “klokachtig” gedeelte. Eén bel per keer (tenzij er meerdere geologische omgevingen zijn). 4. Frequentiedistributie met de manipulatie van de bakgrootte kan helpen om een patroon te onthullen over hoe nauwkeurig en nauwkeurig de metingen waren gedaan. Zodat men een experimentele picking van de bakmaat nodig heeft in plaats van een regel die op steen is gehouwen.
Opmerkingen
- Dit is meer een opmerking dan een antwoord tenzij je de moraal beschrijft. Ik ‘ d zeg dat de moraal het volgende is: alle regels zijn vuistregels, sommige hebben meer statistische basis dan andere, maar de meeste regels doen mogelijk niet wat je wilt als distributies erg scheef zijn of kurtosis. Gebruik dus ook je oordeel.
- Je hebt opmerkingen toegevoegd, maar het is niet duidelijk of er nuttige nieuwe details aan de discussie worden toegevoegd. 1.is prima voor mij, maar niet het probleem hier. 2. volgt niet ‘ niet uit 1. aangezien sommige distributies bijna symmetrisch zijn. 3. is twijfelachtig: er zijn veel situaties waarin andere vormen dan bellen worden verwacht. 4. is ook twijfelachtig, aangezien de kwaliteit van de oorspronkelijke metingen vaak niet duidelijk is uit een histogram, maar vaak het beste kan worden onderzocht met aandacht voor de zeer fijne structuur van een verdeling.
- 2. Bijna symmetrisch is niet symmetrisch. Je kunt bijna niet zwanger zijn: zwanger of niet.
- Zeker, maar exacte symmetrie in gegevens is zo zeldzaam dat als ik ” symmetrisch ” iemand kan daar redelijkerwijs ook bezwaar tegen hebben. Het ‘ is heel gemakkelijk bijna symmetrisch; dat is waarom en hoe we maten van scheefheid hebben.
- Opgemerkt, maar uw opmerking was algemeen en miste de context die u nu geeft. Op mijn beurt zei ik ” twijfelachtig ” niet ” verkeerd “. Mijn belangrijkste opmerking blijft dat je antwoord ‘ niet echt veel toevoegt aan de discussie over het kiezen van de bakgrootte of het equivalente aantal bakken. Een ander voorbeeld hebben waarin het ‘ s moeilijk is, is een draai aan de vraag, niet echt een antwoord.