随机变量的分布模式是统计模型的基础,R的基础包stats
提供了许多关于概率分布的函数。本篇主要介绍离散型分布,包括两点分布、二项分布、帕斯卡分布、负二项分布、几何分布、超几何分布和泊松分布。
1 stats
中关于概率分布的函数
stats
工具包针对每种分布模式提供了4个函数,分别用于计算概率密度函数、概率分布函数、概率分位数的取值以及生成符合该分布的随机序列。
概率密度函数主要对于连续型变量而言。对于离散型变量,概率密度函数相当于随机变量取某值的概率:
概率分布函数是随机变量不大于某个数值的概率累计和:
概率分位数是指当概率分布函数取某个数值时对应的随机变量的取值:
在stats
工具包中,计算概率密度、概率分布、概率分位数取值的函数分别以d(density)、p(probability)和q(quantile)开头,生成符合该分布的随机序列的函数以r(random)开头。
2 两点分布和二项分布
随机事件每次发生的几率恒定,则在一次试验中事件发生的次数服从两点分布,又称伯努利分布(Bernoulli Distribution),记为。
在n次独立重复试验中,随机事件每次发生的几率恒定,那么它发生的次数服从二项分布(Binomial Distribution),记为。其中在每次试验下,事件发生的次数服从两点分布,即两点分布是n = 1时的二项分布。
二项分布的概率密度函数:
dbinom(x, size, prob, log = FALSE)
pbinom(q, size, prob, lower.tail = TRUE, log.p = FALSE)
qbinom(p, size, prob, lower.tail = TRUE, log.p = FALSE)
rbinom(n, size, prob)
概率密度函数:已知分布参数求随机变量为某值的概率
dbinom()
函数的参数:
x是随机事件发生次数;
size是总的试验次数,当size = 1时是两点分布;
prob为随机事件每次发生的几率;
log默认值为FALSE,当为TRUE时,结果取自然对数后再输出。
dbinom(2, 10, 0.4)
dbinom(0, 1, 0.4)
dbinom(2, 10, 0.4, log = T)
[1] 0.1209324
[1] 0.6
[1] -2.112524
概率分布函数:已知分布参数求随机变量取值不大于或大于某个数值的概率
pbinom()
函数的参数: q相当于dbinom()
中的x,之所以用q表示是因为pbinom()
与qbinom()
互为反函数,这样表示更加对称;
lower.tail表示从小到大进行概率累计,默认为TRUE,表示计算出现次数不大于q的概率,当为FALSE时,计算大于q的概率;
log.p类似
dbinom()
中的log参数。
pbinom(2, 10, 0.4)
pbinom(2, 10, 0.4, lower.tail = F)
[1] 0.1672898
[1] 0.8327102
分位数:已知分布参数和分布函数的取值,求临界的发生次数
qbinom()
中的p表示已知的概率,其他参数同上。
qbinom(0.4, 10, 0.4)
qbinom(0.4, 10, 0.4, lower.tail = F)
[1] 4
[1] 4
生成符合两点分布或二项分布的随机数序列
rbinom()
中的n表示要生成的随机数个数,其他参数表示该分布的参数,意义同上。
set.seed(123)
rbinom(10, 10, 0.4)
rbinom(10, 1, 0.4)
[1] 3 5 4 6 6 1 4 6 4 4
[1] 1 0 1 0 0 1 0 0 0 1
二项分布关于发生几率的概率密度函数图象
set.seed(321)
plot(1, type = "n", xlim = c(0,12), ylim = c(0,0.4),
xlab = "X", ylab = "概率",
panel.first = grid(12, 4), axes = F, frame.plot = T)
axis(1, at = 0:10, tick = F)
axis(2, at = seq(0,0.4,0.1), tick = F)
for(prob in seq(0.1, 0.9, 0.1)) {
x <- c(0:10)
y <- dbinom(c(0:10), 10, prob)
lines(x, y, type = "b", lwd = 2,
col = rgb(prob, 0, 1-prob))
}
legend("bottomright", legend = seq(0.1, 0.9, 0.1), lty = 1, xpd = T,
col = c(rgb(seq(0.1, 0.9, 0.1), 0, 1-seq(0.1, 0.9, 0.1))))
3 帕斯卡分布与负二项分布
帕斯卡分布(Pascal Distribution)有多种定义形式,stats
中的相关函数针对的定义如下:
在独立重复试验中,随机事件第次发生时,没有发生的次数服从帕斯卡分布,记为。
独立试验一共重复了次;
为非负整数,r为正整数;
当不为0时,随机事件在前次独立试验中发生了次,第次发生在第次独立试验中。
负二项分布(Negative Binomial Distribution)是帕斯卡分布的扩展,它允许事件发生次数可以为非整数。
可以为任意正数,不要求为整数,即;
负二项分布仍然是离散型分布,必须为非负整数即。
帕斯卡分布的概率函数:
引入伽马函数:
所以
负二项分布的概率密度函数:
stats
工具包相关的函数:
dnbinom(x, size, prob, mu, log = FALSE)
pnbinom(q, size, prob, mu, lower.tail = TRUE, log.p = FALSE)
qnbinom(p, size, prob, mu, lower.tail = TRUE, log.p = FALSE)
rnbinom(n, size, prob, mu)
x表示随机事件没有发生的次数;
size表示随机事件发生的次数,即;
prob为随机事件每次发生的几率,mu为的数学期望,二者不能同时设定,有prob = size/(size + mu);
其他参数含义同二项分布的相关参数。
dnbinom(c(1:10), size = 5, prob = 0.4)
dnbinom(c(1:10), size = 5, mu = 5)
# 生成随机数
rnbinom(10, size = 5, prob = 0.4)
rnbinom(10, size = 5, mu = 5)
[1] 0.03072000 0.05529600 0.07741440 0.09289728 0.10032906
[6] 0.10032906 0.09459597 0.08513638 0.07378486 0.06197928
[1] 0.07812500 0.11718750 0.13671875 0.13671875 0.12304688
[6] 0.10253906 0.08056641 0.06042480 0.04364014 0.03054810
[1] 12 8 5 15 1 5 3 7 1 4
[1] 5 5 5 6 7 11 4 4 4 6
帕斯卡分布关于发生几率的概率密度函数图象
set.seed(321)
plot(1, type = "n", xlim = c(0,12), ylim = c(0,0.4),
xlab = "X", ylab = "概率",
panel.first = grid(12, 4), axes = F, frame.plot = T)
axis(1, at = 0:10, tick = F)
axis(2, at = seq(0,0.4,0.1), tick = F)
for(prob in seq(0.1, 0.9, 0.1)) {
x <- c(0:10)
y <- dnbinom(c(0:10), 10, prob)
lines(x, y, type = "b", lwd = 2,
col = rgb(prob, 0, 1-prob))
}
legend("bottomright", legend = seq(0.1, 0.9, 0.1), lty = 1, xpd = T,
col = c(rgb(seq(0.1, 0.9, 0.1), 0, 1-seq(0.1, 0.9, 0.1))))
帕斯卡分布的几种定义:
-
随机事件第次发生时,事件不发生的次数记为;
-
随机事件第次发生时,试验次数总数记为;
-
随机事件第次不发生时,事件发生的次数记为;
-
随机事件第次不发生时,试验次数总数记为。
其中第1种即为stats
采用的定义,其他三种均可以通过参数变换转化为第1种形式。
4 几何分布与超几何分布
stats
中相关函数对几何分布的定义是:
随机事件第1次发生时,不发生的次数记为,则X服从几何分布(Geometric Distribution),记为。
显然,几何分布是r=1时的帕斯卡分布。
相关函数如下:
dgeom(x, prob, log = FALSE)
pgeom(q, prob, lower.tail = TRUE, log.p = FALSE)
qgeom(p, prob, lower.tail = TRUE, log.p = FALSE)
rgeom(n, prob)
超几何分布(Hypergeometric Distribution)描述的是不放回抽样:
dhyper(x, m, n, k, log = FALSE)
phyper(q, m, n, k, lower.tail = TRUE, log.p = FALSE)
qhyper(p, m, n, k, lower.tail = TRUE, log.p = FALSE)
rhyper(nn, m, n, k)
以从不透明箱子抽球为例,x为抽到的白球个数,m为箱子中的白球总数,n为黑球总数,k为抽取的总球数。
超几何分布关于箱子中白球总数的概率密度函数图象
set.seed(321)
plot(1, type = "n", xlim = c(0,12), ylim = c(0,0.4),
xlab = "X", ylab = "概率",
panel.first = grid(12, 4), axes = F, frame.plot = T)
axis(1, at = 0:10, tick = F)
axis(2, at = seq(0,0.4,0.1), tick = F)
for(m in seq(11, 19, 1)) {
x <- c(0:10)
y <- dhyper(c(0:10), m, 10, 10)
prob <- (m-10)/10
lines(x, y, type = "b", lwd = 2,
col = rgb(prob, 0, 1-prob))
}
legend("bottomright", legend = seq(11, 19, 1), lty = 1, xpd = T,
col = c(rgb(seq(0.1, 0.9, 0.1), 0, 1-seq(0.1, 0.9, 0.1))))
5 泊松分布
随机事件在单位时间内发生的次数服从泊松分布(Poisson Distribution),记为,其中是随机事件在单位时间内的平均发生次数。
泊松分布可以看作是二项分布在试验次数很大,随机事件每次发生几率很小的情况下的近似,有。
泊松分布的概率密度函数:
相关函数:
dpois(x, lambda, log = FALSE)
ppois(q, lambda, lower.tail = TRUE, log.p = FALSE)
qpois(p, lambda, lower.tail = TRUE, log.p = FALSE)
rpois(n, lambda)
泊松分布关于的概率密度函数图象
set.seed(321)
plot(1, type = "n", xlim = c(0,12), ylim = c(0,0.4),
xlab = "X", ylab = "概率",
panel.first = grid(12, 4), axes = F, frame.plot = T)
axis(1, at = 0:10, tick = F)
axis(2, at = seq(0,0.4,0.1), tick = F)
for(lambda in seq(0.1, 0.9, 0.1)*10) {
x <- c(0:10)
y <- dpois(c(0:10), lambda)
prob <- lambda/10
lines(x, y, type = "b", lwd = 2,
col = rgb(prob, 0, 1-prob))
}
legend("bottomright", legend = seq(0.1, 0.9, 0.1)*10, lty = 1, xpd = T,
col = c(rgb(seq(0.1, 0.9, 0.1), 0, 1-seq(0.1, 0.9, 0.1))))