Kysymys:
Optimaalisen lokeroiden määrän laskeminen histogrammissa
Tony Stark
2010-07-27 20:21:48 UTC
view on stackexchange narkive permalink

Olen kiinnostunut löytämään mahdollisimman optimaalisen menetelmän sen määrittämiseksi, kuinka monta lokeroa minun pitäisi käyttää histogrammissa. Tietojeni tulisi olla enintään 30-350 objektia, ja erityisesti yritän soveltaa kynnystä (kuten Otsun menetelmä), jossa "hyvät" objektit, joita minulla pitäisi olla vähemmän ja jotka pitäisi levittää enemmän, erotetaan " huonoja "esineitä, joiden arvon tulisi olla tiheämpi. Konkreettisella arvolla olisi pisteet 1-10 jokaiselle esineelle. Minulla olisi ollut 5-10 kohdetta pisteillä 6-10 ja 20-25 esineitä pisteillä 1-4. Haluaisin löytää histogrammin yhdistävän mallin, joka yleensä sallii jotain Otsun menetelmän kaltaista rajata matalapisteiset kohteet. Olen kuitenkin nähnyt Otsun lukujen toteuttamisen, roskakorin koko oli 256, ja usein minulla on paljon vähemmän datapisteitä kuin 256, mikä mielestäni viittaa siihen, että 256 ei ole hyvä roskakorin numero. Millä tavoin minun on käytettävä niin vähän tietoja, että lasken käytettävien lokeroiden määrän?

Luulen, että Sturgesin sääntöä voidaan käyttää n <200;missä n on havaintojen lukumäärä
Kahdeksan vastused:
#1
+114
Rob Hyndman
2010-07-28 05:23:22 UTC
view on stackexchange narkive permalink

Freedman-Diaconis -sääntö on erittäin vankka ja toimii hyvin käytännössä. Lokeron leveys on $ h = 2 \ kertaa \ text {IQR} \ kertaa n ^ {- 1/3} $ . Joten roskakorien lukumäärä on $ (\ max- \ min) / h $ , missä $ n $ on havaintojen lukumäärä, max on suurin arvo ja min on vähimmäisarvo.

Pohjassa R voit käyttää:

  hist (x, break = "FD")  

Muille kirjastojen kirjaamisille, joissa ei ole tätä vaihtoehtoa (esim. ggplot2 ), voit laskea kaistanleveyden seuraavasti:

  bw <- 2 * IQR (x) / length (x) ^ (1/3) ### esimerkiksi ##### ggplot () + geom_histogram (aes (x), binwidth = bw)  
Huomaa, että oletuksena (eli jos et määritä `` taukoja '') R
@nico. R: n oletusarvo on break = "Sturges", joka ei aina anna hyviä tuloksia.
jostain syystä kommenttini katkaistiin ... Tarkoitin kirjoittaa "oletusarvoisesti (joten jos et määritä taukoja) R käyttää Sturges-algoritmia" ... outoa!
Kuinka IQR lasketaan?
@KurtMueller IQR tarkoittaa kvartiilien välistä aluetta.Etsi 1. kvartiili ja 3. kvartiili, ja ero on IQR.IQR: ssä on jo R, joten voit käyttää sitä.
R: ssä Freedman-Diaconis -algoritmi toteutetaan funktiona "nclass.FD" grDevices-paketissa (asennettu oletuksena).`hist` käyttää tätä toimintoa, kun` braks = "FD" `.
Mielestäni tämä kaava ei välttämättä toimi, jos joissakin tiedoissa on useita esiintymiä.Jos toistettu data olisi yhtä painotettu keskiarvo, mihin ehkä tämä kaava perustuu, se arvioi ennakoivasti useammin esiintyviä arvoja.
Nro pituus (x) on havaintojen lukumäärä.alue (x) = c (min (x), max (x)).
Voit lisätä lisätietoja muuttujista.Se voi säästää aikaa ja auttaa ihmisiä nopeammin.Mikä on: n, max, min?
Jos en erehdy, vastauksen tulee lukea "num_bins <- diff (alue (x)) / (2 * IQR (x) / pituus (x) ^ (1/3))"
Oletko lukenut http://users.stat.umn.edu/~gmeeden/papers/hist.pdf?Mitä mieltä olet toiminnon minimoinnin lähestymistavasta verrattuna Freedman-Diaconis -sääntöön?
Yksi käytös, jonka tapasin Freedman Diaconis -säännön kanssa, on se, että jos minulla on kaksi tietoaineistoa, joista toinen on huomattavasti suurempi kuin toinen (1000x), molemmilla on vain yksi sarake, jotka molemmat tulevat samasta jakaumasta (ts. Samasta IQR: stä),roskakorien lukumäärä on 10x enemmän isossa sarjassa. Onko tämä käyttäytyminen toivottavaa?Mitkä olisivat tämän roskakorien määrän lisääntymisen vaikutukset havaintojen määrän kasvaessa?
Kohdassa "Kuinka laskea IQR?"tarkista http://stat.ethz.ch/R-manual/R-devel/library/stats/html/quantile.html tai https://cran.r-project.org/doc/manuals/fullrefman.pdf s.1571
Sen tulisi olla "binwidth <- (2 * IQR (x)) / length (x) ^ (1/3)"
miksi ei mainita jo toteutettua `nclass.FD`?
`` nclass.FD '' ei ollut olemassa yhdeksän vuotta sitten.
Jeesus Kristus, olemmeko pudonneet niin pitkälle?Mitä tapahtui tuomitsemalla silmillämme?
#2
+20
Harvey Motulsky
2010-07-27 21:17:44 UTC
view on stackexchange narkive permalink

Jos käytät liian vähän roskakoria, histogrammi ei oikeastaan ​​kuvaa tietoja hyvin. Jos sinulla on liikaa roskakoria, saat rikki kampauksen ilmeen, mikä ei myöskään anna käsitystä jakaumasta.

Yksi ratkaisu on luoda kaavio, joka näyttää kaikki arvot. Joko pistekäyrä tai kumulatiivinen taajuusjakauma, joka ei vaadi lokeroita.

Jos haluat luoda taajuusjakauman tasaisin välein sijaitsevilla astioilla, sinun on päätettävä, kuinka monta alusta (tai kummankin leveys). Päätös riippuu selvästi arvojen lukumäärästä. Jos sinulla on paljon arvoja, kaavio näyttää paremmalta ja informatiivisemmalta, jos sinulla on paljon roskakoria. Tällä wikipediasivulla luetellaan useita tapoja, joilla päätetään roskakorin leveys havaintojen lukumäärän perusteella. Yksinkertaisin tapa on asettaa roskakorien lukumäärä, joka on yhtä suuri kuin yhdistettävien arvojen neliöjuuri.

Tämä Hideaki Shimazakin sivu selittää vaihtoehtoisen menetelmän. Laskeminen on hieman monimutkaisempaa, mutta näyttää tekevän hyvää työtä. Sivun yläosa on Java-sovellus. Vieritä sen ohi nähdäksesi teorian ja selityksen ja jatka sitten vierittämistä löytääksesi linkit menetelmää selittäviin artikkeleihin.

Linkki Hideakin sivulle on rikki. En ole varma, onko tämä sama asia: http://toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
#3
+11
ars
2010-07-28 12:23:23 UTC
view on stackexchange narkive permalink

Ehkä Denby ja Mallows julkaisu " Variat histogrammissa" kiinnostaa:

Tämä uusi näyttö, jota kutsumme "dhistiksi" (diagonaalisesti - leikattu histogrammi) säilyttää sekä yhtä leveän että saman pinta-alan hist: n toivotut piirteet. Se näyttää korkeat kapeat roskakorit, kuten ea hist, kun tiedoissa on piikkejä, ja näyttää eristetyt poikkeamat aivan kuten tavallisessa histogrammissa.

He myös mainitsevat, että R-koodi on saatavana pyynnöstä. .

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

Näitkö Shimazaki-Shinomoto -menetelmän?

Vaikka se näyttää olevan laskennallisesti kallista, se voi antaa sinulle hyviä tuloksia. Kannattaa kokeilla, jos laskennallinen aika ei ole ongelma. Javan, MATLABin jne. Alla on joitain tämän menetelmän toteutuksia seuraavassa linkissä, joka toimii riittävän nopeasti: web-interface

Tässä on toteutus: https://gist.github.com/salotz/0158a99a75078b47538452111ec0faa2.Ja kyllä, se on kalliimpaa, koska valitset alueen säiliöiden lukumäärälle ja sinun on tehtävä histogrammi kullekin ja sitten laskettava kustannukset, sitten valittava vähiten maksava.
#5
+5
Ian Turner
2010-07-27 20:30:31 UTC
view on stackexchange narkive permalink

En ole varma, että tämä lasketaan ehdottomasti hyväksi käytännöksi, mutta pyrin tuottamaan useampaa kuin yhtä histogrammia eri lokeroleveydellä ja valitsen histogrammin, jota histogrammia käytetään sen perusteella, mikä histogrammi sopii tulkintaan, jota yritän kommunikoida parhaiten . Vaikka tämä tuo jonkin verran subjektiivisuutta histogrammin valintaan, perustelen sen sillä perusteella, että minulla on ollut paljon enemmän aikaa tietojen ymmärtämiseen kuin henkilölle, jolle histogrammin annan, joten minun on annettava heille erittäin tiivis viesti.

Olen myös suuri fani esittää histogrammeja, joissa on sama määrä pisteitä kussakin lokerossa kuin sama lokeron leveys. Yleensä nämä edustavat tietoja paljon paremmin kuin vakiolokeron leveys, vaikka niitä onkin vaikeampaa tuottaa.

anteeksi, minun olisi pitänyt mainita, että minun täytyy tehdä tämä automatisoidusti. vaihtoehto "tehdä se useita kertoja, kunnes löydän tarkoitukseeni parhaiten sopivan" ei toimi minulle. on tehtävä laskennallisesti ...
Olen samaa mieltä - ajatus siitä, että on olemassa yksi "optimaalinen" astian leveys, on valtava yksinkertaistava oletus.
#6
+3
Benjamin Bannier
2010-07-27 23:47:26 UTC
view on stackexchange narkive permalink

Jos minun on määritettävä lokeroiden lukumäärä ohjelmallisesti, aloitan yleensä histogrammilla, jossa on paljon enemmän roskia kuin tarvitaan. Kun histogrammi on täytetty, yhdistän roskakorit, kunnes minulla on tarpeeksi merkintöjä lokeroa kohti käyttämääni menetelmää varten, esim. jos haluan mallintaa Poisson-epävarmuustekijät laskentakokeessa epävarmuustekijöillä normaalijakaumasta, kunnes minulla on enemmän kuin jotain noin 10 merkintää.

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

Katso tämä vastaus Mr. Rob Hyndmanin vastaus.

Luodaksemme histogrammikaaviot -tarkkuudella samat intervallit tai 'binwidths' käyttämällä Freedman – Diaconis-sääntöä joko R- tai ggplot2 -paketilla, voimme käyttää yhtä seuraavista: hist () -funktion arvot, nimittäin break . Oletetaan, että haluamme luoda histogrammin qsec -kohdasta mtcars -datasta Freedman – Diaconis-säännön avulla. Perus-R: ssä käytämme

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

Sillä välin käytämme ggplot2 -paketissa

  h <- hist (x, break = "FD", plot = FALSE)
qplot (x, geom = "histogrammi", taukot = h $ rikkoo, täytä = I ("punainen", col = I ("valkoinen"))
 

Tai vaihtoehtoisesti

  ggplot (mtcars, aes (x)) + geom_histogram (taukot = h $ taukoja, col = "valkoinen")
 

Ne kaikki tuottavat histogrammikaaviot täsmälleen samoilla aikaväleillä ja lokeroiden määrällä kuin on tarkoitettu

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

Minulla on 600 havaintoa Au g / t: lle. Alustan koko 1 antaa minulle tämän: enter image description here

Automaattinen valinta (jätä roskakorialue pois) antaa tämän: enter image description here

Tiedot näyttävät O'K ensimmäiseltä ja toiselta kaaviosta Ainoastaan ​​lokeron koko 0,1 (g / t) vastaa kysymykseen: mittaukset olivat sekä epätarkkoja että epätarkkoja. enter image description here

Tuomioni: 1. Mittaa ei ole tekniikka maapallolla luonnonilmiön todellisen arvon osoittamiseksi. Kaikki mittaukset ovat likimääräisiä, jotkut ovat lähellä todellista arvoa. Se riippuu näytteenottosuunnitelmasta, kalibroinnista, ihmisen pätevyydestä jne.2.Siksi jakauma on vinossa eikä symmetrisessä.3.Jakauman muodon tulisi kuitenkin muistuttaa ainakin kellotyyppistä osaa. Yksi kello kerrallaan (ellei geologisia ympäristöjä ole useita) 4. Joten tarvitset kokeellisen poiminnan roskakorista kivelle leikatun säännön sijasta.

Tämä on enemmän kommentti kuin vastaus, ellet sano moraalia.Sanoisin, että moraali on seuraava: Kaikki säännöt ovat nyrkkisääntöjä, joillakin on enemmän tilastollisia perusteita kuin toisilla, mutta useimmat säännöt eivät välttämättä tee mitä haluat, jos jakaumilla on erittäin suuri vinous tai kurtosis.Joten, käytä myös tuomiotasi.
Olet lisännyt kommentteja, mutta en ole varma, voisiko mikään antaa hyödyllisiä uusia tietoja ketjuun.1. on hieno minulle, mutta ei asia tässä.2. ei seuraa kohdasta 1. koska jotkut jakaumat ovat lähes symmetrisiä.3. on epäilyttävä: on monia tilanteita, joissa odotetaan muita muotoja kuin kelloja.4. on myös epäilyttävä, koska alkuperäisten mittausten laatu ei useinkaan käy ilmi mistään histogrammista, mutta usein se on parasta tutkia huomioiden jakauman erittäin hieno rakenne.
2. melkein symmetrinen ei ole symmetrinen.Et voi olla melkein raskaana: joko raskaana vai ei.
Toki, mutta tarkka symmetria tiedoissa on niin hyvin harvinaista, että jos olisin sanonut "symmetrinen", joku saattaa kohtuudella vastustaa myös sitä.Lähes symmetrinen on hyvin helppo;siksi ja kuinka meillä on mittasuhteita.
3.Sulkeissa oleva lauseeni (ellei geologisia ympäristöjä ole useita) selittää tapauksen, jossa muotojen odotetaan olevan muita kuin symmetrisiä.4. Kirjoitin "VOIN HELP paljastaa mallin siitä, kuinka tarkka ja tarkka ...", mikä ei tarkoita, että se toimii kussakin tapauksessa.Minun tapauksessani - KYLLÄ, koska kaksoiskappaleet tarkastettiin riippumattomassa laboratoriossa, ja ne osoittavat normaalia jakaumaa.
Huomasi, mutta kommenttisi oli yleinen ja puuttui nyt antamasi asiayhteys.Puolestaan sanoin "epäilyttävä" en "väärä".Tärkein kommenttini on edelleen, että vastauksesi ei todellakaan lisää paljon säiettä siitä, kuinka valita roskakorin koko tai vastaava määrä roskoja.Ottaa toinen esimerkki, jossa se on vaikeaa, on kysymyksen pyöriminen, ei oikeastaan vastaus.


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 2.0-lisenssistä, jolla sitä jaetaan.
Loading...