描述性統計手冊/統計變異性度量/方差
- 簡要描述什麼是方差以及它的用途。
- 數學公式
- 指向維基百科相關文章的連結。
在此詳細描述方差最有效的的資料集和目的。還應描述可能導致誤導結果的資料集。
- 如果存在,請包含常見分佈的標準值。例如,正態分佈的偏度和峰度始終為零。
- 包含正態分佈的標準誤差,如果可能,也包含其他分佈的標準誤差。
- 抽樣分佈。
計算大小為N的總體方差σ2的公式為
其中
代表總體均值。
計算樣本方差s2(總體方差的無偏估計)的公式,從大小為n的樣本中計算,為
其中
代表樣本均值。
因此,計算方差的簡單演算法可以用以下虛擬碼描述
double sum; double sum_sqr; double variance; long n = data.length; // the number of elements in the data array (the actual syntax is language-specific) for i = 0 to n sum += data[i]; sum_sqr += ( data[i] * data[i] ); end for variance = ((n * sum_sqr) - (sum * sum))/(n*(n-1));
另一種在求和時避免sum_sqr中出現大數的演算法
double avg; double var; long n = data.length; // number of elements for i = 0 to n avg = (avg*i + data[i]) / (i + 1); if (i > 0) var += (var * (i - 1) + (data[i] - avg)*(data[i] - avg)) / i; end for return var; // resulting variance
Chan、Golub 和 Leveque(American Statistician,1983 年,第 242 頁)的“校正兩遍演算法”
avg=0
for all i
avg=avg+data[i]
end for
avg=avg/n
sum=0
sum2=0
for all i
sum2=sum2+(data[i]-avg)^2
sum=sum+(data[i]-avg)
end for
var=(sum2-sum/n)/(n-1)
return var
在計算機上處理大型資料集或大數時,選擇最大程度減少計算機近似計算引起的誤差的演算法非常重要。在下面合併上述演算法的討論。
實際上,第一個公式在處理有限精度算術時存在精度問題。如果測量值與均值之間的差異非常小,則第一個公式將產生精度問題,因為資訊將在 (xi - µ) 操作中丟失。第二個公式的中間運算中不會發生這種顯著性損失。
事實上,第二個公式更容易出現問題。第一個公式在均值相對於方差非常大的時候可能會出現問題,但在實踐中這種情況相對較少,而且這個問題也會影響第二個公式。更常見的情況是,均值和方差相當,並且觀測值非常多。在這種情況下,第二個公式會導致兩個非常大的數字相減,而它們的差值相對較小(大約與觀測值的個數成反比)。如果你有一百萬個觀測值,如果你使用普通的浮點運算,第二個公式會損失大約六位有效數字。
問題可能發生在
- 當偏差相對於均值非常小時,或者
- 當它們相對於算術工具(浮點計算機、定點計算器、紙和筆)的表示能力較小時。
為了精確起見,我們必須指定工具和資料的性質。
你所說的普通浮點運算是什麼意思?是在談論暫存器寬度方面的精度,還是隱含地引用了一些“非普通”方案,即非 IEEE 方案?謝謝。我認為這個參考非常明確。然而,我並不想暗示使用非標準但仍然是浮點運算。我想到的是完全不同的系統。一個簡單的例子是一個基於無限精度整數的有理數系統。另一個系統可能是定點運算。第一個系統在計算中不會損失精度,而第二個系統會或多或少地損失精度,具體取決於相關的值和定點系統的特性。你還可以想象一個最佳化器,它注意到你可能會將大量非常小的數字加起來,並且會重新排序加法以避免大部分舍入誤差,方法是使用 log N 個臨時值來執行加法。
包括如何在常見的統計軟體包中訪問它(如果已知)。還可以提供計算它的原始碼示例連結等。