Mô phỏng tung xúc xắc

Author

Duc Nguyen

Published

October 8, 2026

Đề bài: ta có xúc xắc (6 mặt), khi tung 100 lần, thì xác suất có đúng 20 lần ra mặt 3 là bao nhiêu?

1 Cách giải theo kiểu xác suất cổ điển

Đây là một bài toán phân phối nhị thức (binomial).

Gọi \(X\) là số lần ra mặt 3 trong 100 lần tung (ví dụ tung 100 lần thì có 14 lần ra mặt số 3, nên X = 14).

Vì xúc xắc công bằng nên xác suất ra mặt số 3 là:

\[P(\text{ra mặt 3}) = 1/6\]

Do vậy xác suất KHÔNG ra mặt số 3 là:

\[P(\text{không ra mặt 3}) = 5/6\]

Do đó, \(X\) sẽ tuân theo phân phối nhị thức:

\[X \sim B(n = 100, p = \frac{1}{6})\]

Ta cần tính xác suất có đúng 20 lần ra mặt 3:

\[P(X = 20 \text{ | ra mặt 3}) = ?\]

Áp dụng công thức:

\[P(X = k \text{ | ra mặt 3}) = \binom{n}{k} p^k (1-p)^{n-k}\]

\[P(X = 20 \text{ | ra mặt 3}) = \binom{100}{20} \left(\frac{1}{6}\right)^{20} \left(\frac{5}{6}\right)^{80} = 0.0678 = 6.78\%\]

choose(n = 100, k = 20) * (1/6)^20 * (5/6)^80
[1] 0.067862

2 Cách giải theo kiểu thống kê tần số (Frequentist)

2.1 Mô phỏng 100 lần tung đầu tiên

kq <- sample(x = c(1,2,3,4,5,6),
             size = 100,
             replace = TRUE)

kq
  [1] 5 1 3 5 5 3 6 2 1 5 2 4 1 6 6 2 6 1 5 2 3 1 1 6 2 1 6 2 3 3 6 4 4 4 6 3 4 2 1 1 1 2 4 2 6 6 2 4 3 2 5 5 4 6 3 6 4
 [58] 1 3 1 2 1 2 5 5 1 3 6 2 5 2 5 4 1 3 2 5 2 4 3 1 5 6 5 1 5 3 2 4 2 3 5 6 6 6 4 4 2 1 1
table(kq)
kq
 1  2  3  4  5  6 
19 20 14 14 16 17 

2.2 Giả lập thực hiện 10 lần, mỗi lần 100 lần tung xúc xắc

run_exp <- 10

kq_list <- list()

for(i in 1:run_exp){
  
kq <- sample(x = c(1,2,3,4,5,6),
             size = 100,
             replace = TRUE)

kq_list[[i]] <- table(kq)
}

kq_list_master <- do.call(rbind, kq_list)

kq_list_master <- as.data.frame(kq_list_master)

kq_list_master$thunghiem <- 1 : run_exp

kq_list_master
    1  2  3  4  5  6 thunghiem
1  14 18 18 16 16 18         1
2  17 14 14 17 19 19         2
3  13 13 20 21 18 15         3
4  16 24 16 17 18  9         4
5  13 13 17 15 21 21         5
6  17 21 18 19 12 13         6
7  18 22 18 14 15 13         7
8  14 15 13 19 17 22         8
9  19 13 19 15 19 15         9
10 17 14 21 24 13 11        10

2.3 Giả lập thực hiện 100000 lần, mỗi lần 100 lần tung xúc xắc

# run_exp <- 100000
# 
# kq_list <- list()
# 
# for(i in 1:run_exp){
#   
# kq <- sample(x = c(1,2,3,4,5,6),
#              size = 100,
#              replace = TRUE)
# 
# kq_list[[i]] <- table(kq)
# }
# 
# kq_list_master <- do.call(rbind, kq_list)
# 
# kq_list_master <- as.data.frame(kq_list_master)
# 
# kq_list_master$thunghiem <- 1 : run_exp

# kq_list_master

# saveRDS(kq_list_master, "kq_list_master.rds")

kq_list_master <- readRDS("kq_list_master.rds")

Tính trung bình số lần xuất hiện mặt số 3, kết quả này chính là tỷ lệ 1/6

\[P(\text{ra mặt 3}) = 1/6\]

summary(kq_list_master$`3`)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   3.00   14.00   17.00   16.67   19.00   34.00 
1/6
[1] 0.1666667

Vẽ đồ thị histogram cho số lần xuất hiện mặt số 3 trong 100000 lần thử nghiệm (với mỗi lần tung 100 xúc xắc)

hist(kq_list_master$`3`,
     main = "Số lần ra xúc xắc có mặt số 3",
     xlab = "")

abline(v = 20,
       col = "red",
       lwd = 2)

Thống kê tất cả các lần xuất hiện mặt số 3

table(kq_list_master$`3`)

    3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19    20    21    22 
    2     8    31   102   227   580  1132  2182  3470  5162  7011  8741 10166 10758 10457  9575  8410  6858  5049  3768 
   23    24    25    26    27    28    29    30    31    32    33    34 
 2553  1578   950   605   324   156    78    36    20     5     3     3 

Ta thấy có 6858 lần thử nghiệm (tung 100 xúc xắc) mà mặt số 3 xuất hiện 20 lần.

6858 / sum(table(kq_list_master$`3`))
[1] 0.06858

Kết quả này chính là đáp án tính theo xác suất cổ điển

\[P(X = k \text{ | ra mặt 3}) = \binom{n}{k} p^k (1-p)^{n-k}\]

dbinom(20, size = 100, prob = 1/6)
[1] 0.067862
choose(n = 100,
       k = 20) * (1/6)^20 * (5/6)^80
[1] 0.067862