Confidence Interval (1)

[前言]

        當我們使用模擬軟體去模擬真實的環境時,假設第一次模擬的結果數據是V1,第二次是V2,重覆了M次後,就有V1V2...Vm數據,這M數據都不相同,這時要思考一下,到底那個數據才是正確的?在直覺上,把得到的M結果去求平均,所得到的值會比任一個模擬結果的值還好

        但是這個平均值(sample mean),我們可以有多少程度的去相信呢? 因此在本小節中,筆者將把Confidence Interval的觀念介紹給大家。

[:每一次模擬的結果所得到的值,我們都把它視為一個sample]

 

[Confidence Interval]

        在實際上,若是想要在有限模擬數據結果中得到一個較完美接近真實結果的數據,是不可能的。因此我們最多能做的就是去求得一個機率範圍(probability bound)。因此,若是我們可以得到一個機率範圍的上限c1和一個範圍的下限c2,則就有一個很高的機率1 α ,會使得每次所得到的模擬結果平均值(sample mean)都落在c1到c2的範圍之間。

 

Probability { c1 <=  μ  <= c2} = 1 α

 

        我們把(c1, c2)這個範圍就稱為置信區間(confidence interval)α稱之為顯著性水平(sgnificance level)100(1-α)稱之為稱之為置信水平(confidence level)1-α稱之為置信係數(confidence coefficient)。一般來說,confidence level會使用百分比所表示,且這個值會很接近100%,例如90%或者是95%,而此時的significance level α 就會等於0.1 (90%) 0.05(95%)

        假設當α = 0.01 (90% confidence level)時,我們就可以使用5%95%的模擬結果平均值(sample mean)當作下限和上限。例如,假設有k模擬結果,先求出平均值(sample mean),然後在做排序(sort),且順序是由小到大,最後以第[1 + 0.05(k-1)]和第[1+0.95(k-1)]模擬結果(sample)當做是範圍的下限和上限。

 

[Central Limit Theorem]

        只從一個模擬結果(sample)就去求出confidence interval這是有可能的。這是因為Central Limit Theorem可以決定出平均值的分佈( distribution of the sample mean)。這個定理陳述了假定所有的結果數據{V1V2...Vm}都是獨立的,且都來自同一母體(population)(具有平均值μ、標準差σ)的話,則從眾多的結果數據所得到的平均值會近似常態分佈(normal distribution),而這個分佈平均值是μ,標準差是σ / (原文是: This theorem states that if the observations in a sample {V1V2...Vm} are independent and come from the same population that has a mean μ and a standard deviation σ, then the sample mean for large samples is approximately normally distributed with mean μ and standard deviation σ /):

 

 ~ N (μ, σ /)

 

        這邊有一個地方要特別注意,就是母體的標準差σ並不等於模擬結果平均值(sample mean)的標準差(σ /)。而當模擬的次數越多時,也就是M值越大的時候,模擬結果平均值的標準差也就會越小。

       

 

        若是使用central limit theorem,一個100(1-α)confidence interval就可以表示成:

 

(  - Z1-α/2 s/,  + Z1-α/2 s/ )

 

其中的平均值(sample mean),s是標準差(sample standard deviation),M是模擬次數(sample size),Z1-α/2 is the (1-σ/2)-quantile of a unit normal variate. 這個值可以去查表得知,而下面筆者把一些常用的值列在下方。

 

Confidence Level (%)

α

α/2

Z1-α/2

20

0.8

0.4

0.253

40

0.6

0.3

0.524

60

0.4

0.2

0.842

68.26

0.3174

0.1587

1.000

80

0.2

0.1

1.282

90

0.1

0.5

1.645

95

0.05

0.025

1.960

95.46

0.0454

0.0228

2.000

98

0.02

0.01

2.326

99

0.01

0.005

2.576

99.74

0.0026

0.0013

3.000

99.8

0.002

0.001

3.090

99.9

0.001

0.0005

3.29

99.98

0.0002

0.0001

3.72

 

[範例]

假設平均值(mean)  = 3.90,標準差(standard deviation) s=0.95,M=32:

A 90% confidence interal for the mean = 3.90 ( 1.645)(0.95) /  =  ( 3.62 , 4.17)

(當中的1.645是從表中得知當α=0.1時,Z1-α/2=1.645)

 

因此我們可以有90%信心(confidence)可以說母體的平均值( population mean)是介於3.624.17之間。而會發生錯誤的機率為10%

 

A 95% confidence interal for the mean = 3.90 ( 1.96)(0.95) /  =  ( 3.57 , 4.23)

因此我們可以有95%信心(confidence)可以說母體的平均值( population mean)是介於3.574.23之間。而會發生錯誤的機率為5%

 

A 99% confidence interal for the mean = 3.90 ( 2.576)(0.95) /  =  ( 3.46 , 4.33)

因此我們可以有99%信心(confidence)可以說母體的平均值( population mean)是介於3.464.33之間。而會發生錯誤的機率為1%

 

[重要的說明]

1.以上的所說明的方法只適用於有大量的實驗次數時,一般來說M>=30次。若是小於30次,會有其它的計算方式,這個筆者會再補充。

2.有一個經驗,筆者要跟ns2的使用者分享一下,就是要如何針對同樣的模擬的環境產生不同的模擬結果數據,其實很簡單。以在簡單工具介紹那個章節所介紹的範例來說,若是我們想要計算那條FTP Flow在有CBR時的average throughput,我們可以使用亂數產生器的方式,讓FTP開始傳送的時間是由亂數決定的,每一次執行模擬就可以得出一個average throughput,若是實驗超過30次以上,我們就可以用上面所教的方法求出confidence interval。

 

[一個完整範例]

        最後,筆者以一個完整的範例(使用亂數產生30個不同0到1之間的數字),來計算出95%的confidence interval。讀者可以想成自己做實驗三十次,然後要求95%的confidence interval。

 

1.產生30個0到1之間的數(使用Uniform Distribution) --- TCL Code (30.tcl)

set out  [open rng30.tr w]

set  r  [new RandomVariable/Uniform]

$r  use-rng $rng

$r  set  min_ 0.0

$r  set  max_ 1.0

for {set i 1} {$i <=30} {incr i} {

   puts $out [format "%.2f" [$r value]]

}

 

執行方法:

        ns     30.tcl

執行結果:(rng30.tr的內容)

0.00

0.56

0.01

0.09

0.44

0.80

0.31

0.82

0.23

0.64

0.31

0.84

0.16

0.04

0.64

0.11

0.86

0.42

0.17

0.09

0.81

0.35

0.26

0.41

0.52

0.47

0.69

0.86

0.84

0.22

 

2.計算平均值--- awk code (avg.awk)

BEGIN { FS = "\t"} {nl++} { s = s + $0} END { print "average:" s/nl }

 

執行方法:

        awk  -f  avg.awk rng30.tr

 

執行結果:

        average:0.432333

 

3.計算sample variance和 95%的confidence interval--- awk code (95ci.awk)

BEGIN {FS="\t"}{ln++}{d=$0-t}{s2=s2+d*d} END \

{s=sqrt(s2/(ln-1)) ; print "sample variance: " s " \

Conf. Int. 95%: " t " +/- " 1.96*s/sqrt(ln)}

 

執行方法:

        awk  -v  t=0.432333  -f  95ci.awk  rng30.tr

 

執行結果:

        sample variance: 0.29113  Conf. Int. 95%: 0.43233 +/- 0.104179

 

因此我們可以有95%信心(confidence)可以說母體的平均值( population mean)是介於0.3281540.536509之間。而會發生錯誤的機率為5%

 

[參考文件]

1.      http://www.cs.utah.edu/classes/cs7960-kasera/notes/network_simulation_sk_part2.pdf

2.      RAJ JAIN, “ The ART OF COMPUTER SYSTEMS PERFORMANCE ANALYSIS-Techniques for Experimental Design, Measurement, Simulation, and Modeling”, John Wiley & Sons, INC.

3.  http://www.cmi.hku.hk/Ref/Glossary/Mat/c.htm (數學名詞中英文轉換)