R语言与生信应用27-R语法-随机数

生成随机数

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)

如果 \Phi 是标准正态累积分布i, 那么pnorm(q) = \Phi(q)qnorm(p) = Φ^{−1}(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

通过线性模型生成随机数

通过 y = \beta_0 + \beta_1 x + \varepsilon 模型生成随机数。 已知\varepsilon\sim\mathcal{N}(0, 2^2). Assume x\sim\mathcal{N}(0,1^2), \beta_0 = 0.5\beta_1 = 2

> 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 μ = \beta_0 + \beta_1x

已知 \beta_0 = 0.5\beta_1 = 0.3

使用 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

推荐阅读更多精彩内容