在R語言中使用概率分布:dnorm,pnorm,qnorm和rnorm
原文鏈接:http://tecdat.cn/?p=11040
在這里,我將討論哪些函數(shù)可用于處理正態(tài)分布:dnorm,pnorm,qnorm和rnorm。
R中的分布函數(shù)
?有四個關(guān)聯(lián)的函數(shù), 四個正態(tài)分布函數(shù)是:
d范數(shù):正態(tài)分布的密度函數(shù)
p范數(shù):正態(tài)分布的累積密度函數(shù)
q范數(shù):正態(tài)分布的分位數(shù)函數(shù)
r范數(shù):從正態(tài)分布中隨機抽樣
概率密度函數(shù):dnorm
概率密度函數(shù)(PDF,簡稱:密度)表示觀察具有特定值的測量值的概率,因此密度上的積分始終為1。?XX,正常密度定義為

?
使用密度,可以確定事件的概率。例如,您可能想知道:一個人的IQ恰好為140的可能性是多少?。在這種情況下,您將需要檢索IQ分布在值140處的密度??梢杂?00的平均值和15的標準差對IQ分布進行建模。相應(yīng)的密度為:
sample.range <- 50:150
iq.mean <- 100
iq.sd <- 15
iq.dist <- dnorm(sample.range, mean = iq.mean, sd = iq.sd)
iq.df <- data.frame("IQ" = sample.range, "Density" = iq.dist)
library(ggplot2)
ggplot(iq.df, aes(x = IQ, y = Density)) + geom_point()

?
通過這些數(shù)據(jù),我們現(xiàn)在可以回答初始問題以及其他問題:
# likelihood of IQ == 140?
pp(iq.df$Density[iq.df$IQ == 140])
## [1] "0.076%"
# likelihood of IQ >= 140?
## [1] "0.384%"
# likelihood of 50 < IQ <= 90?
## [1] "26.284%"
累積密度函數(shù):pnorm
累積密度(CDF)函數(shù)是單調(diào)增加的函數(shù),因為它通過

?
為了直觀了解CDF,讓我們?yōu)镮Q數(shù)據(jù)創(chuàng)建一個圖:
ggplot(iq.df, aes(x = IQ, y = CDF_LowerTail)) + geom_point()

?
如我們所見,所描繪的CDF顯示了IQ小于或等于給定值的可能性。這是因為pnorm
默認情況下計算低尾巴,即P[?X<?=?x?]P[X<=X]。利用這些知識,我們可以以略有不同的方式獲得一些先前問題的答案:
# likelihood of 50 < IQ <= 90?
## [1] "25.249%"
# set lower.tail to FALSE to obtain P[X >= x]
# Probability for IQ >= 140? same value as before using dnorm!
## [1] "0.383%"
請注意,pnorm的結(jié)果與手動匯總通過dnorm所獲得的概率所得的結(jié)果相同。此外,通過設(shè)置lower.tail = FALSE
,dnorm
可用于直接計算p值,該p值用于衡量觀察值的可能性至少與獲得的值一樣高。
?分位數(shù)功能:qnorm
分位數(shù)函數(shù)只是累積密度函數(shù)(iCDF)的反函數(shù)。因此,分位數(shù)函數(shù)從概率映射到值。讓我們看一下分位數(shù)函數(shù)P[?X<?=?x?]P[X<=X]:
# input to qnorm is a vector of probabilities
ggplot(icdf.df, aes(x = Probability, y = IQ)) + geom_point()

?
使用分位數(shù)函數(shù),我們可以回答與分位數(shù)有關(guān)的問題:
# what is the 25th IQ percentile?
## [1] 89.88265
# what is the 75 IQ percentile?
## [1] 110.1173
# note: this is the same results as from the quantile function
## ? ? ? ?0% ? ? ? 25% ? ? ? 50% ? ? ? 75% ? ? ?100%
## ? ? ?-Inf ?89.88265 100.00000 110.11735 ? ? ? Inf
隨機采樣函數(shù):rnorm
當您想從正態(tài)分布中抽取隨機樣本時,可以使用rnorm
。例如,我們可以rnorm
用來模擬IQ分布中的隨機樣本。
# show one facet per random sample of a given size
ggplot() + geom_histogram(data = my.df, aes(x = IQ)) + facet_wrap(.~SampleSize, scales = "free_y")

?
ggplot(my.sample.df, aes(x = IQ)) + geom_histogram()

?
請注意,我們進行調(diào)用set.seed
是為了確保隨機數(shù)生成器始終生成相同的數(shù)字序列以實現(xiàn)可重復(fù)性。
?
?