【问题标题】:Create a new probability distribution R创建一个新的概率分布 R
【发布时间】:2015-03-31 23:54:11
【问题描述】:

我想在 R 中创建一个新的概率密度函数,如下所示:

P{X=x} = p

P{X=/=x} 遵循泊松分布,带有一些参数 lambda 但归一化 s.t。所有概率之和等于 (1-p)

如何让 R 将其识别为新的概率分布并让它创建所有相应的函数(r、d、p、q)?

【问题讨论】:

  • 不确定我理解你的意思,因为每个[rdpq]* 函数都是独立编写和执行的。通常,新分布是连续均匀分布的反转,作者必须编写自己的 [dpq]* 函数来配合 r* 函数。
  • @r2evans 好的,我想我明白了。我只是想制作一个新的概率分布,并认为 R 可以自己处理 [rdpq]。那么如何在 R 中获得一个新的分布呢?
  • 副制作一个新的,你可以修改rpois来做你的规范化吗?否则,也许研究“创建随机数统一逆”会提供一些帮助。如果“在 R 中获得一个新的发行版”你的意思是“向 R 添加函数,以便我可以在其他地方使用它”,然后考虑编写函数并可能创建包(也许阅读 packagesadvanced R 的一些 hadleyverse )。
  • @r2evans 好的,谢谢。

标签: r probability probability-density


【解决方案1】:

您实际上是在创建狄拉克分布和离散泊松分布的混合类。 distr 包确实允许对分布进行符号操作,它允许定义Dirac、各种Discrete 类函数,包括Pois,以及与UnivarMixingDistribution 类的混合。

require(distr)
 x=5;lambda=4; p=0.3
 mylist <- UnivarMixingDistribution(Pois(4), Dirac(x) ,
           mixCoeff=c(p, 1-p))
 plot(mylist)
#NULL

您应该查看完整的包文档,因为它为以这种方式定义的发行版提供了 [rdpq]* 方法。

下面是如何使用 p()r() 方法来定义该函数/类:

> p(mylist)(4)
[1] 0.1886511
> p(mylist)(5)
[1] 0.9355392
> p(mylist)(0:10)
 [1] 0.005494692 0.027473460 0.071430997 0.130041046 0.188651095
 [6] 0.935539186 0.966797878 0.984659989 0.993591044 0.997560401
[11] 0.999148145
> r(mylist, 10)
Error in r(mylist, 10) : unused argument (10)
> r(mylist)( 10)
 [1] 5 2 5 5 5 5 5 3 5 5

您还可以在 ?family 找到有用的信息,其中为 R 模型的链接和错误结构定义了函数列表。

【讨论】:

  • 谢谢!我很感激。
猜你喜欢
  • 2020-01-30
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多