Może to pomóc zrozumieć, że oś pionowa jest mierzona jako gęstość prawdopodobieństwa . Jeśli więc oś pozioma jest mierzona w km, wówczas oś pionowa jest mierzona jako gęstość prawdopodobieństwa „na km”. Załóżmy, że narysujemy prostokątny element na takiej siatce, która ma szerokość 5 „km” i wysokość 0,1 „na km” (którą wolisz napisać jako „km - 1 ”). Obszar tego prostokąta wynosi 5 km x 0,1 km - 1 = 0,5. Jednostki anulują się, a my pozostaniemy z prawdopodobieństwem połowy.−1−1
Jeśli zmieniłeś jednostki poziome na „metry”, musisz zmienić jednostki pionowe na „na metr”. Prostokąt miałby teraz szerokość 5000 metrów i gęstość (wysokość) wynoszącą 0,0001 na metr. Nadal masz szansę na połowę. Możesz być zaniepokojony tym, jak dziwnie te dwa wykresy będą wyglądały na stronie w porównaniu do siebie (czy jeden nie musi być znacznie szerszy i krótszy od drugiego?), Ale kiedy rysujesz fizycznie wykresy, możesz użyć cokolwiek skaluj lubisz. Spójrz poniżej, aby zobaczyć, jak mało dziwności wymaga.
Pomocne może być rozważenie histogramów przed przejściem do krzywych gęstości prawdopodobieństwa. Pod wieloma względami są one analogiczne. Osią pionową histogramu jest gęstość częstotliwości [na jednostkę ],x a obszary reprezentują częstotliwości, ponownie, ponieważ jednostki poziome i pionowe anulują się po pomnożeniu. Krzywa PDF jest rodzajem ciągłej wersji histogramu o całkowitej częstotliwości równej jeden.
Jeszcze bliższą analogią jest histogram częstotliwości względnej - mówimy, że taki histogram został „znormalizowany”, więc elementy obszaru reprezentują teraz proporcje oryginalnego zestawu danych, a nie surowe częstotliwości, a całkowity obszar wszystkich słupków wynosi jeden. Wysokości są teraz względnymi gęstościami częstotliwości [na jednostkę ]x . Jeśli histogram częstotliwości względnej ma słupek biegnący wzdłuż xwartości od 20 km do 25 km (więc szerokość paska wynosi 5 km) i ma względną gęstość częstotliwości 0,1 na km, wtedy ten pasek zawiera 0,5 części danych. Odpowiada to dokładnie idei, że losowo wybrany element z twojego zestawu danych ma 50% prawdopodobieństwa leżenia w tym pasku. Nadal obowiązuje poprzedni argument dotyczący wpływu zmian jednostek: porównaj proporcje danych leżących w słupku od 20 km do 25 km z tymi w wykresie 20 000 metrów do 25 000 metrów dla tych dwóch wykresów. Możesz również potwierdzić arytmetycznie, że pola wszystkich słupków sumują się do jednego w obu przypadkach.
Co mogłem rozumieć przez moje twierdzenie, że PDF jest „rodzajem ciągłej wersji histogramu”? Weźmy mały pasek pod krzywą gęstości prawdopodobieństwa, wzdłuż wartości przedziale [ xx , więc pasek maszerokość δ x szerokości, a wysokość krzywej jest w przybliżeniu stała f ( x ) . Możemy narysować pręt o tej wysokości, którego powierzchnia f ( x )[x,x+δx]δxf(x) oznacza przybliżone prawdopodobieństwo leżenia w tym pasku.f(x)δx
Jak możemy znaleźć pole pod krzywą pomiędzy oraz x = b ? Możemy podzielić ten przedział na małe paski i wziąć sumę obszarów słupków, ∑ f ( xx=ax=b , co odpowiadałoby przybliżonemu prawdopodobieństwu leżenia w przedziale [ a , b ] . Widzimy, że krzywa i pręty nie są dokładnie wyrównane, więc w naszym przybliżeniu występuje błąd. Zmniejszając δ x coraz mniej dla każdego słupka, wypełniamy przedział większą liczbą i węższymi słupkami, których ∑ f ( x∑f(x)δx[a,b]δx∑f(x)δx zapewnia lepsze oszacowanie obszaru.
Aby dokładnie obliczyć powierzchnię, zamiast zakładać, że była stała na każdym pasku, oceniamy całkę ∫ b af(x) , a to odpowiada rzeczywistemu prawdopodobieństwu leżenia w przedziale [ a , b ] . Całkowanie na całej krzywej daje jeden całkowity obszar (tj. Całkowite prawdopodobieństwo) jeden, z tego samego powodu, że sumowanie obszarów wszystkich słupków histogramu częstotliwości względnej daje całkowite pole (tj. Całkowity udział) jednego. Sama integracja jest rodzajem ciągłej wersji pobierania sumy.∫baf(x)dx[a,b]
Kod R dla wykresów
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)