2017-10-07 72 views
0

因此,我使用R中的'精确'包来分离连续的伽马cdf,返回一个概率质量函数。如何从离散概率质量函数创建一个dsicrete概率分布函数

试图把我变成一个累积分布函数生成的概率密度函数:

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开始,并且函数不会自动在数组上工作,它必须被矢量化。

所以,有两个变化你的代码是正确的:

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计算所有可能的总和,现在你可以只子集,它通过一个载体。