【问题标题】:Can normal distribution prob density be greater than 1?... based on python code checkup正态分布概率密度可以大于1吗?...基于python代码检查
【发布时间】:2015-08-18 13:41:01
【问题描述】:

我有一个问题: 给定均值和方差,我想使用正态分布作为概率基础来计算样本的概率。 数字是:

mean = -0.546369
var = 0.006443
curr_sample = -0.466102

prob = 1/(np.sqrt(2*np.pi*var))*np.exp( -( ((curr_sample - mean)**2)/(2*var) ) )

我得到一个大于 1 的概率!我得到概率 = 3.014558...

这是什么原因造成的?方差太小的事实会造成混乱吗?这是一个完全合法的公式输入,应该给出不大于 1 的小值!有什么建议吗?

【问题讨论】:

  • 我得到0.12203763789602547 运行您的示例...
  • 他缺少前面的 1 over 部分!
  • 我现在做了编辑,但正在审核中
  • 如果我将1. / 添加回来,我现在会得到3.014...
  • 您的表达中可能确实有错字。但是,您仍然犯了一个类别错误:公式是概率密度,而不是概率。密度可以大于一。你到底想弄清楚什么?

标签: python statistics probability


【解决方案1】:

好的,您计算的不是概率,而是概率密度(可能大于一)。为了得到 1,你必须像这样对正态分布进行积分:

import numpy as np
mean = -0.546369
var = 0.006443
curr_sample = np.linspace(-10,10,10000)

prob = np.sum( 1/(np.sqrt(2*np.pi*var))*np.exp( -( ((curr_sample - mean)**2)/(2*var) ) ) * (curr_sample[1]-curr_sample[0]) )
print prob

女巫结果

0.99999999999961509

【讨论】:

  • 这是真的,但这只是意味着 OP 不知道他要计算什么......
  • 是的,我只是告诉他要怎么做才能得到 1。如果你也看到积分概率实际上是 1,有时更容易看出这一点!
  • 你错了var!方差是 sigma**2,这在 OP 的公式中是正确的(至少现在是这样)。
  • 我是个白痴 - 忘记了峰值是 1/sqrt(2*pi*var) 并且不小于 1,就像我最近使用的离散变量一样。我不是想得到 1,只是为了得到一个类似于 ML/MAP 的近似值并检查结果。这就解决了。感谢您的回答,更正了原始问题中的错字,更正了符号的轻微滥用(D 而不是 PDF)和其他非常有用的构建 cmets。
【解决方案2】:

您给出的公式是概率密度,而不是概率。密度公式是这样的,当您将它积分x 的两个值之间时,您会得到处于该区间的概率。然而,这意味着获得任何特定样本的概率实际上是 0(它是密度乘以无穷小dx)。

那么您实际上要计算什么?您可能想要获得您的价值或更大的概率,即所谓的尾部概率,通常用于统计中(碰巧这是由error function 给出的,当你'重新谈论正态分布,尽管您需要注意它的确切定义方式)。

【讨论】:

    【解决方案3】:

    当考虑给定均值和方差的钟形概率分布函数 (PDF) 时,曲线的峰值(众数的高度)为 1/sqrt(2*pi*var)。对于标准正态分布,它是 1(平均值 0 和 var 1)。因此,当尝试计算一般正态分布 pdf 的特定值时,可能会出现大于 1 的值。

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 1970-01-01
      • 2018-05-17
      • 2012-11-08
      • 2014-04-16
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      相关资源
      最近更新 更多