首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算R中20面骰子的pmf和cdf

计算R中20面骰子的pmf和cdf
EN

Stack Overflow用户
提问于 2014-10-08 18:11:29
回答 1查看 1.8K关注 0票数 0

我想创建两个函数来计算20面骰子的概率质量函数(pmf)和累积分布函数(cdf)。

在函数中,我将使用一个参数,y作为侧(从数字1到20)。我应该能够放置一个向量,它将返回每个变量的值。

如果输入的值是非离散的,则应在结果和警告消息中返回零。

这就是到目前为止PMF解决的问题:

代码语言:javascript
复制
PMF= function(side) {

  a = NULL   

  for (i in side)
  {
    a= dbinom(1, size=1, prob=1/20)
    print(a)
  }

}

这就是我为民防部队准备的:

代码语言:javascript
复制
CDF= function(side) {
  a = NULL   
  for (i in side)
  {
    a= pnorm(side)
    print(a)
  }

}

目前,我被警告信息和结果为零所困。我怎样才能在函数中插入命令行呢?

接下来,如何在特定的间隔(例如,1,12)上将这两个函数绘制在同一幅图上?

我是否使用了正确的函数来计算cdf和pmf?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-08 18:41:41

我建议简化如下:

代码语言:javascript
复制
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是错误的函数.它给出了正态分布的民防因子。

代码语言:javascript
复制
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的负值或数值。

密谋:

代码语言:javascript
复制
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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26263608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档