【问题标题】:Estimate a probability from elements of a list in R从 R 中列表的元素估计概率
【发布时间】:2025-12-05 01:05:02
【问题描述】:

我有一个 R 中 100,000 个模拟 T 数的列表(最小值:1.5,最大值 88.8),我想计算 T 在 10 到 50 之间的概率。

我对 100,000 个 T 求和,其中 T 是 t(y) %*% M %*% y,其中 M 是一个 8x8 的常数值矩阵,而 y 是一个 8x1 的矩阵。 i-th 行中的元素如果 y,则等于:a_i + b_i 其中 a 是常量向量,b 是其元素遵循 normal (0,sd=2) 分布的向量(每个元素是不同的模拟数量的 @ 987654327@)

【问题讨论】:

  • 他们是从什么概率分布中抽样的?
  • 我对 100,000 个 T 进行了求和,其中 T 是 t(y)%*%M%*%y,其中 M 是一个 8x8 的常数值矩阵,y 是一个 8x1 的矩阵。如果 y,则第 i 行中的元素等于:a_i + b_i 其中 a 是常量向量,b 是其元素遵循正态 (0,sd=2) 分布的向量(每个元素具有不同的模拟数N(0,2) )
  • 你有列表还是向量?提供一个小的可重复数据集总是有帮助的。
  • 这是一个关于如何在 R *.com/questions/5963269/… 中制作可重现数据的链接

标签: r probability


【解决方案1】:

它是在向量还是列表中?如果它是向量,则以下应该有效。如果它在列表中,您可以使用 unlist() 将其转换为向量。

mylist <- runif(100000,1.5,88.8) #this is just to generate a random number vector 
length(which(mylist>=10 & mylist<=50))/length(mylist)

【讨论】:

  • 我最喜欢@Sean 回答中的场景的简洁编码是mean(mylist&gt;=10 &amp; mylist&lt;=50)
【解决方案2】:
set.seed(42)
myrandoms <- rnorm(100000, mean=5, sd=2)
mydistr <- ecdf(myrandoms)

#probability of beeing between 1 and 3:
diff(mydistr(c(1, 3)))
#[1] 0.13781

#compare with normal distribution
diff(pnorm(c(1, 3), mean=5, sd=2))
#[1] 0.1359051

如果你真的有一个列表,使用myrandoms &lt;- do.call(c, mylist) 使其成为一个向量。

【讨论】:

  • 如果您打算计算大量经验概率,这将是一个不错的方法 - 如果您只打算计算一个,那么肖恩回答中的 aosmith 评论可能会更好。
  • 我们如何评论从模拟数字计算的概率与原始分布的概率之间的比较?
  • @user3143784 我不太明白你的评论。理论结果和模拟结果匹配得非常好,如果增加样本量,它们匹配得更好。
最近更新 更多