No.06257 全体の50%カバーするには?  【初心者】 2008/04/02(Wed) 17:32

現在どれくらいの作業量を想定すれば良いかを検討しておりまして,基本的なことかもしれませんが,よろしくお願いします。

例えば1万個の中からランダムに10個選ばれる作業が有る場合,全体の50%(5,000個)をカバーすることが期待されるためには,作業を何回繰り返せばいいのでしょうか?

割合を色々変更して考えたいので,できましたら計算式も教えていただけないでしょうか?

No.06258 Re: 全体の50%カバーするには?  【ひの】 2008/04/03(Thu) 01:03


>例えば1万個の中からランダムに10個選ばれる作業が有る場合,全体の50%(5,000個)をカバーすることが期待されるためには,作業を何回繰り返せばいいのでしょうか?

 1万個のうちの任意の1個の選ばれる確率が0.5に達するのが,何回目の作業であるかを求めればよいことになります。一回の選択で選ばれる確率p = 10/10000 = 0.001。

 1回目で選ばれる確率 p
 2回目で選ばれる確率 p(1 - p)
 3回目で選ばれる確率 p(1 - p)^2
 4回目で選ばれる確率 p(1 - p)^3
・・・・・・・・・・・・・・
n回目で選ばれる確率 p(1 - p)^(n - 1)

 n回目までに選ばれる確率はこれらの総和になりますから,
n
Σp(1 - p)^(k - 1)
k=1

 となります。等比級数の公式(私はもう忘れました)を使えばnとpの式に整理できます。その式が0.5に等しいという方程式を立ててこれをnについて解くとあなたの求める式が得られます。

No.06259 Re: 全体の50%カバーするには?  【青木繁伸】 2008/04/03(Thu) 11:19

私も公式は忘れていました
結局 n > log(0.5) / log(1-p) のようで,
p = 10/10000 のときは,n >= log(0.5) / log(1-1/1000) = 692.8005
この解は期待値(平均値)なので,実際にどの程度ばらつくかはシミュレーションが必要かな(理論的にも求まるかも知れないけど)
> sim <- function(n, population.size=10000, p=10/10000, cover.rate=0.5)
+ {
+ result <- numeric(n)
+ sample.size <- floor(population.size*p)
+ cover.size <- floor(population.size*cover.rate)
+ for (i in 1:n) {
+ count <- 0
+ x <- NULL
+ repeat {
+ x <- c(x, sample(population.size, sample.size))
+ x <- unique(x)
+ if (length(x) >= cover.size) break
+ count <- count+1
+ }
+ result[i] <- count
+ }
+ return(result)
+ }
> trial <- sim(500)
> hist(trial, main="")
> mean(trial)
[1] 691.862 # 平均値。。。理論値と近いことを確認
> sd(trial)
[1] 5.437839 # 標準偏差


No.06268 Re: 全体の50%カバーするには?  【初心者】 2008/04/04(Fri) 13:25

お二人ともありがとうございました。
とりあえず,いただいた回答を参考にいろいろ計算してみようと思います。
またわからないことがあれば質問させていただくかもしれませんが,よろしくお願い致します。

● 「統計学関連なんでもあり」の過去ログ--- 041 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る