【R】R語言生成隨機數

1.概述

做爲一種語言進行統計分析,R有一個隨機數生成各類統計分佈功能的綜合性圖書館。R語言能夠針對不一樣的分佈,生成該分佈下的隨機數。其中,有許多經常使用的個分佈能夠直接調用。本文簡單介紹生成經常使用分佈隨機數的方法,並介紹如何生成給定機率密度分佈下的隨機數。app

2.經常使用分佈的隨機數

在R中各類機率函數都有統一的形式,即一套統一的 前綴+分佈函數名dom

   d 表示密度函數(density);函數

   p 表示分佈函數(生成相應分佈的累積機率密度函數);spa

   q 表示分位數函數,可以返回特定分佈的分位數(quantile);3d

   r 表示隨機函數,生成特定分佈的隨機數(random)。code

2.1各類分佈的隨機數生存函數

rnorm(n, mean=0, sd=1)   #正態分佈
rexp(n, rate=1)   #指數
rgamma(n, shape, rate=1, scale=1/rate)   #r 分佈
rpois(n, lambda)   #泊松
rt(n, df, ncp)   #t 分佈
rf(n, df1, df2, ncp)   #f 分佈
rchisq(n, df, ncp=0)   #卡方分佈
rbinom(n, size, prob)   #二項分佈
rweibull(n, shape, scale=1)   #weibull 分佈
rbata(n, shape1, shape2)   #bata 分佈
runif(n,min=0,max=1) #均勻分佈

  

2.2以二項分佈爲例,實現上述各種函數:

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)#生成二項分佈的隨機數

二項分佈隨機數orm

  二項分佈是指n次獨立重複伯努利試驗成功的次數的分佈,每次伯努利試驗的結果只有兩個,成功和失敗,記成功的機率爲p。生成二項分佈隨機數的函數是:rbinom() 。句法是:rbinom(n,size,prob)。n表示生成的隨機數數量,size表示進行伯努利試驗的次數,prob表示一次貝努力試驗成功的機率。blog

 # 例:產生100個n爲10,20,50,機率p爲0.25的二項分佈隨機數:
    
    par(mfrow=c(1,3)) 
    p=0.25 
    for( n in c(10,20,50)) {  
        x=rbinom(100,n,p) 
        hist(x,prob=T,main=paste("n =",n)) 
        xvals=0:n 
        points(xvals,dbinom(xvals,n,p),type="h",lwd=3) 
      } 
    par(mfrow=c(1,1))

 

3.離散隨機變量的生成

3.1逆變換法

假設咱們但願生成一個離散型隨機變量X,它有密度it

咱們首先能夠生成一個均勻分佈的隨機數,使得:io

 

#代碼實現以下:
p1<-0.15 p2<-0.2 p3<-0.3 p4<-0.35 disRand<-function(i){ u<-runif(1,0,1) if(u<p1) x<-4 else if(u<p2+p2) x<-2 else if(u<p3+p2+p1) x<-1 else x<-3 return(x) }

  

3.2二項隨機變量的生成

 

 

Example:假設要生成1000個服從b(100,0.6)的隨機數

p<-0.6
n<-100
c<-p/(1-p)
i<-0
pp<-(1-p)^n
f<-pp
binomialRandomeV<-function(o){
  u<-runif(1,0,1)
  f<-
  while(u>=f){
    pp<-c*(n-i)*pp/(i+1)
    f<-f+pp
    i<-i+1
  }
  return(i)
}
sapply(c(1:1000),binomialRandomeV)
相關文章
相關標籤/搜索