確率の期待値との離散性

このプログラムはある一定の確率をその確率の分母の値だけ施行した際に的中する確率を比較するものである.

例えば、1/4で当たるくじを4回引いたときに外れる確率と、1/40で当たる確率を40回引いたときに外れる確率に違いはあるのかといったことを検証する.

最初に、算出すべき確率を表す関数 value を定義しよう.

ある確率を施行する回数を \(n\) 試行が当たる確率の値を \(1/n\) とする.

よって試行が外れる確率は \((1-1/n)\) となる. これより、以下のように定義できる

value <- function(n){
  r <- (1-1/n)^n
  return(r)
}

ここで、試行回数\(n\)を無限にすると、関数 value はどのような値をとるのを考えてみよう.

\(n=2\) のとき、

value(2)
## [1] 0.25

\(n=3\) のとき、

value(3)
## [1] 0.2962963

\(n=5\) のとき、

value(5)
## [1] 0.32768

また、この関数のグラフを出力すると、

x <- 1:100
y <- (1-1/x)^x
plot(x,y,type="l",main="図1   関数 value のグラフ",
     xlab="試行回数",ylab="確率の値",col="red")

このように、関数valueの値はnの値が大きくなるにつれて単調増加していき、ある値に収束しそうなことがわかる

相対誤差のプログラム

相対誤差の程度を表す関数 gap を次のように定義する

gap <- function(n){
  x <- 0
  p <-  value(n)-value(n-1) #誤差導出の式
        if       (p > 10^-1){x <- "Groop1"} #2項間の誤差が10%以上
        else if  (p > 10^-2){x <- "Groop2"} #2項間の誤差が1%以上10%以下
        else if  (p > 10^-3){x <- "Groop3"} #2項間の誤差が0.1%以上1%以下
        else if  (p > 10^-4){x <- "Groop4"} #2項間の誤差が0.01%以上0.1%以下
        else if  (p > 10^-5){x <- "Groop5"} #2項間の誤差が0.001%以上0.01%以下
        else if  (p > 10^-6){x <- "Groop6"} #2項間の誤差が0.0001%以上0.001%以下
        else                {x <- "out of boder"}
  return(x)
}

このように、関数 gap の2項間の差を7つのグループに分けてみる

“Groop4”から各項の相対誤差が0.1%以下になるので、これ以降の項の誤差はほぼ無視していいことがわかる それでは、各グループの個数を見てみよう

今回は group という関数を試作して調べていくことにする

group <- function(n){
  result <- rep(0,7)
  names(result) <- c("Group1","Group2","Group3","Group4","Group5","Group6","out of boder")
  for(i in 2:n){
    p <-  value(i)-value(i-1)
        if       (p > 10^-1){result[1] <- result[1]+1}
        else if  (p > 10^-2){result[2] <- result[2]+1}
        else if  (p > 10^-3){result[3] <- result[3]+1}
        else if  (p > 10^-4){result[4] <- result[4]+1}
        else if  (p > 10^-5){result[5] <- result[5]+1}
        else if  (p > 10^-6){result[6] <- result[6]+1}
        else                {result[7] <- result[7]+1}
  }
  return(result)
}

試しに、\(n=1000\)として出力すると、

group(1000)
##       Group1       Group2       Group3       Group4       Group5 
##            1            3            9           29           93 
##       Group6 out of boder 
##          293          571

この結果より、n=14以降はほとんど誤差がないということがわかる

結果の考察

今回作成したプログラムからわかったのは、最初に定義した関数valueの値は、

nが一桁の時だけ変動し、それ以降はほとんど変化しないということである

相対誤差のグラフを以下に表示するので参考にしてほしい

x <- 2:100
y <- value(x)-value(x-1)
plot(x,y,ylim = c(0,0.1),type="l",main="図2   相対誤差のグラフ",
     xlab="nの値",ylab="相対誤差の値",col="red")

つまり、最初に考えた疑問

1/4で当たるくじを4回引いたときに外れる確率と、1/40で当たる確率を40回引いたときに外れる確率に違いはあるか?

この答えは違いはあるといえるだろう