Pitanje:
Izračunavanje optimalnog broja kanti u histogramu
Tony Stark
2010-07-27 20:21:48 UTC
view on stackexchange narkive permalink

Zanima me pronalaženje što optimalnije metode za određivanje broja kanti u histogramu. Moji bi se podaci trebali kretati od 30 do 350 objekata, a posebno pokušavam primijeniti pragove (poput Otsuove metode) gdje su "dobri" objekti, kojih bih trebao imati manje, a trebali bi biti više rašireni, odvojeni od " loši "objekti, koji bi trebali biti gušće vrijednosti. Konkretna vrijednost imala bi ocjenu 1-10 za svaki objekt. Imao sam 5-10 predmeta s ocjenama 6-10 i 20-25 predmeta s ocjenama 1-4. Želio bih pronaći uzorak spajanja histograma koji općenito omogućuje nešto poput Otsuove metode za uklanjanje objekata s niskim bodovima. Međutim, u implementaciji Otsu-ovih koje sam vidio, veličina spremnika bila je 256, a često imam mnogo manje podatkovnih točaka od 256, što po meni sugerira da 256 nije dobar broj spremnika. Uz tako malo podataka, koje bih pristupe trebao primijeniti pri izračunavanju broja spremnika koji ću koristiti?

Mislim da se Sturgesovo pravilo može koristiti za n <200;gdje je n broj opažanja
Osam odgovori:
#1
+114
Rob Hyndman
2010-07-28 05:23:22 UTC
view on stackexchange narkive permalink

Pravilo Freedman-Diaconis vrlo je robusno i dobro funkcionira u praksi. Širina koša postavljena je na $ h = 2 \ times \ text {IQR} \ puta n ^ {- 1/3} $ . Dakle, broj kanti je $ (\ max- \ min) / h $ , gdje $ n $ je broj opažanja, max je maksimalna vrijednost, a min je minimalna vrijednost.

U osnovi R možete koristiti:

  hist (x, pauze = "FD")  

Za ostale knjižnice crtanja bez ove opcije (npr. ggplot2 ), možete izračunati širinu binwidha kao:

  bw <- 2 * IQR (x) / length (x) ^ (1/3) ### na primjer ###### ggplot () + geom_histogram (aes (x), binwidth = bw)  
Kao napomena, prema zadanim postavkama (dakle, ako ne navedete `pauze`) R
@nico. Zadana vrijednost u R je break = "Sturges", što ne daje uvijek dobre rezultate.
iz bilo kojeg razloga moj komentar je bio skraćen ... mislio sam napisati "prema zadanim postavkama (dakle, ako ne odredite pauze) R koristi algoritam Sturgesa" ... čudno!
Kako se izračunava `IQR`?
@KurtMueller IQR znači interkvartilni domet.Potražite 1. kvartil i 3. kvartil i razlika je IQR.IQR već dolazi s R, tako da ga možete koristiti.
U R Freedman-Diaconis algoritam je implementiran kao funkcija `nclass.FD` u paketu grDevices (instaliran prema zadanim postavkama).`hist` koristi ovu funkciju kada` koči = "FD" `.
Mislim da ova formula možda neće raditi ako se neki podaci više puta pojave.Uzimanje jednakog ponderiranog prosjeka za repetitivne podatke, na čemu se možda temelji ova formula, procijenilo bi se prema vrijednostima koje se češće javljaju.
Broj dužina (x) je broj promatranja.raspon (x) = c (min (x), max (x)).
Možete dodati više informacija o varijablama.Može uštedjeti vrijeme i brže pomoći ljudima.Što je: n, max, min?
Ako se ne varam, odgovor bi trebao glasiti `num_bins <- diff (range (x)) / (2 * IQR (x) / length (x) ^ (1/3))`
Jeste li pročitali http://users.stat.umn.edu/~gmeeden/papers/hist.pdf?Što mislite o ovom pristupu minimiziranja funkcije u usporedbi s pravilom Freedman-Diaconis?
Jedno ponašanje s kojim sam se susreo s pravilom Freedman Diaconis jest da ako imam dva skupa podataka, jedan je znatno veći od drugog (1000x), od kojih svaki ima samo jedan stupac, oba iz iste distribucije (tj. Isti IQR), ondabroj će smeća biti 10 puta veći u većem skupu. Je li to ponašanje poželjno?Koji bi bili učinci ovog povećanja broja kanti kako se povećava broj opažanja?
O "Kako izračunati IQR?"provjerite http://stat.ethz.ch/R-manual/R-devel/library/stats/html/quantile.html ili https://cran.r-project.org/doc/manuals/fullrefman.pdf str.1571. godine
Trebao bi biti `binwidth <- (2 * IQR (x)) / length (x) ^ (1/3)`
zašto ne istaknuti već implementirani `nclass.FD`?
`nclass.FD` nije postojao prije devet godina.
Isuse Bože, jesmo li tako daleko pali?Što se dogodilo s ocjenjivanjem našim očima?
#2
+20
Harvey Motulsky
2010-07-27 21:17:44 UTC
view on stackexchange narkive permalink

Ako koristite premalo kanti, histogram zapravo ne prikazuje podatke baš najbolje. Ako imate previše kanti, dobit ćete pokvaren izgled češlja, što također ne daje osjećaj distribucije.

Jedno rješenje je stvoriti grafikon koji prikazuje svaku vrijednost. Ili grafički prikaz točke ili kumulativna raspodjela frekvencije, za koju nisu potrebne nikakve kante.

Ako želite stvoriti raspodjelu frekvencije s jednako razmaknutim spremnicima, morate odlučiti koliko spremnika (ili širinu svake od njih). Odluka očito ovisi o broju vrijednosti. Ako imate puno vrijednosti, vaš će grafikon izgledati bolje i biti će informativniji ako imate puno kanti. Ova wikipedijska stranica navodi nekoliko metoda za određivanje širine kante na osnovu broja opažanja. Najjednostavnija metoda je postaviti broj košara jednak kvadratnom korijenu broja vrijednosti koje binning.

Ova stranica tvrtke Hideaki Shimazaki objašnjava alternativnu metodu. Nešto je složenije izračunati, ali čini se da sjajno radi. Gornji dio stranice je aplikacija Java. Pomaknite se pokraj toga da biste vidjeli teoriju i objašnjenje, a zatim nastavite pomicati da biste pronašli poveznice do radova koji objašnjavaju metodu.

Veza do stranice Hideaki je prekinuta. Nisam siguran je li ovo ista stvar: http://toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
#3
+11
ars
2010-07-28 12:23:23 UTC
view on stackexchange narkive permalink

Možda će biti zanimljiv članak " Varijacije na histogramu" Denbyja i Mallowa:

Ovaj novi prikaz koji nazivamo "dhist" (za dijagonalno -rezani histogram) čuva poželjne značajke i povijesti jednake širine i povijesti iste površine. Pokazat će visoke uske kante poput svake povijesti kada u podacima postoje vrhovi i pokazat će izolirane odstupanja poput uobičajenog histograma.

Također spominju da je kod u R dostupan na zahtjev .

#4
+7
Girardi
2012-08-24 02:48:47 UTC
view on stackexchange narkive permalink

Jeste li vidjeli Shimazaki-Shinomoto metodu?

Iako se čini da je računski skupa, možda će vam dati dobre rezultate. Vrijedno je pokušati ako računanje vremena nije vaš problem. Postoje neke implementacije ove metode u javi, MATLAB-u itd. Na sljedećem linku koji radi dovoljno brzo: web-sučelje

Evo implementacije: https://gist.github.com/salotz/0158a99a75078b47538452111ec0faa2.I da, to je skuplje jer odabirete raspon za broj spremnika i za svaku morate napraviti histogram, a zatim izračunati trošak, a zatim odabrati najniži trošak.
#5
+5
Ian Turner
2010-07-27 20:30:31 UTC
view on stackexchange narkive permalink

Nisam siguran da se ovo smatra strogo dobrom praksom, ali nastojim proizvesti više od jednog histograma s različitim širinama koša i odabrati histogram koji će histogram koristiti na temelju kojeg histogram odgovara interpretaciji koju pokušavam najbolje komunicirati . Iako ovo uvodi određenu subjektivnost u odabir histograma, opravdavam ga na temelju toga što sam imao puno više vremena za razumijevanje podataka od osobe kojoj dajem histogram, pa im moram dati vrlo sažetu poruku.

Također sam veliki ljubitelj predstavljanja histograma s istim brojem točaka u svakoj kanti, a ne s istom širinom kante. Obično smatram da ovi podaci predstavljaju podatke daleko bolje od konstantne širine kante, iako ih je teže proizvesti.

Žao mi je, trebao sam spomenuti da to moram učiniti automatizirano. opcija "raditi to više puta dok ne pronađem onu ​​koja najbolje odgovara mojoj svrsi" neće mi uspjeti. mora se izvršiti računski ...
Slažem se - ideja da postoji jedna "optimalna" širina koša velika je pretpostavka pojednostavljenja.
#6
+3
Benjamin Bannier
2010-07-27 23:47:26 UTC
view on stackexchange narkive permalink

Ako trebam programski odrediti broj spremnika, obično započnem s histogramom koji ima puno više spremnika nego što je potrebno. Nakon što se histogram napuni, kombiniram kante dok ne dobijem dovoljno unosa po kanti za metodu koju koristim, npr. ako želim modelirati Poissonove nesigurnosti u eksperimentu brojanja s nesigurnostima iz normalne raspodjele dok ne dobijem više od nešto poput 10 unosa.

#7
+2
Anastasiya-Romanova 秀
2018-12-15 23:21:15 UTC
view on stackexchange narkive permalink

Molimo vas da ovaj odgovor vidite kao dopunu Mr. Odgovor Roba Hyndmana.

Da bismo stvorili grafikone histograma s exact istim intervalima ili 'binwidths' koristeći pravilo Freedman – Diaconis bilo s osnovnim R ili ggplot2 paketom, možemo koristiti jedan od vrijednosti funkcije hist () , naime break . Pretpostavimo da želimo stvoriti histogram qsec od mtcars podataka koristeći pravilo Freedman – Diaconis. U osnovnom R koristimo

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

U međuvremenu u ggplot2 paketu koristimo

  h <- hist (x, prijelomi = "FD", zaplet = FALSE)
qplot (x, geom = "histogram", pauze = h $ pauze, fill = I ("crvena"), col = I ("bijela"))
 

Ili, alternativno

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

Svi oni generiraju grafikone histograma s točno jednakim intervalima i brojem spremnika kako je predviđeno.

#8
-5
Sergo Cusiani
2015-02-19 14:42:55 UTC
view on stackexchange narkive permalink

Imam 600 opažanja za Au g / t. Veličina spremnika 1 daje mi ovo: enter image description here

Automatski odabir (izostaviti raspon spremnika) daje ovo: enter image description here

Podaci izgledaju OK na prvom i drugom grafikonu , kao da nema problema s integritetom podataka. Samo veličina kante 0,1 (g / t) odgovara na pitanje: mjerenja su bila i netočna i neprecizna enter image description here

Moja prosudba: 1. Nema mjerenja tehnika na Zemlji kako bi se pokazala prava vrijednost prirodnog fenomena. Sva su mjerenja približna, neka su blizu stvarne vrijednosti. Ovisi o dizajnu uzorkovanja, kalibraciji, ljudskim kvalifikacijama itd. 2. Zbog toga je raspodjela kosa, a ne simetrična. Ipak, oblik raspodjele trebao bi barem približno nalikovati odjeljku poput zvona. Po jedno zvono (osim ako postoji nekoliko geoloških okruženja) .4.Razdio frekvencija pomoću manipulacije veličinom kante može pomoći u otkrivanju uzorka koliko su precizna i precizna bila obavljena mjerenja. Tako da treba eksperimentalno pokupiti veličinu kante umjesto pravila izrezanog na kamenu.

Ovo je više komentar nego odgovor, osim ako ne navedete moral.Rekao bih da je moral sljedeći: sva su pravila osnovna pravila, neka imaju više statističke osnove od drugih, ali većina pravila možda neće raditi ono što želite ako distribucije imaju vrlo visoku iskrivljenost ili kurtozu.Dakle, poslužite se i svojom prosudbom.
Dodali ste komentare, ali nije mi jasno da li je bilo koji doprinos korisnim novim detaljima u niti.1. je meni dobro, ali ovdje nije problem.2. ne slijedi iz 1. jer su neke raspodjele gotovo simetrične.3. je dvojbeno: postoje mnoge situacije u kojima se očekuju drugi oblici osim zvona.4. je također dvojben jer se kvaliteta izvornih mjerenja često ne vidi iz bilo kojeg histograma, ali često se najbolje ispituje s pažnjom na vrlo finu strukturu raspodjele.
2.Normalno simetrično nije simetrično.Ne možete biti gotovo trudni: bilo trudna ili ne.
Svakako, ali egzaktna simetrija u podacima toliko je rijetka da bi se i da sam rekao "simetrično" moglo s razlogom prigovoriti.Vrlo je lako biti gotovo simetričan;zato i kako imamo mjere iskrivljenja.
3. Moja rečenica u zagradama (osim ako postoji nekoliko geoloških okruženja) objašnjava slučaj kada se očekuju različiti oblici osim simetričnih.4. Napisao sam "MOŽE LI POMOĆI otkriti obrazac koliko su točni i precizni ...", što ne znači da će to učiniti u svakom slučaju.U mom slučaju - DA, jer su duplicirani uzorci kontrolirani u neovisnom laboratoriju i pokazuju normalnu distribuciju.
Primijećeno, ali vaš je komentar bio općenit i nedostajao je kontekst koji sada dajete.Zauzvrat sam rekao "sumnjivo", a ne "pogrešno".Moj glavni komentar ostaje da vaš odgovor zapravo ne dodaje puno niti o tome kako odabrati veličinu spremnika ili ekvivalentan broj kanti.Imati još jedan primjer u kojem je teško okretanje pitanju, a ne odgovor.


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 2.0 licenci pod kojom se distribuira.
Loading...