2017-10-07 9 views
0

したがって、Rで 'アクチュアラー'パッケージを使用して連続質量ガンマ関数を離散化し、確率質量関数を返しました。 離散化された確率質量関数からの二分法確率分布関数の作成方法

は、私が累積分布関数に生成された確率質量関数ターンしようとすると:

disc.gamma.cdf <- function(y) 
{ 
values <- discretize(pgamma(x, 20, 0.2), 
from = 0, to = 300, method = "rounding") 
result <- sum(values[0:y]) 
return(result) 
} 

をしかし、私は値の一定範囲にわたりdiscrete.gamma.cdfを合計したいとき、私は戻っていますエラー:

i <- 0:4 
    sum(disc.gamma.cdf(i)) 
    Warning message: 
In 0:y : numerical expression has 5 elements: only the first used 

Rにはそれほど優れていないので、助けてください。

答えて

0

あなたはほぼ正しいです。覚えておくべき重要なことは、R配列のインデックスが1から始まり、関数が配列に対して自動的に機能しないことです。ベクトル化する必要があります。

だから、2回交換して、あなたのコードは右です:

disc.gamma.cdf <- function(y) 
{ 
    values <- discretize(pgamma(x, 20, 0.2), 
         from = 0, to = 300, method = "rounding") 
    result <- sum(values[1:y]) # From 1 not 0 
    return(result) 
} 
i <- 1:5 
sum( sapply(i, disc.gamma.cdf)) 

sapply(i, disc.gamma.cdf)は私のelemntsのそれぞれに沿って関数を呼び出し、その後、あなたはそれを合計します。

あなたのコードのベクトル化バージョンが必要な場合は、この操作を行うことができます。

disc.gamma.cdf <- function(y) 
{ 
    values <- discretize(pgamma(x, 20, 0.2), 
         from = 0, to = 300, method = "rounding") 
    cumsum(values)[y] # last expression is returned anyway 
} 
i <- 1:5 
sum( disc.gamma.cdf(i)) 

機能cumsumは、すべての可能な合計を計算し、そして今、あなただけのベクトルであることをサブセットすることができます。

関連する問題