Це може допомогти вам зрозуміти, що вертикальна вісь вимірюється як щільність ймовірності . Отже, якщо горизонтальна вісь вимірюється в км, то вертикальна вісь вимірюється як щільність ймовірності "на км". Припустимо, ми намалюємо прямокутний елемент на такій сітці, яка шириною 5 "км" і висотою 0,1 "на км" (що ви можете сказати як "км "). Площа цього прямокутника дорівнює 5 км х 0,1 км = 0,5. Одиниці скасовуються, і нам залишається лише одна ймовірність.- 1- 1- 1
Якщо ви змінили горизонтальні одиниці на "метри", вам доведеться змінити вертикальні одиниці на "на метр". Прямокутник зараз був би шириною 5000 метрів і мав би щільність (висоту) 0,0001 на метр. У вас все ще залишається вірогідність половини. Ви можете бути обурені тим, як дивні ці два графіки будуть виглядати на сторінці порівняно один з одним (чи не один повинен бути набагато ширшим та коротшим за інший?), Але коли ви фізично малюєте сюжети, ви можете використовувати будь-що вам подобається масштаб. Подивіться нижче, щоб побачити, наскільки мало дивацтва.
Можливо, вам буде корисно розглянути гістограми, перш ніж перейти до кривих щільності ймовірності. Багато в чому вони аналогічні. Вертикальна вісь гістограми - це щільність частоти [на одиницю],х а області представляють частоти, знову ж таки тому, що горизонтальні та вертикальні одиниці відміняються при множенні. Крива PDF - це свого роду безперервна версія гістограми, загальна частота якої дорівнює одиниці.
Ще більш близькою аналогією є гістограма відносної частоти - ми кажемо, що така гістограма була "нормалізована", так що елементи області тепер представляють пропорції вашого вихідного набору даних, а не необроблені частоти, а загальна площа всіх барів - одна. Зараз висоти відносні щільності частоти [на одиницю]х . Якщо гістограма відносної частоти має смугу, яка проходить вздовжхзначення від 20 км до 25 км (тому ширина смуги становить 5 км) і має відносну щільність частоти 0,1 на км, то цей бар містить 0,5 частку даних. Це точно відповідає думці про те, що випадково вибраний елемент із набору даних має 50% ймовірність лежати у цій смужці. Попередній аргумент про вплив змін у одиницях все ще застосовується: порівняйте пропорції даних, що лежать у смузі від 20 км до 25 км, з співвідношеннями в смузі від 20000 до 25000 метрів для цих двох ділянок. Ви також можете арифметично підтвердити, що області всіх барів у обох випадках дорівнюють одному.
Що я міг би мати на увазі під своїм твердженням, що PDF - це "своєрідна безперервна версія гістограми"? Візьмемо невелику смугу під кривою щільності ймовірності вздовж значень в інтервалі , тому смуга дорівнює ширині, а висота кривої - приблизно константа . Ми можемо намалювати смугу такої висоти, площа являє собою приблизну ймовірність лежання в цій смужці.[ x , x + δ x ] δ x f ( x ) f ( x )х[ x , x + δх ]δхf( х )f( х )δх
Як ми можемо знайти площу під кривою між і ? Ми могли б поділити цей інтервал на невеликі смужки і взяти суму площ барів, , яка б відповідала приблизній ймовірності лежання в проміжку . Ми бачимо, що крива та бруски точно не вирівнюються, тому в нашому наближенні є помилка. Роблячи меншими та меншими для кожного бар, ми заповнюємо інтервал все більшими та вужчими смугами, забезпечує кращу оцінку площі.x = b ∑ f ( x )х = аx = b[ a , b ] δ x ∑ f ( x )∑ f( х )δх[ a , b ]δх∑ f( х )δх
Щоб точно обчислити площу, замість того, щоб було постійним по всій смузі, ми оцінюємо інтеграл , і це відповідає справжній ймовірності лежання в інтервалі . Інтегрування по всій кривій дає загальну площу (тобто загальну ймовірність) одну, з тієї ж причини, що підсумовуючи площі всіх барів гістограми відносної частоти, дає загальну площу (тобто загальну частку) одиниці. Інтеграція сама по собі є свого роду суцільною версією взяття суми.∫ b a f ( x ) d x [ a , b ]f( х )∫баf( x ) dх[ 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)