遙想當時年紀小,聽聞有人批評國人凡事差不多,不求精確統計,人少則稱兩三人、三五人,多些就二三十人、三五十人,再多則三五百人、三五千人、甚或三五萬人。總而言之,吾人當力求精準,不做「差不多先生」。我當時直接就想回:統計本就是「差不多」。
無可議的,「差不多先生」的差不多和統計的差不多是兩回事,此處卻想強調統計的差不多,因為個人認為:只有承認統計只講差不多,才能了解統計的真意,才能正確應用統計。由於承認了模糊的事實,有了模糊數學的發展,使得電腦控制、模式識別、人工智能方面有了很好的成就。記得有一陣子,家電產品的廣告流行「微電腦模糊控制」的廣告語。注意是微電腦模糊控制而不是微電腦精確控制。
統計資料的蒐集過程帶來許多誤差和偏誤,數字本身在測量時也因工具精確度的限制不能不採用「近似值」。可以說:統計數字原本就是伴著誤差而生的,我們能力求減小誤差,卻不能沒有誤差。因此,如 1234.56789 之類的統計數字通常是沒有意義的,1234.6 或 1235 可能更接近事實。常見有人發表文章,涉及數字寫的是一長串;相反的,在學校中學生做數值計算,則是能省則省,總不肯多算一兩位小數。這兩種做法都是不當的,前者可能寫的是一長串 gabage,而後者可能使答案不正確或達不到要求的精確度。要知道報告中應報告幾位數字或計算過程中間結果要取到幾位「有效數字」或取到幾位小數,就必須了解近似值算術或「誤差傳播(傳遞) (propadation of error)」的問題。
如果有兩個統計數字,12.3 和 4.56,不管是原始資料或計算結果,如何適當表示它們的和或差?如果知道它們的誤差範圍,分別是 ±e 與 ±f,則 12.3 + 4.56 實際意義是
(12.3±e) + (4.56±f) = 16.86 ± (e+f)
我們不知誤差的正負,因此兩數和的絕對誤差是兩數絕對誤差的和。若要計算的是兩數的差,(12.3±e) - (4.56±f) = 7.74± (e+f),其誤差也是取兩絕對誤差的和。其道理是 12.3 其實只是一個位在 12.3-e 到 12.3+e 的某數的代替,同樣 4.56 也只是某個在 4.56-f 與 4.56+f 之間的某數的替身,因而真正的兩數和在 16.86±(e+f) 之間,兩數差在 7.74±(e+f) 之間。原本分別帶有誤差 e, f 的兩數和或差會帶有誤差 e+f , 這就是誤差傳播的一個例子。一般來說,對帶有誤差的數字做運算,結果都會帶有誤差,這是統計計算、數值計算以至任何科學計算都需要考慮的,而計算結果的表達,不能不考慮其帶有誤差的事實。通常(但不是絕對),12.3 是 12.25 到 12.35 之間某數的近似值,4.56 則代表 4.555 與 4.565 之間的某數,因此兩數和 "16.86" 代表的真值介於 16.805 與 16.915 之間,所以寫 12.3 + 4.56 = 16.9 比 16.86 適當,雖然前者也不算很正確,因為它給人的感覺是真值在 16.85 與 16.95 之間,而實際上卻是在 16.805 與 16.915 之間;但後者卻讓人誤以為真值介於 16.855 與 16.865 之間。
表示一個數字的精確度,在小學算術中常用「準確至某一位數」表示,如 12.3 與 16.9 都是準確至小數點後一位;在統計中,我們也常用「有效數字 (significant figures)」位數表示,如 12.3 與 4.56 都是具有 3 位有效數字。有效數字是指一個數中可表示這個數的精確度的數字,所以非零數位都是有效數字,一個數的兩有效數字之間的數字也是有效數字,小數點後在有效數字之後的 0 也是有效數字。所以 12.0 和 12.00 是不同的,因為前者代表 11.95~12.05, 而後者則是 11,995~12.005。我們也可認為 120. 和 120 是不同的,前者代表 119.5~120.5, 而後者可能代表 115~125。這裡說「可能」因為我們不知道它應該是「準確至個位數」或是「準確至十位數」。一般整數我們會把末尾的 0 都當成非有效數字,但也有可能其精確度超過我們以為的。所以在這一種情況為了避免誤解,最好明示準確至哪一位數。另一邊,純小數如 0.00123 倒不會有疑義,第一個非 0 數字以前的 0 都不是有效數字。因為有帶小數點時有效數字很明確,所以如果數字以科學記數法表達,有效數字有幾位就不會被誤解了。不過這並不現實也不方便,有疑義時加個註解就是了。
兩數字相加減,其最後一位有效數字之數位不同,如 12.3+4.56, 前人的意見是認為應向位數較高者對齊,也就是 4.56 化為 4.6,而後計算 12.3 + 4.6 = 16.9。在多個數字相加減時亦是如此。這樣做的好處是整齊、簡單。個人倒不認為一定要如此,如果在很多數字加減,部分精確度較高而部分較低時,分開計算或同時對誤差做相加。以現在的情形來說,涉及相加減的數可能是中間統計結果,也可能是不同來源的資料。如果是計算工具處理通常其內部儲存的精確度不是顯示或列印的精確度,除非是有意提前設定其精確度,那麼會造成什麼結果自己心中有數。若是不同來源資料,先按來源別進行統計分析或許是較佳的策略。
數字加減看的是絕對誤差,乘除則看相對誤差:
[(x±e).(y±f)]/(x.y) ≒ 1 ± [ (e/x) + (f/y) ]
兩近似值相除結果的相對誤差也是兩數相對誤差相加,因此如 12.3 × 4.56 相對誤差是 (0.05)/12.3 + (0.005/4.56) ≒ 5/1000, 意謂最適當的是取 2 位有效數字,或者可以取 3 位,也就是結果取 56.1。所謂「可以取 3 位有效數字」不代表精確至第 3 位有效數字,事實上精確的只有兩位,因為 56.1 × 5/1000 ≒ 0.3, 表示真值可能在 55.8 至 56.4 之間,實際把 12.3 和 4.56 各自代表的範圍代入計算可知範圍大約就是 55.8 至 56.4 之間。如果比較保守些,則只能取兩位有效數字 12.3 × 4.56 ≒ 56。若希望最後結果能準確至小數點後一位,也就是結果有 3 位有效數字是精確的,那麼用來相乘除的兩數就需要各自取 4 位有效數字。如果更多個近似值相乘除,這些數字不取足夠的有效位數,結果會成什麼樣子?可能最後的答索完全是錯的。
其他運算,如開平方根、取對數之類的,其誤差傳播效果如何,就需要藉助微分法了,例如
√(x+e) ≒ √x + e/(2√x), ln(x+e) ≒ ln(x) + e/x
總之,要得什麼果,就須怎麼栽。想要計算結果達到足夠或合宜的精確度,投入計算的數字就要有足夠的精確度,否則結果寫得再長,所謂 GIGO,寫出的也不過是一串垃圾罷了。