Nó có thể giúp bạn nhận ra rằng trục dọc được đo là mật độ xác suất . Vì vậy, nếu trục ngang được đo bằng km, thì trục tung được đo là mật độ xác suất "trên km". Giả sử chúng ta vẽ một phần tử hình chữ nhật trên một lưới như vậy, rộng 5 "km" và cao 0,1 "mỗi km" (mà bạn có thể thích viết là "km - 1 "). Diện tích của hình chữ nhật này là 5 km x 0,1 km - 1 = 0,5. Các đơn vị hủy bỏ và chúng tôi chỉ còn lại xác suất một nửa.−1−1
Nếu bạn thay đổi đơn vị ngang thành "mét", bạn sẽ phải thay đổi đơn vị dọc thành "mỗi mét". Hình chữ nhật bây giờ sẽ rộng 5000 mét và có mật độ (chiều cao) là 0,0001 mỗi mét. Bạn vẫn còn xác suất một nửa. Bạn có thể bị nhiễu loạn bởi sự kỳ lạ của hai biểu đồ này trên trang so với nhau (không phải rộng hơn và ngắn hơn nhiều so với cái kia?), Nhưng khi bạn vẽ các ô, bạn có thể sử dụng bất cứ thứ gì quy mô bạn thích. Nhìn bên dưới để thấy sự kỳ lạ cần được tham gia.
Bạn có thể thấy hữu ích khi xem xét biểu đồ trước khi bạn chuyển sang các đường cong mật độ xác suất. Theo nhiều cách, chúng là tương tự nhau. Trục dọc của biểu đồ là mật độ tần số [trên mỗi đơn vị ]x và các khu vực đại diện cho tần số, một lần nữa bởi vì các đơn vị ngang và dọc hủy bỏ khi nhân. Đường cong PDF là một loại phiên bản liên tục của biểu đồ, với tổng tần số bằng một.
Một sự tương tự gần hơn nữa là biểu đồ tần số tương đối - chúng tôi nói rằng biểu đồ như vậy đã được "chuẩn hóa", do đó các phần tử khu vực hiện đại diện cho tỷ lệ của tập dữ liệu gốc của bạn thay vì tần số thô và tổng diện tích của tất cả các thanh là một. Độ cao hiện tại là mật độ tần số tương đối [trên mỗi đơn vị ]x . Nếu biểu đồ tần số tương đối có một thanh chạy dọc xcác giá trị từ 20 km đến 25 km (vì vậy chiều rộng của thanh là 5 km) và có mật độ tần số tương đối là 0,1 trên mỗi km, sau đó thanh đó chứa 0,5 phần trăm dữ liệu. Điều này tương ứng chính xác với ý tưởng rằng một mục được chọn ngẫu nhiên từ bộ dữ liệu của bạn có xác suất 50% nằm trong thanh đó. Lập luận trước đây về tác động của các thay đổi trong các đơn vị vẫn được áp dụng: so sánh tỷ lệ dữ liệu nằm trong thanh 20 km đến 25 km với tỷ lệ trong thanh 20.000 mét đến 25.000 mét cho hai ô này. Bạn cũng có thể xác nhận một cách hợp lý rằng các khu vực của tất cả các thanh tổng hợp thành một trong cả hai trường hợp.
Tôi có thể có ý gì khi tuyên bố rằng PDF là "phiên bản liên tục của biểu đồ"? Chúng ta hãy xem một dải nhỏ dưới một đường cong mật độ xác suất, cùng giá trị trong khoảng [ x , x + δ x ] , vì vậy dải là δ x rộng và chiều cao của đường cong là một khoảng không đổi f ( x ) . Chúng ta có thể vẽ một thanh có chiều cao đó, có diện tích f ( x )x[x,x+δx]δxf(x) đại diện cho xác suất gần đúng của việc nằm trong dải đó.f(x)δx
Làm thế nào chúng ta có thể tìm thấy khu vực dưới đường cong giữa và x = b ? Chúng ta có thể chia nhỏ khoảng đó thành các dải nhỏ và lấy tổng diện tích của các thanh, ∑ f ( x )x=ax=b , tương ứng với xác suất xấp xỉ nằm trong khoảng [ a , b ] . Chúng tôi thấy rằng đường cong và các thanh không thẳng hàng chính xác, do đó có một lỗi trong xấp xỉ của chúng tôi. Bằng cách làm cho δ x nhỏ hơn và nhỏ hơn cho mỗi thanh, chúng tôi lấp đầy khoảng bằng các thanh hẹp hơn và hẹp hơn, có ∑ f ( x )∑f(x)δx[a,b]δx cung cấp ước tính tốt hơn về diện tích.∑f(x)δx
Để tính diện tích chính xác, thay vì giả sử không đổi trên mỗi dải, chúng tôi đánh giá tích phân ∫ b a f ( x ) d x , và điều này tương ứng với xác suất thực sự nằm trong khoảng [ a , b ] . Tích hợp trên toàn bộ đường cong cho tổng diện tích (nghĩa là tổng xác suất), vì cùng một lý do là tổng các diện tích của tất cả các thanh của biểu đồ tần số tương đối cho tổng diện tích (tức là tổng tỷ lệ) của một. Tích hợp tự nó là một loại phiên bản liên tục của việc lấy một khoản tiền.f(x)∫baf(x)dx[a,b]
Mã R cho các ô
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)