2021年12月26日 星期日

[R]如何利用rnorm生成亂數矩陣和時間序列亂數?

在數值計算軟體的應用上,生成各類符合要求的隨機亂數分布以進一步驗證模型,幾乎是基本需求。R語言中,可利用rnorm指令來生成符合某個平均值和某個標準差要求的常態亂數分布。另外,亦可善用rnorm來生成時間序列亂數。

a.生成平均數=5,標準差=1的25個常態亂數分布數據,數字取至小數點第二位,並形成5X5的矩陣。若要使亂數不隨每次執行結果而改變,可結合set.seed(1)定義編號1的隨機亂數群,可參考[R]如何利用seed和sample指令,生成各類的隨機亂數?

#set seed

set.seed(1)

#matrix data

a<-matrix(round(rnorm(25, mean=5, sd=1),2),5,5)

#輸出結果

> a

     [,1] [,2] [,3] [,4] [,5]

[1,] 4.94 6.36 4.59 4.84 4.29

[2,] 4.84 4.90 4.61 4.75 5.36

[3,] 3.53 5.39 4.94 5.70 5.77

[4,] 4.52 4.95 6.10 5.56 4.89

[5,] 5.42 3.62 5.76 4.31 5.88


另外,可進一步將上述矩陣轉化成數列,並繪製成圖以檢視其分布。

#matrix to series

b<-c(a)

#輸出結果

> b

 [1] 4.94 4.84 3.53 4.52 5.42 6.36 4.90 5.39 4.95 3.62 4.59 4.61 4.94 6.10 5.76 4.84

[17] 4.75 5.70 5.56 4.31 4.29 5.36 5.77 4.89 5.88



b.若要生成時間序列,需先安裝R語言的安裝包(xts),並搭配rnorm指令。下列範例是生成平均數=5,標準差=1的30個常態亂數分布數據,其中時間日期由2020/1/1開始,並以"日"為單位

library(xts)

#set.seed

set.seed(2)

#Data

x1<-xts(rnorm(30,mean=5, sd=1)+exp(c(1:30)/50),seq(as.POSIXct("2020-01-01"),len =30, by="day"))

#plot

plot(x1)

#輸出結果

> x1

               [,1]

2020-01-01 5.123287

2020-01-02 6.225660

2020-01-03 7.649682

2020-01-04 4.952911

2020-01-05 6.024919

2020-01-06 6.259917

2020-01-07 6.858229

2020-01-08 5.933813

2020-01-09 8.181691

2020-01-10 6.082616

2020-01-11 6.663727

2020-01-12 7.253002

2020-01-13 5.904235

2020-01-14 5.283461

2020-01-15 8.132088

2020-01-16 4.066059

2020-01-17 7.283552

2020-01-18 6.469136

2020-01-19 7.475113

2020-01-20 6.924090

2020-01-21 8.612781

2020-01-22 5.352781

2020-01-23 8.173712

2020-01-24 8.570726

2020-01-25 6.653659

2020-01-26 4.230321

2020-01-27 7.193244

2020-01-28 6.154114

2020-01-29 7.578242

2020-01-30 7.111756


沒有留言:

張貼留言