生成随机数
R中的概率分布函数
-
rnorm
: 根据给定的平均值和标准偏差生成随机正态变量 -
dnorm
: 计算一个点或点向量的正态概率密度(根据给定的平均值/ 标准偏差) -
pnorm
: 生成正态累积分布函数 -
rpois
: 根据给定的比率生成随机泊松分布随机数
每种概率分布函数通常有四种前缀
-
d
密度 -
r
生成随机数 -
p
累积分布 -
q
分位数函数
生成正态分布可以使用以下四个函数
dnorm(x, mean = 0, sd = 1, log = FALSE)
pnorm(q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)
qnorm(p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)
rnorm(n, mean = 0, sd = 1)
如果 是标准正态累积分布i, 那么pnorm(q)
= , qnorm(p)
= 。
> x <- rnorm(10)
> x
[1] 0.3357161 -0.4786192 0.3952794 -1.5230122 -0.6496318 -1.2714863 0.6367861
[8] -0.8809022 -0.4377379 -0.3063769
> x <- rnorm(10, 20, 2)
> x
[1] 16.15086 15.89892 23.22139 20.60856 25.15596 18.85948 19.50671 20.81849
[9] 17.82214 18.43590
> summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
15.90 17.98 19.18 19.65 20.77 25.16
使用 set.seed
函数设定随机数种子以保证结果的可重复性
> set.seed(1)
> rnorm(5)
[1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078
> rnorm(5)
[1] -0.8204684 0.4874291 0.7383247 0.5757814 -0.3053884
> set.seed(1)
> rnorm(5)
[1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078
在进行模拟时最好设置随机数种子
生成泊松分布数据
> rpois(10, 1)
[1] 0 0 1 1 2 1 1 4 1 2
> rpois(10, 2)
[1] 4 1 2 0 1 1 0 1 4 1
> rpois(10, 20)
[1] 19 19 24 23 22 24 23 20 11 22
## 累积分布‘
## x <= 2的概率分布
> ppois(2, 2)
[1] 0.6766764
## x <= 4的概率分布
> ppois(4, 2)
[1] 0.947347
## x <= 6的概率分布
> ppois(6, 2)
[1] 0.9954662
通过线性模型生成随机数
通过 模型生成随机数。 已知. Assume , , 。
> set.seed(20)
> x <- rnorm(100)
> e <- rnorm(100, 0, 2)
> y <- 0.5 + 2 * x + e
> summary(y)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-6.4084 -1.5402 0.6789 0.6893 2.9303 6.5052
> plot(x, y)
线性模型随机数分布
当 x
为0或1时
set.seed(10)
x <- rbinom(100, 1, 0.5)
e <- rnorm(100, 0, 2)
y <- 0.5 + 2 * x + e
plot(x, y)
当x为0,1时
通过广义线性模型生成随机数
模拟泊松模型:Y ~ Poisson(μ)
log μ =
已知 和 。
使用 rpois
函数生成随机数
set.seed(1)
x <- rnorm(100)
log.mu <- 0.5 + 0.3 * x
y <- rpois(100, exp(log.mu))
summary(y)
plot(x, y)
泊松分布随机数
生成随机样本
sample
函数可以从一个指定的组合中生成随机样本。
> set.seed(1)
> sample(1:10, 4)
[1] 3 4 5 7
> sample(1:10, 4)
[1] 3 9 8 5
> sample(letters, 5)
[1] "q" "b" "e" "x" "p"
## 随机排列组合
> sample(1:10)
[1] 4 7 10 6 9 2 8 3 1 5
> sample(1:10)
[1] 2 3 4 1 9 5 10 8 6 7
## 随机替换,生成可重复的样本
> sample(1:10, replace = TRUE) ## Sample w/replacement
[1] 2 9 7 8 2 8 5 9 7 8
小结
-
r*
系列函数根据特殊的概率分布生成随机数 - 内置的正态分布:标准,泊松,二项式,指数, 伽马等
-
sample
函数提取随机样本 - 通过set.seed函数生成随机数生成种子,保证结果的可重复性
课程分享
生信技能树全球公益巡讲
(https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g)
B站公益74小时生信工程师教学视频合辑
(https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw)
招学徒:
(https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw)
网友评论