rcoin
等しい確率で 0 または 1 を返す関数を使用して、0 から 99 の範囲の乱数を生成しようとしています。関数の連続呼び出しから生成された 2 進数を変換rcoin
し、数値が 100 未満であることを条件にそれを返す次のコードを作成しました。これが R コードです。
rcoin <- function() {
rbinom(n = 1, size = 1, prob = 0.5)
}
r100 <- function(n=100) {
v = n + 1
while(v > n) {
v = sum(sapply(0:6, function(i) rcoin() * 2 ^ i))
}
v
}
val_plot <- function() {
N = 10000
rand_sample <- rep(0, N)
for (i in 1:N){
rand_sample[i] = r100()
}
hist(rand_sample, breaks = 100)
}
val_plot()
切り捨てられた一様分布も一様であるため、0 から 99 までの一様乱数を生成することになっています。しかし、生成された 10000 個の値のヒストグラムをプロットすると、値 0 が異常に多く生成されていることがわかりますが、他のすべての値は一様分布に従っています。なんで?これは、2 進数の「1111111」が拒否されているのに対し、「0000000」は拒否されているためだと思います。しかし、どうすればこの問題を解決できますか? それを改善する方法はありますか?