Mungkin membantu Anda untuk menyadari bahwa sumbu vertikal diukur sebagai kepadatan probabilitas . Jadi jika sumbu horizontal diukur dalam km, maka sumbu vertikal diukur sebagai probabilitas probabilitas "per km". Misalkan kita menggambar elemen persegi panjang pada grid seperti itu, yang lebarnya 5 "km" dan tinggi 0,1 "per km" (yang Anda mungkin lebih suka menulis sebagai "km - 1 "). Luas persegi panjang ini adalah 5 km x 0,1 km - 1 = 0,5. Unit dibatalkan dan kami hanya memiliki satu setengah probabilitas.−1−1
Jika Anda mengubah unit horizontal menjadi "meter", Anda harus mengubah unit vertikal menjadi "per meter". Persegi panjang sekarang akan lebarnya 5.000 meter, dan akan memiliki kepadatan (tinggi) 0,0001 per meter. Anda masih memiliki probabilitas setengah. Anda mungkin terganggu oleh betapa anehnya kedua grafik ini akan terlihat pada halaman dibandingkan satu sama lain (bukankah satu harus jauh lebih luas dan lebih pendek dari yang lain?), Tetapi ketika Anda secara fisik menggambar plot Anda dapat menggunakan apa pun skala yang Anda suka. Lihat di bawah untuk melihat betapa sedikit keanehan yang perlu dilibatkan.
Anda mungkin perlu mempertimbangkan untuk mempertimbangkan histogram sebelum beralih ke kurva probabilitas kepadatan. Dalam banyak hal mereka analog. Sumbu vertikal histogram adalah kerapatan frekuensi [per unit]x dan area mewakili frekuensi, sekali lagi karena unit horizontal dan vertikal dibatalkan setelah penggandaan. Kurva PDF adalah sejenis versi histogram berkelanjutan, dengan total frekuensi sama dengan satu.
Analogi yang bahkan lebih dekat adalah histogram frekuensi relatif - kami katakan histogram tersebut telah "dinormalisasi", sehingga elemen area sekarang mewakili proporsi dari kumpulan data asli Anda daripada frekuensi mentah, dan total area dari semua bar adalah satu. Ketinggian sekarang kerapatan frekuensi relatif [per unit]x . Jika histogram frekuensi relatif memiliki bilah yang berjalan di sepanjang xnilai dari 20 km hingga 25 km (sehingga lebar bar adalah 5 km) dan memiliki kerapatan frekuensi relatif 0,1 per km, maka bar tersebut berisi proporsi data 0,5. Ini sesuai persis dengan gagasan bahwa item yang dipilih secara acak dari set data Anda memiliki probabilitas 50% untuk berbaring di bar itu. Argumen sebelumnya tentang efek perubahan unit masih berlaku: bandingkan proporsi data yang berada di bar 20 km hingga 25 km dengan yang di bar 20.000 meter hingga 25.000 meter untuk kedua plot ini. Anda juga dapat mengonfirmasi secara hitung bahwa area semua bilah berjumlah satu dalam kedua kasus.
Apa yang mungkin saya maksudkan dengan klaim saya bahwa PDF adalah "semacam versi kontinu histogram"? Mari kita ambil strip kecil di bawah kurva kepadatan probabilitasnilai x dalam interval [ x , x + δ x ] , sehingga strip tersebut adalahlebar δ x , dan tinggi kurva adalah kira-kira konstan f ( x ) . Kita bisa menggambar sebatang tinggi itu, yang luasnya f ( x )x[x,x+δx]δxf(x) mewakili perkiraan probabilitas berbaring di jalur itu.f(x)δx
Bagaimana kita menemukan area di bawah kurva antara dan x = b ? Kita dapat membagi interval itu menjadi strip kecil dan mengambil jumlah dari area bar, ∑ f ( x )x=ax=b , yang akan sesuai dengan perkiraan probabilitas berbaring dalam interval [ a , b ] . Kami melihat bahwa kurva dan bilah tidak tepat sejajar, sehingga ada kesalahan dalam perkiraan kami. Dengan membuat δ x lebih kecil dan lebih kecil untuk setiap bilah, kami mengisi interval dengan bilah yang lebih banyak dan lebih sempit, yang ∑ f ( x )∑f(x)δx[a,b]δx memberikan perkiraan area yang lebih baik.∑f(x)δx
Untuk menghitung area secara tepat, daripada mengasumsikan konstan di setiap strip, kami mengevaluasi integral ∫f(x), dan ini sesuai dengan probabilitas sebenarnya dari berbaring di interval[a,b]. Mengintegrasikan seluruh kurva memberikan satu area total (yaitu probabilitas total) satu, untuk alasan yang sama bahwa meringkas area semua bar dari histogram frekuensi relatif memberikan area total (yaitu proporsi total) dari satu. Integrasi itu sendiri adalah semacam versi berkesinambungan dari mengambil jumlah.∫baf(x)dx[a,b]
Kode R untuk plot
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)