수직 축이 확률 밀도 로 측정된다는 것을 이해하는 데 도움이 될 수 있습니다 . 따라서 가로 축을 km 단위로 측정하면 세로 축은 "km 당"확률 밀도로 측정됩니다. 너비가 5 "km"이고 높이가 0.1 "km"( "km - 1 " 로 쓰는 것을 선호 할 수 있음) 인 그리드에 직사각형 요소를 그립니다 . 이 직사각형의 면적은 5km x 0.1km - 1 = 0.5입니다. 단위가 취소되고 우리는 절반의 확률로 남습니다.− 1− 1
가로 단위를 "미터"로 변경 한 경우 세로 단위를 "미터당"으로 변경해야합니다. 직사각형의 너비는 5000 미터가되며 미터당 0.0001의 밀도 (높이)를 갖습니다. 여전히 절반의 확률로 남아 있습니다. 이 두 그래프가 페이지에서 서로 비교되는 것이 이상하게 보일 수 있습니다 (하나가 다른 것보다 훨씬 넓고 짧을 필요는 없습니까?). 물리적으로 그림을 그릴 때 무엇이든 사용할 수 있습니다 당신이 좋아하는 규모. 약간의 이상한 점이 얼마나 필요한지 아래를보십시오.
확률 밀도 곡선으로 이동하기 전에 히스토그램 을 고려하는 것이 도움이 될 수 있습니다 . 여러면에서 그것들은 유사합니다. 히스토그램의 세로 축은 x 밀도 단위의 주파수 밀도엑스 이고 곱셈시 가로 및 세로 단위가 취소되므로 영역은 다시 주파수를 나타냅니다. PDF 곡선은 총 빈도가 1 인 히스토그램의 연속 버전입니다.
더 가까운 유추는 상대 주파수 히스토그램입니다 . 우리는 이러한 히스토그램이 "정규화"되었으므로 영역 요소는 이제 원시 주파수가 아닌 원래 데이터 세트의 비율 을 나타내며 모든 막대의 총 면적은 하나입니다. 높이는 이제 상대 주파수 밀도 [ 단위당]엑스 입니다. 상대 주파수 히스토그램에 x를 따라 움직이는 막대가있는 경우엑스20km에서 25km까지 (바의 너비는 5km) 상대 주파수 밀도는 1km 당 0.1이며,이 막대에는 0.5 비율의 데이터가 포함됩니다. 이는 데이터 세트에서 임의로 선택한 항목이 해당 막대에 50 % 확률로 존재한다는 아이디어와 정확히 일치합니다. 단위 변경의 영향에 대한 이전의 논증은 여전히 적용됩니다 : 20 km ~ 25 km bar에있는 데이터의 비율을이 두 플롯의 20,000 m ~ 25,000 m bar에 비교하십시오. 두 막대 모두에서 모든 막대의 면적이 하나임을 합산하여 산술적으로 확인할 수도 있습니다.
PDF가 "히스토그램의 일종의 연속 버전"이라는 주장은 무엇을 의미합니까? 간격 [ x , x + δ x ]의 값을 따라 확률 밀도 곡선 아래에서 작은 스트립을 가져 와서 스트립은 δ x 너비이고 곡선의 높이는 대략 일정한 f ( x ) 입니다. 면적 f ( x )의 높이를 가진 막대를 그릴 수 있습니다.엑스[ x , x + δx ]δ엑스에프( x ) 는 해당 스트립에있는 대략적인 확률을 나타냅니다.에프( x )δ엑스
와 x = b 사이의 곡선 아래 면적을 어떻게 찾을 수 있습니까? 그 간격을 작은 조각으로 세분하고 막대의 면적의 합을 구할 수 있습니다. ∑ f ( x )x = ax = b 의 간격으로 누워 대략 확률에 대응하는 것이다 [ , B ] . 곡선과 막대가 정확하게 정렬되지 않았으므로 근사값에 오류가 있습니다. 함으로써 δ X는 각각 바 작아, 우리는 더 좁은 막대와 간격 기입 Σ F ( X를 )∑ f( x )δ엑스[ a , b ]δ엑스 는 면적의 더 나은 추정치를 제공합니다.∑ f( x )δ엑스
가 각 스트립에서 일정 하다고 가정하지 않고 면적을 정확하게 계산하기 위해 적분 ∫ b a f ( x ) d x 를 평가하며 이는 구간 [ a , b ] 에 놓여질 확률에 해당합니다 . . 전체 곡선에 적분하면 전체 면적 (즉, 총 확률)이 1이됩니다. 같은 이유로 상대 주파수 히스토그램의 모든 막대의 면적을 합하면 총 면적 (1)이됩니다. 통합 자체는 일종의 지속적인 버전입니다.에프( 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)