【问题标题】:Calculating pmf and cdf for 20 sided dice in R在 R 中计算 20 面骰子的 pmf 和 cdf
【发布时间】:2014-10-08 18:11:29
【问题描述】:

我想创建两个函数来计算 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?

【问题讨论】:

  • 注意dbinom(1, size = 1, prob = 1/20)总是1/20,所以不需要每次都计算。
  • 我知道,但如果我认为我应该使用整个公式,因为我想为每个 i 计算它。如果没有,是否有更短的方法来做到这一点? (我想证明我是用 r 中的 pmf 公式计算的)
  • 对于每个i,它是 1/20。因此1/20 是一种更短的方式。或0.05 根本不计算。正在寻找答案...

标签: r statistics


【解决方案1】:

我会提出以下简化:

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和1的CDF是一样的,所以我这里用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")

【讨论】:

  • 非常感谢!你真的很有帮助。但我有一个问题,因为我是初学者:你能解释一下bad_sides &lt;- ! side %in% 1:20 的作用吗? %in% 是什么意思?
  • ?"%in%",运行c(1, 2, 3.5, 10, 100) %in% 1:20。然后运行! c(1, 2, 3.5, 10, 100) %in% 1:20,如果需要,请阅读?"!"
  • 非常感谢!稍后我可能会有更多问题......但是,再次感谢!
  • 如果数字低于或超过 20,您能否为 cdf 添加一个间隔?这应该是 20 面骰子的范围。
  • @Trik23 不太清楚您所说的“添加间隔”是什么意思,但我修改了 CDF 函数以使其对整数行正确。
猜你喜欢
  • 1970-01-01
  • 2010-12-25
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
相关资源
最近更新 更多