微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

两个均匀分布差异的 CDF 的 R 函数

如何解决两个均匀分布差异的 CDF 的 R 函数

我很难找到一个可以做我想做的 R 函数。假设我有两个均匀分布,A~U[alow,ahigh] 和 B~U(blow,bhigh)。

一个随机变量 Z=A-B,即这两个均匀分布之间的差异。我需要一个函数 CDF 函数用于 Z 的分布。

我会给这个函数一个截止值 x,它会返回 Z 低于截止值的概率。

我在 R 中,理想情况下函数调用看起来像这样:

UniformDiffCDC(alow,ahigh,blow,bhigh,cutoff)

不幸的是,我不知道从哪里开始,或者这是否已经在 R 中的某个地方实现了。帮助!

解决方法

基本思想是概率密度函数将form a trepezoid。我不知道有任何内置函数用于此,因为它不是一个非常常见的分布,但是使用一些几何图形您可以准确地求解这些值。

UniformDiffCDF <- Vectorize(function(alow,ahigh,blow,bhigh,cutoff) {
  breaks <- c(alow-bhigh,ahigh-bhigh,alow-blow,ahigh-blow)
  height <- 2/sum(breaks * c(-1,-1,1,1))
  if (cutoff > breaks[4]) return(1) 
  prob <- 0
  if (cutoff < breaks[1]) return(prob) 
  if (cutoff < breaks[2]) {
    prob <- prob + 1/2 * (cutoff - breaks[1]) * approx(breaks[1:2],c(0,height),cutoff)$y
    return(prob)
  } else {
    prob <- prob + 1/2 * (breaks[2]-breaks[1]) * height
  }
  if (cutoff < breaks[3]) {
    prob <- prob + (cutoff-breaks[2])*height
    return(prob)
  } else {
    prob <- prob + (breaks[3]-breaks[2])*height
  }
  tri <- 1/2 * (breaks[4]-breaks[3]) * height
  prob <- prob + tri - 1/2 * (breaks[4]- cutoff) * approx(breaks[4:3],cutoff)$y
  return(prob)  
},vectorize.args="cutoff")

例如

curve(UniformDiffCDF(5,7,2,6,x),from=-2,to=6)

different of uniforms CDF

对应的PDF是

UniformDiffPDF <- Vectorize(function(alow,1))
  if (cutoff > breaks[4]) return(0)
  if (cutoff < breaks[1]) return(0) 
  if (cutoff < breaks[2]) {
    return(approx(breaks[1:2],cutoff)$y)
  }
  if (cutoff < breaks[3]) {
    return(height)
  }
  return(approx(breaks[4:3],cutoff)$y)
},vectorize.args="cutoff")

difference of uniforms PDF

,

类似的东西?

   UniformDiffCDF <- function(alow,cutoff,n=10000){
        a = runif(n,min=alow,max=ahigh)
        b = runif(n,min=blow,max=bhigh)
        z = (a-b)
        p = sum(z < cutoff)/n
        return(p)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。