本章将介绍pnrom(),qnorm(),dnrom(),rnorm() ,以及指数正态分布,均匀分布,三角分布,几何分布,二项分布,泊松分布,贝塔分布,指数分布等。
前言:
在企业风险中,我们经常需要用各种分布产生的随机数,来作为模型的输入参数。因此,熟悉各种分布必不可少。
四种基本函数:
以正态分布为例:
- pnrom()函数:p代表“概率”,它是一个累积分布函数。该函数返回负无限大到q的积分
- 【lower.tail = TRUE 控制从负无限大还是正无限大】
-
pnorm(q = 0, mean = 0, sd = 1, lower.tail = TRUE) ## [1] 0.5
qnorm() 函数:q代表“分位数”,与pnrom相反。
-
qnorm(p = .5, mean = 0, sd = 1) ## [1] 0
dnrom()函数:d代表“密度”,它返回给定参数的正态分布的概率密度函数值【即返回y】
dnorm(0, mean = 0, sd = 1)
## [1] 0.3989423
- rnorm() 函数:r代表“随机”,它返回指定分布的随机变量。
n = 3
rnorm(n, mean = 0, sd = 1) #生成n个服从均值为2,标准差为0.4的正态分布的随机数
## [1] 0.46057488 -0.20837374 0.06730882
常用的分布
1. 正态分布:
rnorm(n, mean = 0, sd = 1) #生成n个服从均值为2,标准差为0.4的正态分布的随机数
画图
x <- seq(-3, 6, .01) #x轴
y <- dnorm(x,mean = 2, sd = .5) #y轴
ggplot()+geom_line(aes(x = x, y = y), color = "black")+
theme_bw()
2. 对数正态分布(特殊):
其生成随机数的的函数为
rlnorm(3, meanlog = 7, sdlog = 75)
## [1] 4.471746e+18 7.451323e-16 6.577833e+34
但R通过基本正态分布的平均值和标准偏差而不是对数正态分布本身来参数化对数正态分布。
即其相当于 exp(rnorm(n = 1000000, mean = 7, sd = 75)) 产生的结果。
而实际需求一般为 “临床试验成本符合对数正态,平均值为 150,000,000 美元,标准差为 30,000,000 美元。”
要的是:获得遵循对数正态分布且,算术平均值为 7, 且标准差为 75 的随机数据样本。
因此,我们需要自制函数:
qlnorm2<-function(p,mean,sd)
qlnorm(p=p,
meanlog=log(mean*(1+sd^2/mean^2)^-.5),
sdlog=log(1+sd^2/mean^2)^.5)
rlnorm2<-function(n,mean,sd)
qlnorm2(runif(n),mean,sd)
或者
rlnorm2 <- function(n, mean, sd){
rlnorm(n, log(m^2 / sqrt(s^2 +m^2)), log(1+sd^2/mean^2) ^ .5)
}
画图(用的rlnorm2,大家可以试试用rlnorm会怎么样):
a <- rlnorm2(100000,150,30)
ggplot()+ geom_density(aes(x=a), fill="blue") +
ylab("probability density") +
xlab ( "outcome ")
3. 均匀分布:
均匀分布也叫矩形分布,在相同长度间隔的分布概率是等可能的。 均匀分布由两个参数a和b定义,它们是数轴上的最小值和最大值(很好理解,概率都一样的分布)
runif(3, 50, 150)
## [1] 76.21207 121.13413 133.12384
rdunif(3, 50, 150) #离散均匀
## [1] 116 123 120
画图
x <- seq(0,10,.1)
y <- dunif(x, min= 0, max = 10)
ggplot()+geom_line(aes(x = x, y=y),
color = "black")+
scale_y_continuous(limits = c(0,.12))+
theme_bw()
4. 三角分布:
在概率论和统计学中,三角分布是具有下限a、上限b和众数 c的连续概率分布,其中a < b且 a ≤ c ≤ b 。
library(EnvStats) #rtri
rtri(3, 8, 15, 13)
画图
a <- rtri(100000, 8, 15, 13)
ggplot()+ geom_density(aes(x=a), fill="blue") +
ylab("probability density") +
xlab ( "outcome ")
5. 几何分布:
几何分布是一种离散概率分布,它表示在伯努利试验中获得成功之前连续失败次数的概率。
rgeom(6, 1/6)
## [1] 1 8 19 5 3 0
画图
x <- 0:20
y <- dgeom(x = x, prob = 1/6)
ggplot()+geom_col(aes(x = x, y=y),
color = "black",
fill = "blue",
width = 0.5)+
scale_x_continuous(breaks = seq(0,20,2))+
theme_bw()
6. 二项分布:
是n个独立的是/非试验中成功的次数的离散概率分布,其中每次试验的成功概率为p。这样的单次成功/失败试验又称为伯努利试验。
rbinom (3, 20, .8)
## [1] 16 17 17
画图
a<-rbinom (1000000, 20, .8)
ggplot()+geom_histogram(aes(x = a, y = ..count.. /sum(..count..)) ,
color="dark blue" ,fill="blue" , binwidth=1)+
ylab( "prob")+xlab( "successes ")
7. 负二项分布(Negative binomial distribution):
一种描述在一系列独立同分布的伯努利试验中,成功次数到达指定次数(记为r)时失败次数的离散概率分布。如,我们定义掷骰子随机变量x值为x=1时为成功,所有x≠1为失败,这时我们反复掷骰子直到1出现3次(成功次数r=3),此时非1数字出现次数的概率分布即为负二项分布。
rnbinom(3, 5, .3)
## [1] 10 11 3
画图
x <- rnbinom(1000, 5 , .3)
ggplot()+geom_histogram(aes(x = x, y = ..count../sum(..count..)),
color = "black",
fill = "blue",
binwidth = 0.5)+
theme_bw()
8. 泊松分布:
一种离散概率分布,它表示给定数量的事件在固定的时间或空间间隔内发生的概率。例如,呼叫中心每天 24 小时平均每小时接听 180 个电话(独立的)。收到一个不会改变下一个何时到达的概率。在任何一分钟内接到的电话数量具有泊松概率分布。
例如采用0.05J/㎡紫外线照射大肠杆菌时,每个基因组(~4×10核苷酸对)平均产生3个嘧啶二体。实际上每个基因组二体的分布是服从泊松分布的,将取如下形式:
rpois(3 ,lambda = 10)
## [1] 11 10 14
画图
x <- 0:30
y <- dpois(x=x ,lambda = 10)
ggplot()+geom_col(aes(x = x, y = y),
color = "black",
fill = "blue",
width = 0.5)+
scale_x_continuous(breaks = seq(0,20,2))+
theme_bw()
9. 贝塔分布【不常用】:
beta 分布是定义在区间 [0, 1] 上的一系列连续概率分布,由两个正形状参数参数化,用alpha ( α ) 和beta ( β ) 表示,它们显示为随机变量并控制分布的形状。
rbeta(3, 5, 5)
## [1] 0.3514191 0.4042299 0.5221565
10.PERT分布【不常用】:
PERT 分布是一系列连续概率分布,由变量可以取的最小值 (a)、最可能 (b) 和最大值 (c) 定义。它是四参数Beta分布的变换【类似于三角分布,min<ml<max.】
rpert<-function(n, min, ml, max, gam=4){
y<-rbeta(n, 1+gam*(ml-min)/(max-min), 1+gam*(max-ml)/(max-min))
min+y*(max-min)
}
rpert(3, 10, 13, 20)
## [1] 16.40894 12.63236 13.02674
11.指数分布:
一种连续概率分布。指数分布可以用来表示独立随机事件发生的时间间隔,比如旅客进入机场的时间间隔、电话打进客服中心的时间间隔、机器的寿命等。(与泊松分布对应)
rexp(3, 0.5)
## [1] 1.385733 3.149449 1.544504
12.其他
此外还有伽马分布,学生t分布等
rgamma(3, shape = 4, rate = 1)
##[1] 2.214553 4.567997 9.667040
rt(3, 100)
##[1] 1.925749 -0.206317 1.421842
其他的一些基本概念:
1. 概率密度函数(pdf)(用于连续结果)或概率质量函数(pmf)(用于离散结果)给出了特定值的概率。质量函数允许我们回答这样的问题:客户数量恰好为4的概率是多少?在连续情况下,这种关系更为复杂,因为精确命中任何结果的概率被认为是0。
2. 累积分布函数(cdf)给出小于或等于某个值的概率。
总结:
Distribution | R Function to randomly generate | Discrete or Continuous? | Bounded? |
Beta | rbeta (n,alpha, beta) | Continuous | Yes |
Binomial | rbinom(n,trials, probability) | Discrete | Yes |
Discrete Uniform* | rdunif(n,min,max) | Discrete | Yes |
Exponential | rexp(n,mean) | Continuous | Below |
Gamma | rgamma(n, alpha, beta) | Continuous | Below |
Geometric | rgeom(n,probability) | Discrete | Below |
Lognormal* | rlnorm2 (n,mean, standard deviation) | Continuous | Below |
Negative Binomial | rnbinom(n, successes, probability) | Discrete | Below |
Normal | rnorm (n, mean, standard deviation) | Continuous | No |
Pert* | rpert(n, min, most likely, max) | Continuous | Yes |
Poisson | rpois (n, mean) | Discrete | Below |
Student t | rt(n, degrees of freedom) | Continuous | No |
Triangular* | rtri(n,min, most likely, max) | Continuous | Yes |
Uniform | runif (n, min, max) | Continuous | Yes |
*function user defined |
内容源于波士顿大学,感谢教授David Ritt
参考文献:
Making sense of the rlnorm() function in R | Wheels on the bus
https://en.wikipedia.org/wiki/Log-normal_distribution#Arithmetic_moments