必要なパッケージを読み込む。
library(tidyverse)
次に、日本語が正しく表示されるようにする。
## 図のなかで日本語を使えるようにする
if (.Platform$OS.type == "windows") {
# Window
if (require(fontregisterer)) {
my_font <- "Yu Gothic"
} else {
my_font <- "Japan1"
}
} else if (capabilities("aqua")) {
# macOS
my_font <- "HiraginoSans-W3"
} else {
# Unix/Linux
my_font <- "IPAexGothic"
}
theme_set(theme_gray(base_size = 9,
base_family = my_font))
「公正な(表が出る確率と裏が出る確率が等しい)」コインを使って、大数の法則のシミュレーションを行う。
コイン投げは、
coin <- c("表", "裏")
sample(coin, size = 1)
## [1] "表"
で行う。
これを一回だけ実行した場合、表の比率は、(1)表が出れば1、(2)裏が出れば0である。コイン投げの回数が少ないと、表が出る比率は真の比率である0.5に近くなるとは限らない。
しかし、大数の法則によると、コインを投げる回数を十分大きくすると、表の比率は0.5 に近づくはずである。Rを使って確かめてみよう。
まず、コインを投げる回数 n_flips
を決める。500に設定してみよう。
n_flips <- 500
次に、結果を記録する容器(ベクトル)を用意する。
ratio_1 <- rep(NA, n_flips)
準備ができたので、n_flips
回コイン投げを行い、それぞれのコイン投げが終わった時点での表の比率を計算する。
coins_1 <- sample(coin, size = n_flips, replace = TRUE)
for (i in 1:n_flips) {
n_head <- sum(coins_1[1:i] == "表") # i回目までに何回表が出たか数える
ratio_1[i] <- n_head / i # i回目までの表の比率を計算して記録する
}
これで、ratio_1
に結果が記録された。確認のため、最初の5回分を表示してみよう。
ratio_1[1:5]
## [1] 0.00 0.00 0.00 0.25 0.40
結果を図示しよう。
df2 <- tibble(N = 1:n_flips,
ratio_1 = ratio_1)
p1 <- ggplot(df2, aes(x = N, y = ratio_1)) +
geom_hline(yintercept = 0.5, linetype = "dashed") +
geom_line(color = "dodgerblue") +
labs(x = "試行回数", y = "表の割合")
plot(p1)
比率が少しずつ0.5に近づいていくことがわかる。
もう1度やってみよう。
ratio_2 <- rep(NA, n_flips)
coins_2 <- sample(coin, size = n_flips, replace = TRUE)
for (i in 1:n_flips) {
n_head <- sum(coins_2[1:i] == "表") # i回目までに何回表が出たか数える
ratio_2[i] <- n_head / i # i回目までの表の比率を計算して記録する
}
df2$ratio_2 <- ratio_2
p2 <- ggplot(df2, aes(x = N, y = ratio_2)) +
geom_hline(yintercept = 0.5, linetype = "dashed") +
geom_line(color = "dodgerblue") +
labs(x = "試行回数", y = "表の割合")
plot(p2)
もう1度やってみよう。
ratio_3 <- rep(NA, n_flips)
coins_3 <- sample(coin, size = n_flips, replace = TRUE)
for (i in 1:n_flips) {
n_head <- sum(coins_3[1:i] == "表") # i回目までに何回表が出たか数える
ratio_3[i] <- n_head / i # i回目までの表の比率を計算して記録する
}
df2$ratio_3 <- ratio_3
p3 <- ggplot(df2, aes(x = N, y = ratio_3)) +
geom_hline(yintercept = 0.5, linetype = "dashed") +
geom_line(color = "dodgerblue") +
labs(x = "試行回数", y = "表の割合")
plot(p3)
シミュレーションを実行する度に、異なる軌跡を描きながら、比率が0.5に近づいていく様子が見てとれる。
n_flips
を減らしたり増やしたりして、シミュレーションを行ってみよう。