Php 如果原始总体未知,如何计算新的标准偏差?
接下来我有以下的场景 有一个具有任意值的集合(Php 如果原始总体未知,如何计算新的标准偏差?,php,math,statistics,standard-deviation,Php,Math,Statistics,Standard Deviation,接下来我有以下的场景 有一个具有任意值的集合($array),集合中的值量($n),它是平均值($mean)和标准偏差($s) 其中sd()函数的原点位于: 现在,$array被删除,并且这些值不再可用(比如说出于匿名原因),但另一个$x值将进入,该值应在$mean和$s的标准偏差范围内计算 我尝试用这个公式计算新的标准偏差(根据): m_reverse()函数返回正确的新平均值。但是sd\u reverse()函数不会。谁能知道我做错了什么?也许是妄想症的不当使用 您可以在此处找到我的实现的代
$array
),集合中的值量($n
),它是平均值($mean
)和标准偏差($s
)
其中sd()
函数的原点位于:
现在,$array
被删除,并且这些值不再可用(比如说出于匿名原因),但另一个$x
值将进入,该值应在$mean
和$s
的标准偏差范围内计算
我尝试用这个公式计算新的标准偏差(根据):
m_reverse()
函数返回正确的新平均值。但是sd\u reverse()
函数不会。谁能知道我做错了什么?也许是妄想症的不当使用
您可以在此处找到我的实现的代码示例:
感谢您的帮助 要计算新的标准偏差,您需要使用新旧平均值;这给了你很多
你可以找到一个非常易读的C++实现,这里的方差和标准偏差:
如果按1关闭,您如何调用sd_reverse
可能是其中一个输入?我相信最后一个$x-$mean
应该是平方。@Halcyon您可以在这里查看整个代码:@Teepeemm您怎么会相信?您在math.se上给出的答案是错误的。。。
$array = array(1, 5, 16, 3, ...);
$n = count($array);
$mean = array_sum($array) / count($array);
$s = sd($array);
// Function to calculate square of value - mean
function sd_square($x, $mean) { return pow($x - $mean,2); }
// Function to calculate standard deviation (uses sd_square)
function sd($array) {
// square root of sum of squares devided by N-1
return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)-1) );
}
function m_reverse($n, $mean, $x) {
return ( $n * $mean + $x ) / ( $n + 1 );
}
function sd_reverse($s, $n, $x, $mean) {
return sqrt( 1 / $n * ( ( $n - 1 ) * pow( $s, 2 ) + ( $x - $mean ) ) );
}
function sd_reverse($s, $n, $x, $mean, $old_mean) {
return sqrt( 1 / $n * ( ( $n - 1 ) * pow( $s, 2 ) + ( $x - $mean )*( $x - $old_mean ) ) );
}