[英]How to create a dsicrete probability distribution function from a discretised probability mass function
因此,我在R中使用了“執行器”軟件包來離散化連續的γ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來說並不是那么好,所以我們將不勝感激。
您幾乎正確。 要記住的主要事情是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的每個sapply(i, disc.gamma.cdf)
調用函數,然后將其求和。
如果您想要代碼的矢量化版本,可以執行以下操作:
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
函數可計算所有可能的總和,現在您可以按向量將其求和。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.