Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果原始总体未知,如何计算新的标准偏差?_Php_Math_Statistics_Standard Deviation - Fatal编程技术网

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 ) ) );
}