我想创建两个函数来计算20面骰子的概率质量函数(pmf)和累积分布函数(cdf)。
在函数中,我将使用一个参数,y作为侧(从数字1到20)。我应该能够放置一个向量,它将返回每个变量的值。
如果输入的值是非离散的,则应在结果和警告消息中返回零。
这就是到目前为止PMF解决的问题:
PMF= function(side) {
a = NULL
for (i in side)
{
a= dbinom(1, size=1, prob=1/20)
print(a)
}
}这就是我为民防部队准备的:
CDF= function(side) {
a = NULL
for (i in side)
{
a= pnorm(side)
print(a)
}
}目前,我被警告信息和结果为零所困。我怎样才能在函数中插入命令行呢?
接下来,如何在特定的间隔(例如,1,12)上将这两个函数绘制在同一幅图上?
我是否使用了正确的函数来计算cdf和pmf?
发布于 2014-10-08 18:41:41
我建议简化如下:
PMF <- function(side) {
x <- rep(0.05, length(side))
bad_sides <- ! side %in% 1:20 # sides that aren't in 1:20 are bad
x[bad_sides] <- 0 # set bad sides to 0
# warnings use the warning() function. See ?warning for details
if (any(bad_sides)) warning("Sides not integers between 1 and 20 have 0 probability!")
# print results is probably not what you want, we'll return them instead.
return(x)
}对于CDF,我假设您是指滚动一个小于或等于给定边的数字的概率,即side / 20。(pnorm是错误的函数.它给出了正态分布的民防因子。
CDF <- function(side) {
return(pmin(1, pmax(0, floor(side) / 20)))
}从技术上讲,CDF是为非整数值定义的.1.2的CDF与1的CDF完全相同,所以我在这里使用floor。如果您想使它更健壮,您可以将它设置为min(1, floor(side) / 20),以确保它不超过1,并且类似地,一个带有0的max()可以确保它不是负值。或者你可以试着不给它超过20的负值或数值。
密谋:
my_interval <- 1:12
plot(range(my_interval), c(0, 1), type = "n")
points(my_interval, PMF(my_interval))
lines(my_interval, CDF(my_interval), type = "s")https://stackoverflow.com/questions/26263608
复制相似问题