2021年10月9日 星期六

[R]如何利用seed和sample指令,生成各類的隨機亂數?

在數值計算軟體的應用上,生成各類的隨機亂數是基本的功能。在R語言中,可利用seed和sample來生成各種類的隨機亂數,隨機亂數結果包含單個數值是否重複產生,亂數群是否可固定以驗證數值模型,以及是否可依照比例產出隨機亂數。

利用以下範例,可以依須根據自身需求來取得各類的隨機亂數。

a.產出1~5的亂數排列,其中每次執行結果都不一樣,換句話說,亂數排列不固定。

#sample data
random_data0<-sample(x,length(x),replace = FALSE)
#輸出結果
> random_data0
[1] 1 4 3 5 2
> random_data0
[1] 4 5 1 3 2
> random_data0
[1] 5 1 2 4 3
x=1:5

b.利用set.seed(1)定義編號1的隨機亂數群,不隨每次執行結果而改變,換句話說,亂數排列已固定。

#set seed
set.seed(1)
#sample data
random_data1<-sample(x,length(x),replace = FALSE)
#輸出結果
> random_data1
[1] 1 4 3 5 2
> random_data1
[1] 1 4 3 5 2
> random_data1
[1] 1 4 3 5 2

c.因此,若需要多組固定亂數群,可利用set.seed編號定義之。

#set seed
set.seed(2)
#sample data
random_data2<-sample(x,length(x),replace = FALSE)
#輸出結果
> random_data2
[1] 5 3 2 4 1
> random_data1
[1] 1 4 3 5 2

d.另外,若欲產生可重複數值的亂數群,僅須將replace的參數改為True,如下列亂數群有兩個4。

#set seed
set.seed(3)
#sample data
random_data3<-sample(x,length(x),replace = TRUE)
#輸出結果
> random_data3
[1] 5 2 4 4 2

e.若欲依照比例分佈產生亂數群,可在prob = c(0.6,0.3,0.1)中定義,下列範例中,欲產出1至3之間的100個亂數,其中出現1的比例約為60%;出現2的比例約為30%;出現3的比例約為10%。由進一步的驗證結果,可一併得知比例分佈。

#set seed
set.seed(4)
#sample data
y=1:3
random_data4<-sample(y,100,replace = TRUE, prob = c(0.6,0.3,0.1))
#輸出結果
> random_data4
  [1] 1 1 1 1 2 1 2 3 3 1 2 1 1 3 1 1 3 1 3 2 2 3 1 1 2 2 1 2 1 1 1 1 2 2 1 3 1 2
 [39] 1 1 3 1 1 1 3 1 3 2 2 1 1 2 2 2 2 1 1 1 2 2 1 1 2 3 1 2 1 1 2 3 1 2 1 1 2 2
 [77] 1 1 1 1 3 2 1 3 3 1 1 3 1 3 1 1 1 1 1 1 2 1 1 2
#驗證結果
> table(random_data4)
random_data4
 1  2  3 
55 28 17 

沒有留言:

張貼留言