【问题标题】:Generate probabilities of a normal distribution under special condition在特殊条件下生成正态分布的概率
【发布时间】:2014-05-24 11:16:15
【问题描述】:

在我的工作中,我需要使用正态分布来生成概率,其中这些概率之和小于或等于1,这意味着:

生成P1,P2,..,Pt 其中P1+P2+..+Pt <= 1 我想用R 做到这一点,但我不知道该怎么做。

【问题讨论】:

  • 什么才是正常的?向量 (P1,...Pn) ?你想做什么?
  • 我想在我的工作中使用正态分布作为函数。我的功能是这样的:F :{1,...,t} -> {P1,P2,..,Pt}。我想在这个函数上放置正态分布。
  • 听起来这些可能是组成数据。单个元素是否必须 >=0?
  • “使用正态分布生成概率”没有多大意义:概率在 [0, 1] 中,但正常的 RV 支持 ]-inf, +inf[。您是否正在考虑支持 [0, 1] 的截断法线?
  • 实际上,目标是生成像 F:{1,2..,t} -> {P1,P2,..,Pt} 这样的转换函数。为此,正态分布置于函数 F 上。因为 Pi 是概率,对于每个 Pi,0

标签: r normal-distribution


【解决方案1】:

你确定你在问什么?

x <- rnorm(100)
Fn <- ecdf(x)
#plot(Fn)
Fn(max(x))
> Fn(max(x))
[1] 1

【讨论】:

  • 实际上,目标是生成像 F:{1,2..,t} -> {P1,P2,..,Pt} 这样的转换函数。为此,正态分布置于函数 F 上。因为 Pi 是概率,对于每个 Pi,0
  • @Peggy 好的。将此文本添加到您的问题中会很有趣。如果可能,请提供在线参考和示例。到现在为止展示你的方法(如果有的话)。
【解决方案2】:

如果我理解正确的话。如果你想从 4 个正态随机变量中生成 4 个概率,你可以这样做

x <- rnorm(4)
p <- exp(x)/sum(exp(x))
all(p<1) == TRUE
sum(p) == 1

如果你想要一个小于或等于 1 的总和,这里有一个可能有效的转换(不知道如何使它更漂亮)。

x <- rnorm(4)
p <- exp(x)/sum(exp(x))
b<-numeric(4)
b[1]<-p[1]
b[2]<-p[2]-p[1]*p[2]
b[3]<-p[3]-p[2]*p[3]+p[1]*p[2]*p[3]
b[4]<-p[4]-p[3]*p[4]+p[2]*p[3]*p[4]-p[1]*p[2]*p[3]*p[4]
all(b<1) == TRUE
sum(b) <= 1

虽然我担心这种方法可能会有偏差。现在 p 的总和为 1。如果有办法让每个 p 成为一个数字 0-1(所以总和可能是 0-4)会更好。

【讨论】:

  • 谢谢,这正是我需要的,略有不同;总和(p)
  • @Peggy 好吧,如果您需要n 概率,那么我可能会选择n+1 正常随机变量并进行相同的转换,然后只取第一个n 值。所以额外的变量决定了你离1有多远。
  • @Peggy 我已经用不需要额外随机变量的可能转换更新了我的答案
  • 谢谢,但我不明白你为什么要用这种方式生成向量b。
  • @Peggy 对不起,这有点荒谬。这个想法是切割一根1米长的棍子。如果第一个概率是 0.25,我会砍掉 25% 的棍子。如果下一个概率是 0.1,我将切断 10% 的剩余部分。如果下一个概率是 0.45,我会砍掉剩下的 45%。最后我会拿走剩下的20%。这意味着我将切掉四块,并留下一些(可能)。所以我切断的棍子的长度是新的概率。我扩展了上面的术语,但我可能应该用不同的方式写它们。