ポリヤ・エッゲンベルガー分布 Last modified: Apr 13, 2004
目的
ポリヤ・エッゲンベルガー分布の確率を計算する
使用法
(1) PolyaEggenberger(x, n, p, delta)
(2) PolyaEggenberger2(x, lambda, r)
引数
x 確率変数
n 標本サイズ
p 母比率
delta 追加する割合
lambda n×p
r n×delta
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/PolyaEggenberger.R", encoding="euc-jp")
# ポリヤ・エッゲンベルガー分布の確率を計算する
# n, p, δ を与える場合
PolyaEggenberger <- function( x, # 確率変数
n, # 標本サイズ
p, # 母比率
delta) # 追加する割合 δ
{
exp( # 対数で計算して最後に逆対数をとる
sum(lchoose(n, x),
sapply(0:x, function(i) ifelse(i == 0, 0, log(p+(i-1)*delta)-log(1+(i-1)*delta))),
sapply((x+1):n, function(i) log(1-p+(i-x-1)*delta)-log(1+(i-1)*delta)))
)
}
# λ, r を与える場合
PolyaEggenberger2 <- function( x, # 確率変数
lambda, # λ = n*p
r) # r = n*δ
{
exp( # 対数で計算して最後に逆対数をとる
sum(sapply(0:(x-1), function(i) ifelse(i < 0, 0, log(1+i*r/lambda))))
+x*log(lambda)
-lgamma(x+1)
+(-lambda/r-x)*log(1+r)
)
}
使用例
> n <- 800 # n, p, δ を与える場合
> p <- 0.00373625
> delta <- 0.000322
> PolyaEggenberger(0, n, p, delta)
[1] 0.06964384
> PolyaEggenberger(1, n, p, delta)
[1] 0.1660618
> PolyaEggenberger(2, n, p, delta)
[1] 0.2148316
> PolyaEggenberger(3, n, p, delta)
[1] 0.1997851
> sum(sapply(0:15, PolyaEggenberger, n, p, delta))
[1] 0.9999915
> lambda <- 2.989 # λ, r を与える場合
> r <- 0.2576
> PolyaEggenberger2(0, lambda, r)
[1] 0.06998131
> PolyaEggenberger2(1, lambda, r)
[1] 0.1663280
> PolyaEggenberger2(2, lambda, r)
[1] 0.2146949
> sum(sapply(0:15, PolyaEggenberger2, lambda, r))
[1] 0.9999908
解説ページ
直前のページへ戻る
E-mail to Shigenobu AOKI