【问题标题】:Probability of occurrence of random variable chosen from Normal Distribution从正态分布中选择的随机变量的出现概率
【发布时间】:2014-02-27 16:34:41
【问题描述】:

我只是想知道,使用下面的代码,我将如何确定与所选随机变量之一相关的发生概率。例如,如果为 new_E11 选择了一个特定变量,我如何从正态分布中知道它的出现概率?

function [new_E11, new_E22] = elasticmodulusrng()

new_E11 = normrnd(136e9,9.067e9,[1 1]);

new_E22 = normrnd(8.9e9,2.373e9,[1 1]);

while new_E11<=136e9-3*9.067e9 && new_E11>=136e9+3*9.067e9
        new_E11 = normrnd(136e9,9.067e9,[1 1]);
end

while new_E11<=8.9e9-3*2.373e9 && new_E11>=8.9e9+3*2.373e9
        new_E22 = normrnd(8.9e9,2.373e9,[1 1]);
end

谢谢

【问题讨论】:

  • 它的出现概率总是0,因为它是一个连续的随机变量。也许你的意思是它的概率密度?
  • 我怀疑您的代码中有错字。第二个while 应该测试new_E22 而不是new_E11。
  • @LuisMendo 是的,这是我所追求的概率密度,抱歉造成混淆。

标签: matlab probability normal-distribution


【解决方案1】:

任何特定值的概率为零(嗯,实际上大约是 2^64 中的 1 部分...这是有多少不同的浮点数,因为它们由 64 位二进制表示; 而且它们的可能性不相等,因此答案比这更复杂)。

一个更好的问题是“概率是多少密度”——可以描述为的极限

P(x - dx < X < x + dx)
----------------------
        2 * dx

这实际上是您的“概率密度函数”或 PDF 的定义。在您的情况下,您使用的是具有平均 mu 和标准偏差 sigma 的正态分布,然后

pdf(X) = exp(-(X-mu)*(X-mu) / (2 * sigma * sigma)) / (sqrt(2.0*pi) * sigma)

如果您真的想要原始问题的答案,您可以查看您感兴趣的值的 X 值的最小增量(尾数中的一个最低有效位)。那将是您的 delta X,然后您可以计算实际答案(警告 - 它不仅很小,而且可能很难在不遇到重大舍入错误的情况下计算它。会很难。)

进一步思考:

您测试该值的限制是否在 +- 3 sigma 范围内,并继续进行直到达到。这意味着您人为地略微增加了概率 - 因为您的值始终来自范围的特定部分(总概率小于 1),您需要将 PDF 乘以 (1/p),其中 p 是从-3 到3 或0.9973 的标准正态分布的积分。因此,在您的情况下,上述公式会低估0.27% 的概率。

suggestion 为您的代码提供一些样式建议。考虑以下内容(为您的代码提供等效结果):

function [new_E11, new_E22] = elasticmodulusrng()
  % returns randomly distributed modulus 
  % keeping the value within +- 3 standard deviations
  % identify the constants up front
  mean11 = 136e9;
  stdv11 = 9.067e9;
  mean22 = 8.9e9;
  stdv11 = 2.373e9;

  % compute the values
  new_E11 = normRandLimit(mean11, stdv11, [-3 3]);
  new_E22 = normRandLimit(mean22, stdv22, [-3 3]);

function rr = normRandLimit(m, s, b)
% helper function in the same file
% returns a normally distributed random variate
% with mean m, standard deviation s
% within limits [mean + b(1)*s,  mean + b(2)*s]

  while true 
    rr = randn(1); % doesn't need statistics toolbox - scale later
    if( rr > b(1) && rr < b(2) )
      break;  % found acceptable value
    end
  end
  % now apply scaling:
  rr = rr * s + m;

注意事项:

  1. “幻数”有一个好听的名字,而且都在代码的最前面
  2. “限制范围内的随机数”的计算被归为一个单独的函数
  3. 使用randn 而不是normrnd(因此无需绑定统计工具箱许可证)
  4. 计算“好数字”后的计算缩放
  5. 已消除重复代码
  6. 从结构(和 cmets)可以看出发生了什么

所有这些加起来就是“更好”的代码——从某种意义上说,它更容易调试和维护。而且当你在六个月后看到自己的代码时,你仍然可以阅读它......

【讨论】:

  • @LuisMendo - 谢谢。我当然应该正常化。固定。
  • @Floris 非常感谢!您的代码也非常有用。我只是想知道,如果我通过选择固定间隔人为地增加概率,那么考虑到 1/p 大于 1,我肯定应该将 PDF 乘以小于 1 的数字吗?对不起,我只是对这个有点困惑。
  • @Jojo - 这样想:如果你掷硬币,你有 50% 的机会得到正面。如果您决定“我将拒绝反面”(相当于“我拒绝大于 3 sigma 的值”,但更极端),那么您的过程产生正面的概率会上升到 100%。您必须将 0.5 乘以 (1/0.5) 才能得到该答案。有意义吗?
  • @Floris 谢谢!我明白你的意思了。
  • @jojo - 您的原始问题的答案现在清楚了吗,还是您需要进一步澄清?如果您的问题现在已得到解答,您可能希望将其标记为这样 - 这样其他人就不会花时间试图提出其他答案。为此目的,答案旁边有一个小复选标记...
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 2011-10-20
  • 2020-09-14
  • 1970-01-01
相关资源
最近更新 更多