如何从离散概率质量函数创建dsicrete概率分布函数

时间:2017-10-07 01:58:31

标签: r

所以我使用了''精算器''在R中打包以对连续的gamma cdf进行离散化,返回概率质量函数。

试图将我生成的概率质量函数转换为累积分布函数:

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不太好,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

你几乎是对的。要记住的主要事情是R数组索引从1开始,并且函数不会自动在数组上工作,它必须被矢量化。

因此,通过两次更改,您的代码是正确的:

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)调用i的每个元素的函数,然后你总结它。

如果您需要代码的矢量化版本,可以执行以下操作:

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计算所有可能的总和,现在您可以通过向量对其进行子集化。