Java 中给定点的正态分布 function:determine 概率
Normal distribution function:determine probability of a given point in Java
我高中以来的统计数据不见了
我正在努力寻找一种方法来确定 java 中正态分布中给定点的概率。
我看到 Colt cern.jet.stat
提供了 Probability
和一些方法
normal(double a)
normal(double mean, double variance, double x)
normalInverse(double y0)
和 Apache org.apache.commons.math3.distribution
提供了 NormalDistribution
class,其中包括一些方法:
cumulativeProbability(double x)
cumulativeProbability(double x0, double x1)
density(double x)
inverseCumulativeProbability(double p)
probability(double x0, double x1)
probability(double x)
我要使用哪一个?
编辑编辑编辑
问题是使用 Chauvenet's criterion
从数据集中排除异常值
To apply Chauvenet's criterion, first calculate the mean and standard deviation of the observed data. Based on how much the suspect datum differs from the mean, use the normal distribution function (or a table thereof) to determine the probability that a given data point will be at the value of the suspect data point. Multiply this probability by the number of data points taken. If the result is less than 0.5, the suspicious data point may be discarded, i.e., a reading may be rejected if the probability of obtaining the particular deviation from the mean is less than 1/(2n)
正态分布中任意点的概率为0。
因此,肯定有 no NormalDistribution.probability(double x)
方法,您误会了。
至于与您的问题有点相关的其他方法:
cumulativeProbability(double x)
是数值小于x
的概率。
probability(double x0, double x1)
returns 值介于 x0
和 x1
之间的概率。相当于cumulativeProbability(x1) - cumulativeProbability(x0)
;
cumulativeProbability(double,double)
已弃用,实际上与 probability(double,double)
相同(但命名非常糟糕)。
首先,这个问题不能原样回答,因为在像正态分布这样的连续分布中,特定点的概率总是为零。你需要问问自己,你到底想知道什么是间隔。
例如,cern.jet.stat.Probability.normal(double)
将回答问题 "What is the probability of the value being less than my value?"(在此上下文中,小于或等于等价。)
org.apache.commons.math3.distribution.NormalDistribution.cumulativeProbability(double)
也会给你同样的信息。
如果p
如果数值小于你数值的概率,数值高于你数值的概率是1 - p
.
编辑答案
在你的编辑中,相关的句子部分是这样的
Based on how much the suspect datum differs from the mean (...)
您正在寻找可疑点(至少)远离平均值的概率。
让x
成为你的怀疑点。首先,对其进行归一化,使其能够与归一化的正态分布一起工作,就像这样
xn = (x - mean) / standard deviation
你要找的概率是
2 * CPD( -abs(xn) )
其中 CPD(累积概率分布)为 org.apache.commons.math3.distribution.NormalDistribution.cumulativeProbability(double)
或 cern.jet.stat.Probability.normal(double)
。
该表达式给出了标准化值低于 -abs(xn)
或高于 abs(xn)
的概率,这与表示至少偏离平均值那么远的概率完全相同。 CPD( -abs(xn) )
给出低于 -abs(xn)
的概率(根据定义),我们可以乘以 2 加上超过 abs(xn)
的概率,因为正态分布相对于均值是对称的。
NormalDistribution.density
似乎是最合适的。但是,如果您能多谈谈您要解决的问题,那也没什么坏处。
我高中以来的统计数据不见了
我正在努力寻找一种方法来确定 java 中正态分布中给定点的概率。
我看到 Colt cern.jet.stat
提供了 Probability
和一些方法
normal(double a)
normal(double mean, double variance, double x)
normalInverse(double y0)
和 Apache org.apache.commons.math3.distribution
提供了 NormalDistribution
class,其中包括一些方法:
cumulativeProbability(double x)
cumulativeProbability(double x0, double x1)
density(double x)
inverseCumulativeProbability(double p)
probability(double x0, double x1)
probability(double x)
我要使用哪一个?
编辑编辑编辑
问题是使用 Chauvenet's criterion
从数据集中排除异常值To apply Chauvenet's criterion, first calculate the mean and standard deviation of the observed data. Based on how much the suspect datum differs from the mean, use the normal distribution function (or a table thereof) to determine the probability that a given data point will be at the value of the suspect data point. Multiply this probability by the number of data points taken. If the result is less than 0.5, the suspicious data point may be discarded, i.e., a reading may be rejected if the probability of obtaining the particular deviation from the mean is less than 1/(2n)
正态分布中任意点的概率为0。
因此,肯定有 no NormalDistribution.probability(double x)
方法,您误会了。
至于与您的问题有点相关的其他方法:
cumulativeProbability(double x)
是数值小于x
的概率。
probability(double x0, double x1)
returns 值介于 x0
和 x1
之间的概率。相当于cumulativeProbability(x1) - cumulativeProbability(x0)
;
cumulativeProbability(double,double)
已弃用,实际上与 probability(double,double)
相同(但命名非常糟糕)。
首先,这个问题不能原样回答,因为在像正态分布这样的连续分布中,特定点的概率总是为零。你需要问问自己,你到底想知道什么是间隔。
例如,cern.jet.stat.Probability.normal(double)
将回答问题 "What is the probability of the value being less than my value?"(在此上下文中,小于或等于等价。)
org.apache.commons.math3.distribution.NormalDistribution.cumulativeProbability(double)
也会给你同样的信息。
如果p
如果数值小于你数值的概率,数值高于你数值的概率是1 - p
.
编辑答案
在你的编辑中,相关的句子部分是这样的
Based on how much the suspect datum differs from the mean (...)
您正在寻找可疑点(至少)远离平均值的概率。
让x
成为你的怀疑点。首先,对其进行归一化,使其能够与归一化的正态分布一起工作,就像这样
xn = (x - mean) / standard deviation
你要找的概率是
2 * CPD( -abs(xn) )
其中 CPD(累积概率分布)为 org.apache.commons.math3.distribution.NormalDistribution.cumulativeProbability(double)
或 cern.jet.stat.Probability.normal(double)
。
该表达式给出了标准化值低于 -abs(xn)
或高于 abs(xn)
的概率,这与表示至少偏离平均值那么远的概率完全相同。 CPD( -abs(xn) )
给出低于 -abs(xn)
的概率(根据定义),我们可以乘以 2 加上超过 abs(xn)
的概率,因为正态分布相对于均值是对称的。
NormalDistribution.density
似乎是最合适的。但是,如果您能多谈谈您要解决的问题,那也没什么坏处。