美文网首页R语言知识干货
R语言与生信应用27-R语法-随机数

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

作者: BioSi | 来源:发表于2019-05-14 21:13 被阅读91次

    生成随机数

    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

    相关文章

      网友评论

        本文标题:R语言与生信应用27-R语法-随机数

        本文链接:https://www.haomeiwen.com/subject/yloonqtx.html