Dikey eksenin bir olasılık yoğunluğu olarak ölçüldüğünü fark etmenize yardımcı olabilir . Dolayısıyla, yatay eksen km olarak ölçülürse, dikey eksen "km başına" olasılık yoğunluğu olarak ölçülür. 5 "km" genişliğinde ve km "0.1" yüksekliğinde ("km " olarak yazmayı tercih edebilirsiniz) böyle bir ızgaraya dikdörtgen bir öğe çizdiğimizi varsayalım . Bu dikdörtgenin alanı 5 km x 0,1 km = 0,5'tir. Birimler iptal edilir ve biz sadece bir buçuk olasılıkla kalırız.- 1−1−1
Yatay birimleri "metre" olarak değiştirdiyseniz, dikey birimleri "metre başına" olarak değiştirmeniz gerekir. Dikdörtgen şimdi 5000 metre genişliğinde olacak ve yoğunluk (yükseklik) metre başına 0.0001 olacaktır. Hala yarıya düşme ihtimaliniz var. Bu iki grafiğin sayfada ne kadar garip görüneceğinden rahatsız olabilirsiniz (birinin diğerinden daha geniş ve daha kısa olması gerekmez mi?), Ancak arazileri fiziksel olarak çizdiğinizde her şeyi kullanabilirsiniz istediğiniz ölçek. Ne kadar tuhaflık gerektirdiğini görmek için aşağıya bakın.
Olasılık yoğunluk eğrilerine geçmeden önce histogramları göz önünde bulundurmak yararlı olabilir . Birçok yönden benzerdirler. Bir histogramın dikey ekseni [ birimi başına ] frekans yoğunluğudurx ve alanlar frekansları temsil eder, çünkü yatay ve dikey birimler çarpma üzerine iptal edilir. PDF eğrisi, toplam frekansı bire eşit olan bir tür histogramın sürekli bir sürümüdür.
Daha da yakın bir benzetme göreceli bir frekans histogramıdır - böyle bir histogramın "normalleştirildiğini" söylüyoruz, böylece alan elemanları artık ham veri frekanslarından ziyade orijinal veri kümenizin oranlarını temsil ediyor ve tüm çubukların toplam alanı bir. Yükseklikler artık [ birimi başına ] nispi frekans yoğunluklarıdırx . Göreceli bir frekans histogramında boyunca uzanan bir çubuk varsax20 km'den 25 km'ye kadar olan değerler (böylece çubuğun genişliği 5 km'dir) ve km başına 0,1'lik bir nispi frekans yoğunluğuna sahiptir, o zaman bu çubuk verilerin 0,5'lik bir oranını içerir. Bu, veri kümenizden rastgele seçilen bir öğenin, o çubukta% 50 yalan söyleme olasılığına tam olarak karşılık gelir. Birimlerdeki değişikliklerin etkisi hakkındaki önceki argüman hala geçerlidir: 20 km ile 25 km bar arasındaki veri oranlarını, bu iki parsel için 20.000 metre ile 25.000 metre bar arasındaki oranlarla karşılaştırın. Ayrıca, her iki durumda da tüm çubuk alanlarının bire eşit olduğunu aritmetik olarak doğrulayabilirsiniz.
PDF'nin "bir çeşit histogramın sürekli versiyonu" olduğu iddiamla ne kastedebilirdim? Olasılık yoğunluk eğrisi altında, aralığında değerleri boyunca küçük bir şerit alalım , böylece şerit genişliğinde ve eğrinin yüksekliği yaklaşık olarak sabit bir . alanı o şeridin içinde yatma olasılığını temsil eden o yükseklikte bir çubuk çizebiliriz .[ x , x + δ x ] δ x f ( x ) f ( x )x[x,x+δx]δxf(x)f(x)δx
ve arasındaki eğrinin altındaki alanı nasıl bulabiliriz ? Bu aralığı küçük şeritler halinde alt gruplara ayırabilir ve aralığında yaklaşık yalan söyleme olasılığına karşılık gelen çubukların alanlarının toplamını alabiliriz . Eğrinin ve çubukların tam olarak hizalanmadığını görüyoruz, bu yüzden yaklaşımımızda bir hata var. değerini her çubuk için daha küçük ve daha küçük yaparak , aralığı alanın daha iyi bir tahminini sağlayan daha fazla ve daha dar çubuklarla doldururuz .x = b ∑ f ( x )x=ax=b[ a , b ] δ x ∑ f ( x )∑f(x)δx[a,b]δx∑f(x)δx
Alanı kesin olarak hesaplamak için, in her bir şerit boyunca sabit olduğunu varsaymak yerine , integralini değerlendiririz ve bu aralığında gerçek yalan olasılığına karşılık gelir . Tüm eğri üzerinde entegrasyon toplam alan (yani toplam olasılık) olanını verir, aynı nedenden ötürü nispi frekans histogramının tüm çubuklarının alanlarının toplanması toplam alan (yani toplam oran) bir alan verir. Entegrasyonun kendisi, bir miktar toplamın sürekli bir versiyonudur.∫ b a f ( x ) d x [ a , b ]f(x)∫baf(x)dx[a,b]
Grafikler için R kodu
require(ggplot2)
require(scales)
require(gridExtra)
# Code for the PDF plots with bars underneath could be easily readapted
# Relative frequency histograms
x.df <- data.frame(km=c(rep(12.5, 1), rep(17.5, 2), rep(22.5, 5), rep(27.5, 2)))
x.df$metres <- x.df$km * 1000
km.plot <- ggplot(x.df, aes(x=km, y=..density..)) +
stat_bin(origin=10, binwidth=5, fill="steelblue", colour="black") +
xlab("Distance in km") + ylab("Relative frequency density per km") +
scale_y_continuous(minor_breaks = seq(0, 0.1, by=0.005))
metres.plot <- ggplot(x.df, aes(x=metres, y=..density..)) +
stat_bin(origin=10000, binwidth=5000, fill="steelblue", colour="black") +
xlab("Distance in metres") + ylab("Relative frequency density per metre") +
scale_x_continuous(labels = comma) +
scale_y_continuous(minor_breaks = seq(0, 0.0001, by=0.000005), labels=comma)
grid.arrange(km.plot, metres.plot, ncol=2)
x11()
# Probability density functions
x.df <- data.frame(x=seq(0, 1, by=0.001))
cutoffs <- seq(0.2, 0.5, by=0.1) # for bars
barHeights <- c(0, dbeta(cutoffs[1:(length(cutoffs)-1)], 2, 2), 0) # uses left of bar
x.df$pdf <- dbeta(x.df$x, 2, 2)
x.df$bar <- findInterval(x.df$x, cutoffs) + 1 # start at 1, first plotted bar is 2
x.df$barHeight <- barHeights[x.df$bar]
x.df$lastBar <- ifelse(x.df$bar == max(x.df$bar)-1, 1, 0) # last plotted bar only
x.df$lastBarHeight <- ifelse(x.df$lastBar == 1, x.df$barHeight, 0)
x.df$integral <- ifelse(x.df$bar %in% 2:(max(x.df$bar)-1), 1, 0) # all plotted bars
x.df$integralHeight <- ifelse(x.df$integral == 1, x.df$pdf, 0)
cutoffsNarrow <- seq(0.2, 0.5, by=0.025) # for the narrow bars
barHeightsNarrow <- c(0, dbeta(cutoffsNarrow[1:(length(cutoffsNarrow)-1)], 2, 2), 0) # uses left of bar
x.df$barNarrow <- findInterval(x.df$x, cutoffsNarrow) + 1 # start at 1, first plotted bar is 2
x.df$barHeightNarrow <- barHeightsNarrow[x.df$barNarrow]
pdf.plot <- ggplot(x.df, aes(x=x, y=pdf)) +
geom_area(fill="lightsteelblue", colour="black", size=.8) +
ylab("probability density") +
theme(panel.grid = element_blank(),
axis.text.x = element_text(colour="black", size=16))
pdf.lastBar.plot <- pdf.plot +
scale_x_continuous(breaks=tail(cutoffs, 2), labels=expression(x, x+delta*x)) +
geom_area(aes(x=x, y=lastBarHeight, group=lastBar), fill="steelblue", colour="black", size=.8) +
annotate("text", x=0.73, y=0.22, size=6, label=paste("P(paste(x<=X)<=x+delta*x)%~~%f(x)*delta*x"), parse=TRUE)
pdf.bars.plot <- pdf.plot +
scale_x_continuous(breaks=cutoffs[c(1, length(cutoffs))], labels=c("a", "b")) +
geom_area(aes(x=x, y=barHeight, group=bar), fill="steelblue", colour="black", size=.8) +
annotate("text", x=0.73, y=0.22, size=6, label=paste("P(paste(a<=X)<=b)%~~%sum(f(x)*delta*x)"), parse=TRUE)
pdf.barsNarrow.plot <- pdf.plot +
scale_x_continuous(breaks=cutoffsNarrow[c(1, length(cutoffsNarrow))], labels=c("a", "b")) +
geom_area(aes(x=x, y=barHeightNarrow, group=barNarrow), fill="steelblue", colour="black", size=.8) +
annotate("text", x=0.73, y=0.22, size=6, label=paste("P(paste(a<=X)<=b)%~~%sum(f(x)*delta*x)"), parse=TRUE)
pdf.integral.plot <- pdf.plot +
scale_x_continuous(breaks=cutoffs[c(1, length(cutoffs))], labels=c("a", "b")) +
geom_area(aes(x=x, y=integralHeight, group=integral), fill="steelblue", colour="black", size=.8) +
annotate("text", x=0.73, y=0.22, size=6, label=paste("P(paste(a<=X)<=b)==integral(f(x)*dx,a,b)"), parse=TRUE)
grid.arrange(pdf.lastBar.plot, pdf.bars.plot, pdf.barsNarrow.plot, pdf.integral.plot, ncol=2)