我想创建两个函数来计算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所得到的:
CDF= function(side) {
a = NULL
for (i in side)
{
a= pnorm(side)
print(a)
}
}
我目前停留在警告消息和结果中的零。我如何在命令行中为该功能提供帮助?
接下来,如何在特定区间(例如1,12)的同一图上绘制这两个函数?
我是否使用正确的函数来计算cdf和pmf?
答案 0 :(得分:0)
我建议采用以下简化方法:
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。)
CDF <- function(side) {
return(pmin(1, pmax(0, floor(side) / 20)))
}
从技术上讲,CDF是针对非整数值定义的。 1.2的CDF
与CDF的1相同,所以我在这里使用floor
。如果你想让它更强大,可以让它min(1, floor(side) / 20)
确保它不超过1,同样地max()
为0,以确保它不是负数。或者你可以尝试不给它超过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")