Histogram Neyi Gösterir
Bir histogram, tek bir sayısal değişken hakkında tek bir soruyu yanıtlar: değerler nasıl dağılmış? Verinin aralığını ardışık aralıklara (kutulara) böler, her birine kaç gözlem düştüğünü sayar ve kutu başına yüksekliği o sayım olan bir çubuk çizer. Verinin yoğun olduğu yerde çubuklar uzundur; seyrek olduğu yerde kısadır.
O tek resim, ortalama ve standart sapmanın söyleyemediği şeyleri söyler: verinin bir mi iki mi tepesi var, simetrik mi yoksa bir kuyruğa doğru çarpık mı ve geri kalandan uzakta başıboş değerler var mı. Yeni bir veri kümesiyle tanıştığınızda, betimleyici istatistik sayılarının hemen yanında, genellikle yapılacak ilk grafiktir.
R'de fonksiyon hist()'tir ve tek satırdır.
hist() ile İlk Histogramınız
200 kişinin boyunu simüle edelim - 170 cm etrafında, standart sapması 10 olan normal dağılımla (set.seed() ve rnorm() fonksiyonlarının ne yaptığı için bkz. rastgele sayılar):
set.seed(42)
heights <- rnorm(200, mean = 170, sd = 10)
hist(heights)
R kutuları kendi seçer ve çan biçimli bir çubuk yığını çizer: 145 cm civarında kısa çubuklar, 160'lı değerlerde yükselen, 170 civarında tepe yapan ve 190'ı geçince simetrik biçimde alçalan. Dikey eksen "Frequency" olarak etiketlenir - ham sayımlar - ve başlık ile eksen etiketi değişken adından gelir.
Varsayılanlar bilinçli olarak sadedir. Alışıldık süsleme argümanlarının hepsi burada da çalışır:
hist(heights,
main = "Distribution of heights",
xlab = "Height (cm)",
col = "steelblue",
border = "white")
col çubukları doldurur, border dış hatlarını renklendirir - border = "white", çoğu yayında gördüğünüz temiz, ayrık çubuk görünümünü verir. plot() rehberinin renkler ve başlıklar hakkında söylediği her şey değişmeden geçerlidir.
Kutu Genişliği: breaks Argümanı
hist() fonksiyonunun en önemli argümanı breaks'tir, çünkü kutu genişliği grafiğin hangi hikâyeyi anlattığına karar verir. Aynı veri, iki ayar:
hist(heights, breaks = 5) # five wide bins: a crude, blocky bell
hist(heights, breaks = 30) # thirty narrow bins: detail, plus noise
breaks = 5 ile histogram o kadar kabadır ki her şey tek ve pürüzsüz bir tümsek gibi görünür - ikinci bir küme ya da veride bir boşluk görünmez olurdu. breaks = 30 ile ince yapıyı görürsünüz, ama rastgele dalgalanmalar özellik gibi görünmeye başlar. Hiçbiri "doğru" değildir; dürüst hamle birkaç ayar denemek ve hangi özelliklerin hayatta kaldığını görmektir.
breaks üç biçim kabul eder:
- Bir sayı -
breaks = 30- kutu sayısı için bir öneri. R onu düzgün sınırlara oturacak şekilde ayarlar, dolayısıyla 28 ya da 33 kutu alabilirsiniz. Bu herkesi bir kez şaşırtır. - Kesme noktalarından oluşan bir vektör -
breaks = seq(140, 200, by = 5)- pazarlıksız, kesin kutu kenarları. Karşılaştırdığınız birkaç histogramda kutular hizalanmak zorunda olduğunda bunu kullanın. - Bir kural adı - Freedman–Diaconis için
breaks = "FD"; genişliği verinin yayılımından ve örneklem büyüklüğünden seçer ve çarpık veride iyi davranır.
Yoğunluk Histogramları ve Normal Eğri
Varsayılan olarak çubuk yükseklikleri sayımdır (freq = TRUE). freq = FALSE ayarlamak, çubukları toplam alanları 1 olacak şekilde yeniden ölçekler - yoğunluk ölçeği. Biçim değişmez; dikey eksen değişir. Bunu yapmanın anlamı şudur: bir yoğunluk histogramı, bir olasılık yoğunluk fonksiyonuyla aynı ölçekte yaşar; dolayısıyla teorik bir eğriyi doğrudan verinin üstüne bindirebilirsiniz:
hist(heights,
freq = FALSE,
col = "gray90",
main = "Heights vs. a normal curve",
xlab = "Height (cm)")
curve(dnorm(x, mean = mean(heights), sd = sd(heights)),
add = TRUE, col = "tomato", lwd = 2)
add = TRUE ile curve(), çan eğrisini var olan histogramın üzerine çizer (dnorm(x, ...) içindeki x, curve() fonksiyonunun doldurduğu bir yer tutucudur, sizin değişkeniniz değil). Çubuklar eğriye sarılıyorsa normal bir model makuldür; ondan uzağa taştıkları yerde - ağır bir kuyruk, ikinci bir tepe - model bir şeyi kaçırıyordur. freq = FALSE atlanırsa eğri, sayımlar ve yoğunluklar farklı ölçeklerde olduğu için grafiğin dibinde işe yaramaz biçimde sürünür.
Çubukların Arkasındaki Sayılar
hist() yalnızca çizmez - kutulamayı bir liste olarak döndürür. plot = FALSE ile çizimi tamamen atlar ve yalnızca hesaplar; bu da bunu tam burada çalıştırabileceğiniz anlamına gelir:
h$counts, veri olarak histogramdır: her sayı bir çubuğun yüksekliğidir. table(cut(...)) satırı metin modu karşılığıdır - cut() değerleri kutular, table() her kutuyu sayar - ve bir grafikten önce ya da onun yerine yazdırmak için düzgün bir sağlama kontrolüdür. plot = FALSE olmadan atarsanız (h <- hist(heights)) R hem çizer hem de listeyi döndürür; atama grafiği bastırmaz.
ggplot2 ile Histogramlar
ggplot2 sürümü breaks yerine binwidth kullanır; bu çoğu zaman daha doğal bir ayardır - kaç kutu istediğinizi değil, bir kutunun veri biriminde ne kadar geniş olduğunu söylersiniz:
library(ggplot2)
ggplot(data.frame(heights), aes(x = heights)) +
geom_histogram(binwidth = 5, fill = "steelblue", color = "white") +
labs(title = "Distribution of heights", x = "Height (cm)", y = "Count")
binwidth = 5, her çubuğun 5 cm kapladığı anlamına gelir. binwidth ayarlanmadan bırakılırsa ggplot2 sizi uyarır ve sessizce 30 kutuya döner - uyarıyı ciddiye alın, çünkü varsayılan nadiren verinize uygun genişliktir. Tek bir değişkene hızlı bakış için hist() daha az yazmadır; ggplot2, histogram yüzeylere, gruplara ya da diğer şekillerinizle tutarlı bir temaya ihtiyaç duyduğunda ekmeğini çıkarır.
Buradan Ne Çıkarıyorsunuz
- Histogram tek bir sayısal değişkenin dağılımını gösterir:
hist(x)ve işiniz biter. - Önemli argüman
breaks'tir - bir sayı yalnızca öneridir, bir vektör kesin kenarları belirler,"FD"savunulabilir bir genişlik seçer. Her zaman birden fazla ayar deneyin. freq = FALSEyoğunluk ölçeğine geçer;curve(dnorm(...), add = TRUE)ile normal bir eğriyi anlamlı biçimde bindirmenizi sağlayan şey budur.hist(x, plot = FALSE)kutuları veri olarak döndürür ($breaks,$counts,$mids);table(cut(x, breaks))yalnızca metin karşılığıdır.- ggplot2'da
geom_histogram(binwidth = ...)- vebinwidthdeğerini kendiniz belirleyin.
Sırada: kutu grafiği - grupları yan yana karşılaştırırken gerçekten parlayan dağılım grafiği.
Sıkça Sorulan Sorular
R'de histogram nasıl yapılır?
Sayısal bir vektör üzerinde hist(x) çağırın. R, x aralığını kutulara böler ve kutu başına bir çubuk çizer; çubuk yüksekliği içine kaç değer düştüğünü gösterir. Kutu sayısını denetlemek için breaks =, çubukları renklendirmek için col = ekleyin.
hist() içindeki breaks argümanı ne yapar?
Kutulamayı denetler. breaks = 30 gibi tek bir sayı, kaç kutu kullanılacağına dair bir öneridir (R düzgün sınırlara yuvarlar), breaks = seq(140, 200, by = 5) gibi bir vektör tam kesme noktalarını belirler ve breaks = "FD" Freedman–Diaconis kuralını kullanır.
R'de bir histogramın üzerine normal eğri nasıl bindirilir?
Histogramı freq = FALSE ile yoğunluk ölçeğinde çizin, sonra eğriyi curve(dnorm(x, mean = mean(data), sd = sd(data)), add = TRUE) ile ekleyin. Frekans ölçeğinde eğri sıfıra yakın işe yaramaz biçimde otururdu, dolayısıyla freq = FALSE şarttır.
Histogram ile çubuk grafiği arasındaki fark nedir?
Histogram tek bir sayısal değişkeni kutular, dolayısıyla yatay eksen sürekli bir ölçektir ve çubuklar birbirine değer. Çubuk grafiği ise ayrık kategorileri karşılaştırır, dolayısıyla çubuklar ayrıktır. R'de bu, sayılar için hist(), kategori sayımları için barplot() demektir.