【问题标题】:The probability that a single continuous random variable lies in an interval [55,100]单个连续随机变量位于区间内的概率 [55,100]
【发布时间】:2021-08-12 05:29:47
【问题描述】:

我被要求找出一个学生通过考试的概率(如果分数是 55 ≤ X ≤ 100,他会这样做)并被赋予密度函数(见图:

我已经定义了我的限制并集成了密度函数,这可以在 R 中的以下代码块中看到

f1 <- function(x){
     -(x/100)+(4*0.5/5)+(1/5)
}
integrate(f1,(80*p-25),(80*p+20))

我在定义 f1 时插入了 0.5 而不是 p。如果学生没有做好充分准备,我会得到 27.76% 的答案 (p=0.5)

我怀疑这是否正确,我只使用了 f(x) 的第二个表达式而没有考虑第一个表达式,当我在在线积分计算器中输入解时,我得到的值要低得多。另外,我不确定限制的表达式 a 和 b 是否定义正确。我想我想知道如何从具有多个表达式的密度函数中导出概率以及如何处理这些限制。

【问题讨论】:

  • 您编码的密度函数部分仅适用于区间 (80*p+10, 80*p+20),当 p=0.5 时转换为 (50,60),所以这个肯定是不够的。查看ifelse() 函数...

标签: r statistics probability


【解决方案1】:

如下图所示:

p <- function(x, p = 0.5){
  i <- (80*p) < x & x <= (80*p + 10)
  j <- (80*p + 10) < x & x <= (80*p + 20)
  (x/100 - 4*p/5)^i * (-x/100 + 4*p/5 + 1/5)^j * 0^(1-i-j)
}

integrate(p, 55, 100)
0.1249993 with absolute error < 5.4e-05

您还可以将p 定义为:

p1 <- function(x, p = 0.5){
  i <- (80*p) < x & x <= (80*p + 10)
  j <- (80*p + 10) < x & x <= (80*p + 20)
  (x/100 - 4*p/5) * i + (-x/100 + 4*p/5 + 1/5) * j + 0 * (1-i-j)
}

integrate(p1, 55, 100)
0.1249993 with absolute error < 5.4e-05

【讨论】:

  • 这对我帮助很大,感谢您花时间用代码示例展示它
【解决方案2】:

密度函数有点粗糙,但您可以通过首先定义一个向量 x(其范围从 0 到 100)来轻松解决它,然后根据 x 和 p 有条件地计算得分。

只需将分数默认设置为0,并将某些条件适用的值替换为作业中给出的函数即可:

x = seq(0,100,.1)

p = 0.5

score = rep(0,length(x))
score[80*p<x & x <= (80*p+10)]=x[80*p<x & x <= (80*p+10)]/100-4*p/5
score[(80*p + 10)<x & x <= (80*p+20)]=-x[(80*p + 10)<x & x <= (80*p+20)]/100+4*p/5+1/5

您现在有了一个可以绘制的密度函数:

plot(x,score,type="l")

得分为 55 分或更高的概率是 55 分之后的曲线下面积除以曲线下面积的总数。幸运的是,曲线下的面积可以通过将这些值相加得到:

prob55 = sum(score[x>=55])/sum(score)
prob55

在这种情况下,结果是 12.5%

【讨论】:

  • 谢谢你,马丁。感谢您的帮助!
【解决方案3】:

虽然Onyambu的解决方案是正确的,但我认为最好写成如下:

f <- function(x,p = 0.5){
  dplyr::case_when(
    #         Condition        --------      Function
    (80*p) < x      & x <= (80*p + 10) ~ x/100 - 4*p/5,
    (80*p + 10) < x & x <= (80*p + 20) ~ -x/100 + 4*p/5 + 1/5,
    TRUE                               ~ 0
  )
}

原因是:

  • 更容易阅读
  • 不要求读者了解强制的工作原理。
  • 更具可扩展性:不会随着区域数量的增加而变得更糟。

【讨论】:

  • 请注意,case_when() 来自 dplyr 包;您可以使用ifelse() 在基础 R 中执行此操作(稍微不太可读)
  • 是的,我忘记了。已更正。但是,如果函数有 n 个步骤,我认为您需要重复 ifelse n 次,对吧?
  • 是的,没错。取决于您对尽可能干净的代码的偏好与避免包依赖关系。你也许可以用switch()做点什么,但那将是一个hack。
  • 对我来说,在这种情况下,主要标准是编码函数尽可能地类似于数学函数。在许多其他代码位置,我使用嵌套的ifelse
  • 同意。我绝对更喜欢你的解决方案,而不是涉及乘以/提高到 0/1 指标变量的幂的技巧。
猜你喜欢
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 2020-07-02
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多