跳轉到內容

描述性統計手冊/統計變異性度量/方差

來自Wikibooks,開放世界的開放書籍
  • 簡要描述什麼是方差以及它的用途。
  • 數學公式
  • 指向維基百科相關文章的連結。

在此詳細描述方差最有效的的資料集和目的。還應描述可能導致誤導結果的資料集。

  • 如果存在,請包含常見分佈的標準值。例如,正態分佈的偏度和峰度始終為零。
  • 包含正態分佈的標準誤差,如果可能,也包含其他分佈的標準誤差。
  • 抽樣分佈。

計算大小為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 - µ) 操作中丟失。第二個公式的中間運算中不會發生這種顯著性損失。

事實上,第二個公式更容易出現問題。第一個公式在均值相對於方差非常大的時候可能會出現問題,但在實踐中這種情況相對較少,而且這個問題也會影響第二個公式。更常見的情況是,均值和方差相當,並且觀測值非常多。在這種情況下,第二個公式會導致兩個非常大的數字相減,而它們的差值相對較小(大約與觀測值的個數成反比)。如果你有一百萬個觀測值,如果你使用普通的浮點運算,第二個公式會損失大約六位有效數字。

問題可能發生在

  1. 當偏差相對於均值非常小時,或者
  2. 當它們相對於算術工具(浮點計算機、定點計算器、紙和筆)的表示能力較小時。

為了精確起見,我們必須指定工具和資料的性質。

你所說的普通浮點運算是什麼意思?是在談論暫存器寬度方面的精度,還是隱含地引用了一些“非普通”方案,即非 IEEE 方案?謝謝。我認為這個參考非常明確。然而,我並不想暗示使用非標準但仍然是浮點運算。我想到的是完全不同的系統。一個簡單的例子是一個基於無限精度整數的有理數系統。另一個系統可能是定點運算。第一個系統在計算中不會損失精度,而第二個系統會或多或少地損失精度,具體取決於相關的值和定點系統的特性。你還可以想象一個最佳化器,它注意到你可能會將大量非常小的數字加起來,並且會重新排序加法以避免大部分舍入誤差,方法是使用 log N 個臨時值來執行加法。

包括如何在常見的統計軟體包中訪問它(如果已知)。還可以提供計算它的原始碼示例連結等。

華夏公益教科書