縦軸が確率密度として測定されることを理解するのに役立つかもしれません。したがって、水平軸がkmで測定される場合、垂直軸は「kmあたりの」確率密度として測定されます。このようなグリッド上に幅5 "km"および高さ0.1 "per km"の長方形の要素を描画するとします( "km - 1 " と書く方が良いかもしれません)。この長方形の面積は5 km x 0.1 km − 1 = 0.5です。ユニットはキャンセルされ、半分の確率で残ります。−1−1
水平の単位を「メートル」に変更した場合、垂直の単位を「メートル」に変更する必要があります。長方形の幅は5000メートルになり、密度(高さ)は1メートルあたり0.0001になります。あなたはまだ半分の確率で残っています。これらの2つのグラフが互いに比較してページ上で奇妙に見えることに混乱するかもしれません(一方を他方よりも大きく、短くする必要はありませんか?)、しかし、物理的にプロットを描くときは何でも使用できますあなたが好きなスケール。以下を見て、どの程度の奇妙さを伴う必要があるかを確認してください。
確率密度曲線に進む前に、ヒストグラムを検討すると役立つ場合があります。多くの点でそれらは類似しています。ヒストグラムの垂直軸は周波数密度[ 単位]でx、面積は周波数を表します。これも、水平および垂直単位が乗算時に相殺されるためです。PDF曲線は、合計頻度が1のヒストグラムの一種の連続バージョンです。
さらに近い例として、相対頻度ヒストグラムがあります。このようなヒストグラムは「正規化」されているため、面積要素は生の頻度ではなく元のデータセットの割合を表し、すべてのバーの合計面積は1になります。高さは、相対周波数密度[単位単位]になりましたx。相対頻度ヒストグラムにxに沿って伸びるバーがある場合x値は20 kmから25 km(バーの幅は5 km)で、相対周波数密度はkmあたり0.1で、そのバーにはデータの0.5の割合が含まれます。これは、データセットからランダムに選択されたアイテムがそのバーにある確率が50%であるという考えに正確に対応しています。単位の変更の影響に関する前の議論はまだ適用されます。これら2つのプロットについて、20 km〜25 kmのバーにあるデータの割合を20,000メートル〜25,000メートルのバーにある割合と比較します。また、両方のケースですべてのバーの面積が1つになることを算術的に確認することもできます。
PDFが「ヒストグラムの連続バージョンの一種」であるという主張によって私は何を意味したのでしょうか?者に沿って、確率密度曲線の下の小さなストリップを見てみましょう間隔の値[ X 、X + δ X ]ストリップであるので、δ X広い、曲線の高さはほぼ一定であり、F (X )。その高さのバーを描くことができ、その面積f (x )x[x,x+δx]δxf(x)そのストリップに横たわっているのおおよその確率を表します。f(x)δx
とx = bの間の曲線の下の領域をどのように見つけることができますか?その間隔を小さなストリップに再分割し、バーの面積の合計∑ f (x )を取得できます。x=ax=b間隔にあるの近似確率に対応する、〔、B ]。曲線とバーが正確に整列していないため、近似に誤差があります。行うことで、 δ xは各バーのためにますます小さく、我々はより狭いバーとの間隔を埋める Σ F (Xの)∑f(x)δx[a,b]δx領域のより良好な推定値を提供します。∑f(x)δx
むしろ仮定より、正確に領域を計算するために各ストリップにわたって一定であった、我々は、積分評価∫ B、F (X )D X間隔にある真の確率に、この対応する[ 、B ]。相対頻度ヒストグラムのすべてのバーの面積を合計すると合計面積(つまり合計比率)が1になるのと同じ理由で、曲線全体で積分すると合計面積(つまり合計確率)が1になります。統合自体は、一種の継続的なバージョンの合計です。f(x)∫baf(x)dx[a,b]
プロットのRコード
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)