即將from this question on Math SE我有以下情況。如果原始人羣未知,我該如何計算新的標準偏差?
有一組($array
)具有任意值,值的集合($n
)的量,它的平均值($mean
)和標準偏差($s
)。
$array = array(1, 5, 16, 3, ...);
$n = count($array);
$mean = array_sum($array)/count($array);
$s = sd($array);
凡sd()
功能有它的起源在PHP comments for the stats_standard_deviation()
function:
// 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));
}
現在$array
被丟棄和值不再可用(假設爲匿名的原因),但另一$x
值即將在$mean
和$s
(標準偏差)內計算。
我試圖通過這個公式推來計算新的標準偏差(根據this answer on Math SE):
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)));
}
的m_reverse()
函數返回正確的新平均值。但sd_reverse()
函數不會。任何人都可以弄清楚,我做錯了什麼?也許不適當使用palenthesis?
你可以在這裏找到我的實現的代碼示例:http://3v4l.org/5mPDp
任何幫助表示讚賞!
你是如何調用'sd_reverse'的投入也許有過,如果按一個? – Halcyon
我相信最後的$ x- $ mean應該平方。 – Teepeemm
@Halcyon你可以在這裏查看整個代碼:http://3v4l.org/5mPDp –