模擬大樂透開獎

我們都知道每個球出現的機率是一樣的,讓我們用電腦模擬1萬次與1百萬次看會是什麼情形:

模擬1萬次

大樂透每次開6個普通號,加上1個特別號,共7顆球,我們模擬開獎1萬次

set.seed(654)
big_lottery <- 1:49
smp <- replicate(10000, sample(big_lottery, 7, replace = FALSE))

我們可以看前10筆的資料,每行為1筆資料

smp[, 1:10]
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,]   11   10   41   49   10   32   27   20   12    45
## [2,]   36   26   38   10    8   36   44   10   38    12
## [3,]   17   37   37   36   23    6   33   43   40    19
## [4,]    4   47   40    8   21   11   12   13   11    31
## [5,]   43   16   15   37   47    4   35   23   14    48
## [6,]   10   38   48   48   16   18   30   35    6    46
## [7,]   20    3   20    3   22   28   15    8   46    32

觀察資料結構,7列10000行的矩陣

dim(smp)
## [1]     7 10000
class(smp)
## [1] "matrix"

處理資料,紀錄1~49號球各出現幾次

num_list <- rep(0, 49)
names(num_list) <- 1:49
print(num_list)
##  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 
##  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
## 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 
##  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
for (i in 1:nrow(smp)) {
    for (j in 1:ncol(smp)) {
        num = smp[i, j]
        num_list[num] = num_list[num] + 1
    }
}
print(num_list)
##    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15 
## 1420 1435 1446 1460 1382 1440 1458 1408 1394 1451 1376 1361 1464 1395 1399 
##   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30 
## 1407 1446 1396 1384 1399 1484 1444 1453 1447 1418 1390 1443 1508 1414 1457 
##   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45 
## 1410 1433 1426 1411 1385 1468 1438 1451 1457 1414 1428 1388 1458 1518 1443 
##   46   47   48   49 
## 1430 1421 1443 1399

1萬次的結果

整體的情況

summary(num_list)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1360    1400    1430    1430    1450    1520

直方圖:

barplot(num_list, main = "Simulate Lotto 100,000 times", xlab = "Ball Number", 
    ylab = "Frequency", ylim = c(0, 2000), col = rainbow(49))

plot of chunk unnamed-chunk-5

模擬100萬次

smp2 <- replicate(1e+06, sample(big_lottery, 7, replace = FALSE))
num_list2 <- rep(0, 49)
names(num_list2) <- 1:49
print(num_list2)
##  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 
##  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
## 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 
##  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
for (i in 1:nrow(smp2)) {
    for (j in 1:ncol(smp2)) {
        num = smp2[i, j]
        num_list2[num] = num_list2[num] + 1
    }
}

1百萬次的結果

整體的情況

summary(num_list2)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  142000  143000  143000  143000  143000  144000

每個球出現的次數非常的均勻

barplot(num_list2, main = "Simulate Lotto 1,000,000 times", xlab = "Ball Number", 
    ylab = "Frequency", ylim = c(1e+05, 160000), col = rainbow(49), xpd = FALSE)

plot of chunk unnamed-chunk-8

樂透彩分析網