計算與推斷思維 十二、為什麼均值重要
十二、為什麼均值重要
在這個課程中,我們已經研究了幾個不同的統計量,包括總編譯距離,最大值,中位數和平均值。在關於隨機性的明確假設下,我們繪製了所有這些統計量的經驗分佈。有些統計量,比如最大和總變異距離,分佈明顯偏向一個方向。但是,無論研究物件如何,樣本均值的經驗分佈幾乎總是接近鐘形。
如果隨機樣本的性質是真的,不管總體如何,它都能成為一個有力的推理工具,因為我們通常不清楚總體中的資料。大型隨機樣本的均值分佈屬於這類性質。這就是隨機抽樣方法廣泛用於資料科學的原因。
在本章中,我們將研究均值,以及我們可以說的一些東西,僅僅使用最基本的底層總體的假設。我們要解決的問題包括:
- 均值正好測量了什麼?
- 大部分資料與平均值有多接近?
- 樣本量如何與樣本的均值相關?
- 為什麼隨機樣本的經驗分佈出現鐘形?
- 我們如何有效地使用抽樣方法進行推理?
均值的性質
在這個課程中,我們可以互換地使用“average”和“mean”兩個單詞(譯者注,在中文中都譯為“均值”),後面也一樣。 在你高中甚至更早的時候,你熟悉均值的定義。
定義:數值集合的均值是集合中所有元素的總和,除以集合中元素的數量。
np.average
和np.mean
方法返回陣列的均值。
not_symmetric = make_array(2, 3, 3, 9)
np.average(not_symmetric)
4.25
np.mean (not_symmetric)
4.25
基本性質
上面的定義和例子指出了均值的一些性質。
- 它不一定是集合中的一個元素。
- 即使集合的所有元素都是整數,也不一定是整數。
- 它在集合的最小值和最大值之間。
- 它不一定在兩個極值的正中間;集合中一半的元素並不總是大於均值。
- 如果集合含有一個變數的值,以指定單位測量,則均值也具有相同的單位。
我們現在將研究一些其他性質,它有助於理解均值,並與其他統計量相關。
均值是個“平滑器”
你可以將均值視為“均衡”或“平滑”操作。 例如,將上面的not_symmetric
中的條目設想為四個不同人的口袋中的美元。 為此,你先把所有的錢都放進一個大袋子,然後平均分配給四個人。 最開始,他們在口袋中裝了不同數量的錢(2 美元,3 美元,3 美元和9 美元),但現在每個人都有平均數量 4.25 美元。
均值的性質
如果一個集合只包含 1 和 0,那麼集合的總和就是集合中 1 的數量,集合的均值就是 1 的比例。
zero_one = make_array(1, 1, 1, 0)
sum(zero_one)
3
np.mean(zero_one)
0.75
捏可以將 1 替換為布林值True
,0 替換為False
。
np.mean(make_array(True, True, True, False))
0.75
因為比例是均值的一個特例,隨機樣本均值的結果也適用於隨機樣本比例。
均值和直方圖
集合{2, 3, 3, 9}
的平均值是 4.25,這不是資料的“正中間的點”。 那麼這是什麼意思?
為了瞭解它,請注意,平均值可以用不同的方式計算。
最後一個表示式就是一個普遍事實的例子:當我們計算平均值時,集合中的每個不同的值都由它在集合中出現的時間比例加權。
這有一個重要的結果。 集合的平均值僅取決於不同的值及其比例,而不取決於集合中元素的數量。 換句話說,集合的平均值僅取決於集合中值的分佈。
因此,如果兩個集合具有相同的分佈,則它們具有相同的均值。
例如,這裡是另一個集合,它的分佈與not_symmetric
相同,因此均值也相同。
not_symmetric
array([2, 3, 3, 9])
same_distribution = make_array(2, 2, 3, 3, 3, 3, 9, 9)
np.mean(same_distribution)
4.25
均值是分佈直方圖的物理屬性。這裡是not_symmetric
的分佈直方圖,或者等價的same_distribution
的分佈直方圖。
想象一下,直方圖是由紙板組成的圖形,它附著在一條線上,線沿著橫軸延伸。並且,將這些條形想象為附加在值 2, 3 和 9 上的權重。假設你嘗試在線上的某個點平衡這個圖形。如果該點接近 2,圖形就向右傾斜。如果該點接近 9,則圖形就向左傾斜。之間的某個地方是這個數字取得平衡的點。這個點是 4.25,就是均值。
均值是直方圖的重心或平衡點。
為了理解這是為什麼,瞭解一些物理會有幫助。重心的計算與我們計算平均值的方法完全相同,通過將不同值按它們比例加權。
因為均值是一個平衡點,有時在直方圖的底部顯示為一個支點或三角形。
均值和中位數
如果一個學生的考試成績低於平均水平,這是否意味著該學生在該考試中處於後一半?
對於學生來說,回答是“不一定”。 原因與直方圖的平衡點即均值,和資料的“中間點”即中位數之間的關係有關。
通過這個關係很容易看到一個簡單的例子。 這裡是陣列symmetric
的集合{2, 3, 3, 4}
的直方圖。 分佈對稱於 3。均值和中位數都等於 3。
symmetric = make_array(2, 3, 3, 4)
np.mean(symmetric)
3.0
percentile(50, symmetric)
3
一般來說,對於對稱分佈,均值和中位數是相等的。
如果分佈不對稱呢? 我們來比較symmetric
和not_symmetric
。
藍色直方圖表示原始的symmetric
分佈。 not_symmetric
的金色從左端起始,和藍色一樣,但是最右邊的條形到了數值 9。棕色部分是兩個直方圖重疊的位置。
藍色分佈的中位數和均值都等於 3。金色分佈的中值也等於 3,儘管右半部分與左邊的分佈不同。
但金色分佈的平均值不是 3:金色直方圖在 3 時不平衡。平衡點已經向右移動到 4.25。
在金色分佈中,4 個條目中有 3 個(75%)低於平均水平。 因此,低於平均分的學生可以放心。 他或她可能是班上的大多數人。
一般來說,如果直方圖的一邊有尾巴(整數屬於是“偏斜的”),那麼平均值就會從中間拉到尾巴的方向。
示例
sf2015
表包含 2015 年舊金山城市員工的薪水和福利資料。與以前一樣,我們將我們的分析僅限於那些等價於至少就業半年的人。
sf2015 = Table.read_table('san_francisco_2015.csv').where('Salaries', are.above(10000))
我們前面看到了,最高薪資高於 60 萬美元,但絕大多數僱員的薪資低於 30 萬美元。
sf2015.select('Total Compensation').hist(bins = np.arange(10000, 700000, 25000))
這個直方圖向右偏斜;它的右側有個尾巴。
平均值拉向了尾巴的方向。 所以我們預計平均薪酬會比中位數大,事實確實如此。
compensation = sf2015.column('Total Compensation')
percentile(50, compensation)
110305.78999999999
np.mean(compensation)
114725.98411824222
大量總體的收入分佈往往是右偏的。 當總體的大部分收入中到低,但很小一部分收入很高時,直方圖的右側有條細長的尾巴。
平均收入受這條尾巴的影響:尾巴向右延伸得越遠,平均值就越大。 但中位數不受分佈極值的影響。 這就是經濟學家經常用收入分佈的中位數來代替平均值的原因。
可變性
平均值告訴我們直方圖平衡的位置。 但是在我們所看到的幾乎所有的直方圖中,值都位於均值的兩邊。 他們距離均值有多遠? 為了回答這個問題,我們將開發一個關於均值的可變性度量。
我們首先描述如何計算度量值。 然後我們就會明白,為什麼這是很好的計算方法。
距離均值的偏差的大致大小
為了簡單起見,我們將在簡單陣列any_numbers
的上下文中開始計算,它由四個值組成。 你將會看到,我們的方法非常易於擴充套件到任何其他陣列。
any_numbers = make_array(1, 2, 2, 10)
我們的目標是,大致衡量這些數值離他們的平均水平有多遠。 為了實現它,我們首先需要均值:
# Step 1. The average.
mean = np.mean(any_numbers)
mean
3.75
接下來,我們來看看每個數值離均值有多遠。 這些被稱為到均值的偏差。 “到均值的偏差”只是每個值減去平均值。 calculation_steps
表顯示了結果。
# Step 2. The deviations from average.
deviations = any_numbers - mean
calculation_steps = Table().with_columns(
'Value', any_numbers,
'Deviation from Average', deviations
)
calculation_steps
Value | Deviation from Average |
---|---|
1 | -2.75 |
2 | -1.75 |
2 | -1.75 |
10 | 6.25 |
一些偏差是負的;它們對應於低於均值的值。 正的偏差對應於高於平均值的值。
要計算偏差有多大,計算偏差的平均值是很自然的。 但是當所有的偏差加在一起的時候,會發生一些有趣的事:
sum(deviations)
0.0
正的偏差正好和負的偏差抵消。 無論列表的直方圖是什麼樣子,所有的數字列表都是如此:到均值的偏差總和為零。
由於偏差的總和為零,偏差的均值也將為零:
np.mean(deviations)
0.0
因此,偏差的均值不是偏差大小的有用度量。 我們真正想知道的是偏差有多大,不管它們是正的還是負的。 所以我們需要一種方法來消除偏差的符號。
有兩種歷史悠久的丟掉符號的方式:絕對值和平方。 事實證明,採用平方會構建一個度量,帶有非常強大的性質,其中一些我們將在這個課程中學習。
所以讓我們計算所有偏差的平方,來消除符號。 那麼我們將計算平方的均值:
# Step 3. The squared deviations from average
squared_deviations = deviations ** 2
calculation_steps = calculation_steps.with_column(
'Squared Deviations from Average', squared_deviations
)
calculation_steps
Value | Deviation from Average | Squared Deviations from Average |
---|---|---|
1 | -2.75 | 7.5625 |
2 | -1.75 | 3.0625 |
2 | -1.75 | 3.0625 |
10 | 6.25 | 39.0625 |
# Step 4. Variance = the mean squared deviation from average
variance = np.mean(squared_deviations)
variance
13.1875
方差:上面計算的偏差平方的均值稱為方差。
雖然方差確實給了我們延展度的概念,但它和原始變數不是一個量綱,因為它的單位是原始變數的平方。 這使得解釋非常困難。
所以我們通過計算方差的算術平方根的來返回原來的量綱:
# Step 5.
# Standard Deviation: root mean squared deviation from average
# Steps of calculation: 5 4 3 2 1
sd = variance ** 0.5
sd
3.6314597615834874
標準差
我們剛計算出來的數量叫做列表的標準差,簡寫為 SD。 它大致衡量列表中的數字與其平均水平的差距。
定義:列表的 SD 定義為方差(偏差平方的均值)的算術平方根。這很拗口。 但是從左到右閱讀,你需要執行一系列的步驟的計算。
計算:上述五個步驟會產生 SD。 你還可以使用函式np.std
來計算陣列中值的標準差:
np.std(any_numbers)
3.6314597615834874
譯者注:寫在一起就是
np.mean((arr - arr.mean()) ** 2) ** 0.5
。
使用 SD
要看看我們可以從SD中學到什麼,讓我們轉向一個比any_numbers
更有趣的資料集。 nba13
表包含了 2013 年 NBA 的球員資料。對於每個球員來說,表格中記錄了球員通常的位置,他的身高(英寸),體重(磅)和年齡。
nba13 = Table.read_table('nba2013.csv')
nba13
Name | Position | Height | Weight | Age in 2013 |
---|---|---|---|---|
DeQuan Jones | Guard | 80 | 221 | 23 |
Darius Miller | Guard | 80 | 235 | 23 |
Trevor Ariza | Guard | 80 | 210 | 28 |
James Jones | Guard | 80 | 215 | 32 |
Wesley Johnson | Guard | 79 | 215 | 26 |
Klay Thompson | Guard | 79 | 205 | 23 |
Thabo Sefolosha | Guard | 79 | 215 | 29 |
Chase Budinger | Guard | 79 | 218 | 25 |
Kevin Martin | Guard | 79 | 185 | 30 |
Evan Fournier | Guard | 79 | 206 | 20 |
(省略了 495 行)
這裡是球員身高的直方圖。
nba13.select('Height').hist(bins=np.arange(68, 88, 1))
NBA 球員身材高大並不奇怪! 他們的平均身高只有 79 英寸(6’7”),比美國男子的平均身高高出 10 英寸。
mean_height = np.mean(nba13.column('Height'))
mean_height
79.065346534653472
球員的身高距離平均有多遠? 這通過身高的 SD 來測量,大約是 3.45 英寸。
sd_height = np.std(nba13.column('Height'))
sd_height
3.4505971830275546
俄克拉荷馬雷霆的高個中鋒雜湊姆·塔位元(Hasheem Thabeet)是最高的球員,身高 87 英寸。
nba13.sort('Height', descending=True).show(3)
Name | Position | Height | Weight | Age in 2013 |
---|---|---|---|---|
Hasheem Thabeet | Center | 87 | 263 | 26 |
Roy Hibbert | Center | 86 | 278 | 26 |
Tyson Chandler | Center | 85 | 235 | 30 |
(省略了 502 行)
Thabeet 比平均身高高了大約 8 英寸。
87 - mean_height
7.9346534653465284
這個就是距離均值的偏差,大約是 2.3 乘標準差。
(87 - mean_height)/sd_height
2.2995015194397923
換句話說,最高球員的身高比均值高了 2.3 個 SD。
以賽亞·托馬斯(Isaiah Thomas)身高 69 英寸,是 2013 年 NBA 最矮的球員之一。他的身高比均值低了 2.9 個 SD。
nba13.sort('Height').show(3)
Name | Position | Height | Weight | Age in 2013 |
---|---|---|---|---|
Isaiah Thomas | Guard | 69 | 185 | 24 |
Nate Robinson | Guard | 69 | 180 | 29 |
John Lucas III | Guard | 71 | 157 | 30 |
(省略了 502 行)
(69 - mean_height)/sd_height
-2.9169868288775844
我們觀察到,最高和最矮的球員都距離平均身高只有幾個標準差。 這是例子,說明了為什麼 SD 是延展度的有效度量。無論直方圖的形狀如何,平均值和 SD 一起告訴你很多東西,關於直方圖在數軸上的位置。
使用 SD 度量延展度的最主要原因
非正式宣告:在所有的數值資料集中,大部分條目都在“均值上下幾個標準差”的範圍內。
現在,先剋制住自己,不要了解“散”,“少”等模糊詞的確切含義。 我們將在本節的後面進行詳細說明。 我們僅僅在更多示例的背景下研究這個陳述。
我們已經看到,所有 NBA 球員的身高都在“均值上下幾個標準差”的範圍內。
那年齡呢? 這裡是分佈的直方圖,以及年齡的平均值和標準差。
nba13.select('Age in 2013').hist(bins=np.arange(15, 45, 1))
ages = nba13.column('Age in 2013')
mean_age = np.mean(ages)
sd_age = np.std(ages)
mean_age, sd_age
(26.19009900990099, 4.3212004417203067)
平均年齡只有 26 歲,標準差大約是 4.3 歲。
年齡與均值相差多遠? 就像我們對身高所做的那樣,讓我們看看兩個年齡的極端值。
Juwan Howard 是年齡最大的球員 40 歲。
nba13.sort('Age in 2013', descending=True).show(3)
Name | Position | Height | Weight | Age in 2013 |
---|---|---|---|---|
Juwan Howard | Forward | 81 | 250 | 40 |
Marcus Camby | Center | 83 | 235 | 39 |
Derek Fisher | Guard | 73 | 210 | 39 |
(省略了 502 行)
Howard 的年齡比均值高了 3.2 個標準差。
(40 - mean_age)/sd_age
3.1958482778922357
年齡最小的是 15 歲的 Jarvis Varnado,他當年在邁阿密熱火隊(Miami Heat)奪得了 NBA 總冠軍。 他的年齡比均值低了 2.6 個標準差。
nba13.sort('Age in 2013').show(3)
Name | Position | Height | Weight | Age in 2013 |
---|---|---|---|---|
Jarvis Varnado | Forward | 81 | 230 | 15 |
Giannis Antetokounmpo | Forward | 81 | 205 | 18 |
Sergey Karasev | Guard | 79 | 197 | 19 |
(省略了 502 行)
(15 - mean_age)/sd_age
-2.5895811038670811
對於高度和年齡,我們觀察到的東西非常普遍。 對於所有列表,大部分條目都不超過平均值 2 或 3 個標準差。
切比雪夫邊界
俄羅斯數學家切比雪夫(Pafnuty Chebychev,1821-1894)證明了這個結論,使我們的粗略陳述更加精確。
對於所有列表和所有數字z
,“均值上下z
個標準差”範圍內的條目比例至少為 。
值得注意的是,結果給出了一個界限,而不是一個確切的數值或近似值。
是什麼讓結果變得強大,對於所有列表來說都是這樣呢 - 所有的分佈,無論多麼不規則?
具體來說,對於每個列表:
在“均值上下兩個標準差”範圍內的比例至少是1 - 1/4 = 0.75
在“均值上下三個標準差”範圍內的比例至少為1 - 1/9 ≈ 0.89
在“均值上下 4.5 個標準差”範圍內的比例至少為1 - 1/4.5^2 ≈ 0.95
如上所述,切比雪夫的結果給出了一個下界,而不是一個確切的答案或近似值。例如,“均值上下兩個標準差”範圍內的條目百分比可能比 75% 大得多。但它不會更小。
標準單位
在上面的計算中,z
的數量是標準單位,高於平均水平的標準差的數量。
標準單位的某些值是負值,對應於低於均值的原始值。 標準單位的其他是正值。 但是無論列表的分佈如何,切比雪夫邊界意味著標準單位一般在(-5, 5)
範圍內。
要將一個值轉換為標準單位,首先要求出距離平均值有多遠,然後將該偏差與標準差比較。
我們將會看到,標準單位經常用於資料分析。 所以定義一個函式,將數值的陣列轉換為標準單位是很有用的。
def standard_units(numbers_array):
"Convert any array of numbers to standard units."
return (numbers_array - np.mean(numbers_array))/np.std(numbers_array)
示例
我們在前面的章節中看到,united
表包含了Delay
列,包括 2015 年夏天聯合航空數千航班的起飛延誤時間,以分鐘為單位。我們將建立一個名為Delay (Standard Units)
的新列, 通過將函式standard_units
應用於Delay
列。 這使我們可以看到所有延誤時間(分鐘)以及標準單位的相應值。
united = Table.read_table('united_summer2015.csv')
united = united.with_column(
'Delay (Standard Units)', standard_units(united.column('Delay'))
)
united
Date | Flight Number | Destination | Delay | Delay (Standard Units) |
---|---|---|---|---|
6/1/15 | 73 | HNL | 257 | 6.08766 |
6/1/15 | 217 | EWR | 28 | 0.287279 |
6/1/15 | 237 | STL | -3 | -0.497924 |
6/1/15 | 250 | SAN | 0 | -0.421937 |
6/1/15 | 267 | PHL | 64 | 1.19913 |
6/1/15 | 273 | SEA | -6 | -0.573912 |
6/1/15 | 278 | SEA | -8 | -0.62457 |
6/1/15 | 292 | EWR | 12 | -0.117987 |
6/1/15 | 300 | HNL | 20 | 0.0846461 |
6/1/15 | 317 | IND | -10 | -0.675228 |
(省略了 13815 行)
我們看到的標準單位與我們根據切比雪夫邊界的預期一致。 大部分都是相當小的值;只有一個大於 6。
但是,當我們將延誤時間從高到低排序時,會發生一些驚人的事情。 我們看到的標準單位是非常高的!
united.sort('Delay', descending=True)
Date | Flight Number | Destination | Delay | Delay (Standard Units) |
---|---|---|---|---|
6/21/15 | 1964 | SEA | 580 | 14.269 |
6/22/15 | 300 | HNL | 537 | 13.1798 |
6/21/15 | 1149 | IAD | 508 | 12.4453 |
6/20/15 | 353 | ORD | 505 | 12.3693 |
8/23/15 | 1589 | ORD | 458 | 11.1788 |
7/23/15 | 1960 | LAX | 438 | 10.6722 |
6/23/15 | 1606 | ORD | 430 | 10.4696 |
6/4/15 | 1743 | LAX | 408 | 9.91236 |
6/17/15 | 1122 | HNL | 405 | 9.83637 |
7/27/15 | 572 | ORD | 385 | 9.32979 |
(省略了 13815 行)
這表明,資料有可能高於均值很多個標準差(對於延誤了 10 個小時的航班)。 延誤的最高值超過 14 個標準單位。
然而,這些極端值的比例很小,切比雪夫邊界仍然是真的。 例如,讓我們計算在“均值上下三個標準差”範圍內的延誤百分比。 這與標準單位在(-3, 3)
範圍內的時間百分比相同。 這大約是 98%,計算在下面,和切比雪夫邊界“至少 89%”一致。
within_3_sd = united.where('Delay (Standard Units)', are.between(-3, 3))
within_3_sd.num_rows/united.num_rows
0.9790235081374322
延誤時間的直方圖如下所示,橫軸以標準單位表示。 從上表中可以看出,右邊的尾巴一直延伸到z = 14.27
個標準單位(580 分鐘)。 在z = -3
到z = 3
範圍外的直方圖面積大約是 2%,加起來非常小,在直方圖中幾乎不可見。
united.hist('Delay (Standard Units)', bins=np.arange(-5, 15.5, 0.5))
plots.xticks(np.arange(-6, 17, 3));
標準差和正態曲線
我們知道均值是直方圖的平衡點。 標準差與平均值不同,通常不容易通過檢視直方圖來識別。
然而,有一種分佈形狀,它的標準差與平均值幾乎一樣清晰可辨。 這是鐘形分佈。 本節將檢視該形狀,因為它經常出現在概率直方圖中,也出現在一些資料的直方圖中。
資料的大致鐘形的直方圖
讓我們看看母親的身高分佈,它們在我們熟悉的 1174 對母親和新生兒的樣本中。母親的平均身高為 64 英寸,SD 為 2.5 英寸。 與籃球運動員的身高不同,母親身高關於鐘形曲線中的平均值對稱分佈。
baby = Table.read_table('baby.csv')
heights = baby.column('Maternal Height')
mean_height = np.round(np.mean(heights), 1)
mean_height
64.0
sd_height = np.round(np.std(heights), 1)
sd_height
2.5
baby.hist('Maternal Height', bins=np.arange(55.5, 72.5, 1), unit='inch')
positions = np.arange(-3, 3.1, 1)*sd_height + mean_height
plots.xticks(positions);
上面單元格中的最後兩行程式碼更改了橫軸的標籤。 現在,對於z=0, ±1, ±2, ±3
,標籤對應於“標籤上下z
個標準差”。 由於分佈的形狀,“中心”具有明確的含義,在 64 處清晰可見。
如何定位鐘形曲線上的 SD
要看 SD 如何與曲線相關,請從曲線頂部開始,向右看。 請注意,曲線有一個地方,從看起來像“倒扣的杯子”,變為“朝右的杯子”。 在形式上,曲線有一個拐點。 這個點高於均值一個 SD。 這是z = 1
的點,即“均值加一個標準差”,為 66.5 英寸。
在均值的左邊也對稱,拐點在z = -1
處,也就是“均值減一個標準差”,為 61.5 英寸。
一般來說,對於鐘形分佈,SD 是均值和任一側的拐點之間的距離。
標準正態曲線
除了軸上的標籤,我們所看到的所有鐘形直方圖,看起來基本相同。 的確,通過適當地重新標記座標軸,從所有這些曲線中,實際上只能繪製一條曲線。
為了繪製這條基本曲線,我們將使用標準單位,我們可以將每個列表轉換成它。所得到的曲線因此被稱為標準正態曲線。
標準正態曲線的方程令人印象深刻。 但是現在,最好把它看作是變數直方圖的平滑輪廓,變數以標準單位測量並具有鐘形分佈。
與往常一樣,當你檢查新的直方圖時,首先檢視橫軸。在標準正態曲線的橫軸上,這些值是標準單位。
這裡是曲線的一些屬性。有些是通過觀察顯而易見的,有些則需要大量的數學才能建立起來。
曲線下面的總面積是1.所以你可以把它看作是繪製為密度標度的直方圖。
曲線是對稱的。所以如果一個變數具有這個分佈,它的平均值和中位數都是 0。
曲線的拐點在 -1 和 +1 處。
如果一個變數具有這種分佈,那麼它的 SD 是 1。正態曲線是 SD 清晰可辨的極少數分佈之一。
由於我們將曲線視為平滑的直方圖,因此我們希望用曲線下方的面積來表示資料總量的比例。
平滑曲線下的面積通常是通過微積分來計算的,使用一種稱為積分的方法。然而,一個數學的事實是,標準的正態曲線不能通過任何微積分方式來積分。
因此,曲線下方的面積必須近似。這就是幾乎所有的統計教科書,都帶有曲線下方的面積的原因。這也是所有統計系統,包括 Python 模組在內,都包含提供這些面積的優秀近似的方法的原因。
from scipy import stats
標準正態的累積分佈函式(CDF)
用於求出正態曲線下的面積的基本函式是stats.norm.cdf
。 它接受一個數值引數,並返回曲線下,該數值的左側的所有面積。 它在形式上被稱為標準正態曲線的“累積分佈函式”。 在口語裡縮寫為 CDF。
讓我們使用這個函式來求出標準正態曲線下,z=1
左側的面積。
陰影區域的數值可以通過呼叫stats.norm.cdf
來求出。
stats.norm.cdf(1)
0.84134474606854293
這大概是 84%。 現在我們可以使用曲線的對稱性,以及曲線下面的總面積為 1 事實,來求出其他面積。
z = 1
右側的面積大概是100% - 84% = 16%
。
1 - stats.norm.cdf(1)
0.15865525393145707
z = -1
和z = 1
之間的面積可以用幾種不同的方式來計算。 它是下面的曲線下方的金色區域。
例如,我們可以將面積計算為“100% -
兩個相等的尾巴”,結果大致是100% - 2X16% = 68%
。
或者我們可以注意到,z = 1
和z = -1
之間的區域等於z = 1
左邊的所有區域,減去z = -1
左邊的所有區域。
stats.norm.cdf(1) - stats.norm.cdf(-1)
0.68268949213708585
通過類似的計算,我們看到-2
和2
之間的區域大約是 95%。
stats.norm.cdf(2) - stats.norm.cdf(-2)
0.95449973610364158
換句話說,如果一個直方圖大致是鐘形,那麼在“均值上下兩個標準差”範圍內的資料比例大約是 95%。
這比切比雪夫的下界 75% 還要多。 切比雪夫邊界較弱,因為它必須適用於所有的分佈。 如果我們知道一個分佈是正態的,那麼我們就有很好的比例近似,而不僅僅是邊界。
下表比較了我們對所有分佈和正態分佈的瞭解。 請注意,當z = 1
時,切比雪夫的邊界是正確的,但沒有啟發性。
Percent in Range | All Distributions: Bound | Normal Distribution: Approximation |
---|---|---|
均值上下一個標準差 | 至少 0% | 約 68% |
均值上下兩個標準差 | 至少 75% | 約 95% |
均值上下三個標準差 | 至少 88.888…% | 約 99.73% |
中心極限定律
我們在本課程中看到的很少資料直方圖是鐘形的。 當我們遇到一個鐘形的分佈時,它幾乎總是一個基於隨機樣本的統計量的經驗直方圖。
下面的例子顯示了兩個非常不同的情況,其中在這樣的直方圖中出現了近似的鐘形。
輪盤賭的淨收益
在前面的章節中,如果我們在輪盤的不同輪次上重複下相同的賭注,那麼我們所花費的總金額的粗略形狀就會成為鐘形。
wheel
Color | |
---|---|
0 | green |
00 | green |
1 | red |
2 | black |
3 | red |
4 | black |
5 | red |
6 | black |
7 | red |
8 | black |
(省略了 28 行)
回想一下,紅色的下注返回相等的錢,1 比 1。我們定義的函式red_winnings
返回對紅色下注一美元的淨收益。具體來說,該函式將顏色作為引數,如果顏色為紅色,則返回 1。 對於所有其他顏色,它返回 -1。
def red_winnings(color):
if color == 'red':
return 1
else:
return -1
red
表展示了紅色情況下,每個口袋的獎金。
red = wheel.with_column(
'Winnings: Red', wheel.apply(red_winnings, 'Color')
)
red
Color | Winnings: Red | |
---|---|---|
0 | green | -1 |
00 | green | -1 |
1 | red | 1 |
2 | black | -1 |
3 | red | 1 |
4 | black | -1 |
5 | red | 1 |
6 | black | -1 |
7 | red | 1 |
8 | black | -1 |
(省略了 28 行)
你在賭注上的淨收益Winnings: Red
的隨機抽樣。 有 1/18 的機率賺一美元,20/38 的機率損失一美元。 這個概率分佈顯示在下面的直方圖中。
red.select('Winnings: Red').hist(bins=np.arange(-1.5, 1.6, 1))
現在假設你多次對紅色下注。 你的淨收益將是來自上述分佈的,多個帶放回隨機抽樣的總和。
這將需要一些數學,來列出淨收益的所有可能值,以及所有的記錄。 我們不會那樣做;相反,我們將通過模擬來逼近概率分佈,就像我們在這個過程中一直做的那樣。
下面的程式碼模擬你的淨收益,如果你在輪盤賭的 400 個不同的輪次中,對紅色下注一美元。
num_bets = 400
repetitions = 10000
net_gain_red = make_array()
for i in np.arange(repetitions):
spins = red.sample(num_bets)
new_net_gain_red = spins.column('Winnings: Red').sum()
net_gain_red = np.append(net_gain_red, new_net_gain_red)
results = Table().with_column(
'Net Gain on Red', net_gain_red
)
results.hist(bins=np.arange(-80, 50, 6))
這是一個大致鐘形的直方圖,即使我們正在繪製的分佈並不是鐘形。
中心。分佈集中在-$20
附近。 要知道為什麼,請注意,你的獎金在 18/38 左右的下注中為 1 美元,剩下的 20/38 則為負一美元。 所以每個一美元賭注的平均獎金大概是 -5.26 美分:
average_per_bet = 1*(18/38) + (-1)*(20/38)
average_per_bet
-0.05263157894736842
因此,在 400 次下注中,你預計淨收益大約是 21 美元。
400 * average_per_bet
-21.052631578947366
為了確認,我們可以計算 10,000 次模擬淨收益的平均值:
np.mean(results.column(0))
-20.8992
延展。讓你的眼睛沿著曲線從中心開始,注意到拐點在 0 附近。在鐘形曲線上,SD 是中心到拐點的距離。 中心大概是 -20 美元,這意味著分佈的標準差大約是 20 美元。
在下一節中,我們將看到 20 美元是怎麼來的。 現在,讓我們通過簡單計算 10,000 個模擬淨收益的 SD 來證實我們的觀察:
np.std(results.column(0))
20.043159415621083
總結。 400 次下注的淨收益是每個單獨賭注的 400 個獎金的總和。 這個總和的概率分佈近似正態,我們可以近似它的均值和標準差。
平均航班延誤
united
表包含 2015 年夏季舊金山機場出發的 13,825 個聯合航空國內航班的出發延誤資料。正如我們以前所見,延誤的分佈的右側有著很長的尾巴。
united = Table.read_table('united_summer2015.csv')
united.select('Delay').hist(bins=np.arange(-20, 300, 10))
平均延誤約為 16.6 分鐘,SD 約為 39.5 分鐘。 注意 SD 與平均值相比有多大。 但是右側的較大偏差會產生影響,儘管它們在資料中佔很小的比例。
mean_delay = np.mean(united.column('Delay'))
sd_delay = np.std(united.column('Delay'))
mean_delay, sd_delay
(16.658155515370705, 39.480199851609314)
現在假設我們隨機抽取了 400 個延誤。 如果你願意,你可以無放回抽樣,但是結果與放回抽樣非常相似。 如果你從 13,825 箇中無放回地抽取幾百個,那麼每當你抽出一個值時,幾乎不會改變總體。
在樣本中,平均延誤會是多少? 我們預計在 16 或 17 左右,因為這是總體的均值。 但可能會有些偏差。 讓我們看看我們通過抽樣得到了什麼。 我們將處理delay
表,僅包含延遲的列。
delay = united.select('Delay')
np.mean(delay.sample(400).column('Delay'))
16.68
樣本均值根據樣本的出現方式而變化,因此我們將重複模擬抽樣過程,並繪製樣本均值的經驗直方圖。 這是樣本均值的概率直方圖的近似值。
sample_size = 400
repetitions = 10000
means = make_array()
for i in np.arange(repetitions):
sample = delay.sample(sample_size)
new_mean = np.mean(sample.column('Delay'))
means = np.append(means, new_mean)
results = Table().with_column(
'Sample Mean', means
)
results.hist(bins=np.arange(10, 25, 0.5))
即使我們從非常偏斜的分佈抽樣,我們再次看到了大致的鐘形。 正如我們所期望的那樣,這個鐘形的中心在 16 到 17 之間。
中心極限定律
鐘形出現在這樣的環境中的原因,是一個概率理論的顯著結果,稱為中心極限定律。
中心極限定理表明,無論用於抽取樣本的總體分佈如何,帶放回抽取的大型隨機樣本的總和或均值的概率分佈大致是正態的。
我們在研究切比雪夫邊界時指出,不管總體分佈如何,結果都可以應用於隨機樣本,這非常強大,因為在資料科學中,我們很少知道總體的分佈。
如果我們有一個大型隨機樣本,那麼中心極限定理就能夠在總體知識很少的情況下進行推理。 這就是它是統計推斷領域的核心的原因。
紫色的花的分佈
回憶孟德爾的豌豆植物的花朵顏色的概率模型。 該模型表明,植物的花朵顏色類似於來自{紫色,紫色,紫色,白色}
的帶放回隨機抽樣。
在植物的大型樣本中,紫色的花約有多少比例? 我們預計答案約為 0.75,模型中紫色的比例。 而且,由於比例是均值,中心極限定理表明,紫色的樣本比例的分佈大致是正態的。
我們可以通過模擬來確認。 我們來模擬 200 株植物樣本中紫色的花的比例。
colors = make_array('Purple', 'Purple', 'Purple', 'White')
model = Table().with_column('Color', colors)
model
Color |
---|
Purple |
Purple |
Purple |
White |
props = make_array()
num_plants = 200
repetitions = 10000
for i in np.arange(repetitions):
sample = model.sample(num_plants)
new_prop = np.count_nonzero(sample.column('Color') == 'Purple')/num_plants
props = np.append(props, new_prop)
results = Table().with_column('Sample Proportion: 200', props)
results.hist(bins=np.arange(0.65, 0.85, 0.01))
正如你所期望的那樣,中央極限定理預測了,正態曲線再次集中於 0.75 左右。
如果我們增加樣本量,這個分佈如何變化? 讓我們再次執行程式碼,樣本量為 800 ,並將模擬結果收集在同一個表中,我們在裡面收集了樣本量為 200 的模擬結果。我們使重複次數與之前相同,以便兩列具有相同的長度。
props2 = make_array()
num_plants = 800
for i in np.arange(repetitions):
sample = model.sample(num_plants)
new_prop = np.count_nonzero(sample.column('Color') == 'Purple')/num_plants
props2 = np.append(props2, new_prop)
results = results.with_column('Sample Proportion: 800', props2)
results.hist(bins=np.arange(0.65, 0.85, 0.01))
兩個分佈都大致是正態,但一個比另一個更窄。 樣本量為 800 的比例,比樣本量為 200 的比例更緊密地聚集在 0.75 左右。增加樣本量可以減少樣本比例的可變性。
這應該不會令人驚訝。 我們多次產生了這樣的直覺,更大的樣本量通常會降低統計量的可變性。 然而,在樣本均值的案例中,我們可以量化樣本量和可變性之間的關係。
樣本量究竟是如何影響樣本均值或比例的可變性呢? 這是我們將在下一節中討論的問題。
樣本均值的可變性
根據中心極限定理,大型隨機樣本的均值的概率分佈是大致正態的。 鐘形曲線以總體平均值為中心。 一些樣本均值較高,有些則較低,但距離總體均值的偏差在兩邊大致對稱,正如我們已經看到的那樣。 形式上,概率論表明樣本均值是總體均值的無偏估計。
在我們的模擬中,我們也注意到較大樣本的均值,相對較小樣本的平均值更傾向於緊密聚集於總體均值附近。 在本節中,我們將量化樣本均值的可變性,並建立可變性和樣本量之間的關係。
我們從航班延誤表開始。 平均延誤時間約為 16.7 分鐘,延誤分佈右傾。
united = Table.read_table('united_summer2015.csv')
delay = united.select('Delay')
pop_mean = np.mean(delay.column('Delay'))
pop_mean
16.658155515370705
現在我們來隨機抽樣,來檢視樣本均值的概率分佈。 像往常一樣,我們將使用模擬來得到這種分佈的經驗近似。
我們將定義一個函式simulate_sample_mean
來實現,因為我們將在稍後改變樣本量。 引數是表的名稱,包含變數的列標籤,樣本量和模擬次數。
"""Empirical distribution of random sample means"""
def simulate_sample_mean(table, label, sample_size, repetitions):
means = make_array()
for i in range(repetitions):
new_sample = table.sample(sample_size)
new_sample_mean = np.mean(new_sample.column(label))
means = np.append(means, new_sample_mean)
sample_means = Table().with_column('Sample Means', means)
# Display empirical histogram and print all relevant quantities
sample_means.hist(bins=20)
plots.xlabel('Sample Means')
plots.title('Sample Size ' + str(sample_size))
print("Sample size: ", sample_size)
print("Population mean:", np.mean(table.column(label)))
print("Average of sample means: ", np.mean(means))
print("Population SD:", np.std(table.column(label)))
print("SD of sample means:", np.std(means))
讓我們模擬 100 個延誤的隨機樣本的均值,然後是 400 個,最後是 625 個延誤的均值。 我們將對這些過程中的每一個執行 10,000 次重複。 xlim
和ylim
在所有圖表中設定一致的座標軸,以便比較。 你可以忽略每個單元格中的這兩行程式碼。
simulate_sample_mean(delay, 'Delay', 100, 10000)
plots.xlim(5, 35)
plots.ylim(0, 0.25);
Sample size: 100
Population mean: 16.6581555154
Average of sample means: 16.662059
Population SD: 39.4801998516
SD of sample means: 3.90507237968
相關推薦
計算與推斷思維 十二、為什麼均值重要
十二、為什麼均值重要 在這個課程中,我們已經研究了幾個不同的統計量,包括總編譯距離,最大值,中位數和平均值。在關於隨機性的明確假設下,我們繪製了所有這些統計量的經驗分佈。有些統計量,比如最大和總變異距離,分佈明顯偏向一個方向。但是,無論研究物件如何,樣本均
計算與推斷思維 十四、迴歸的推斷
十四、迴歸的推斷 到目前為止,我們對變數之間關係的分析純粹是描述性的。我們知道如何找到穿過散點圖的最佳直線來繪製。在所有直線中它的估計的均方誤差最小,從這個角度來看,這條線是最好的。 但是,如果我們的資料是更大總體的樣本呢?如果我們在樣本中發現了兩個變數
計算與推斷思維 十三、預測
十三、預測 資料科學的一個重要方面,是發現數據可以告訴我們什麼未來的事情。氣候和汙染的資料說了幾十年內溫度的什麼事情?根據一個人的網際網路個人資訊,哪些網站可能會讓他感興趣?病人的病史如何用來判斷他或她對治療的反應? 為了回答這樣的問題,資料科學家已經開
計算與推斷思維 七、函式和表格
七、函式和表格 通過使用 Python 中已有的函式,我們正在建立一個使用的技術清單,用於識別資料集中的規律和主題。 現在我們將探索Python程式語言的核心功能:函式定義。 我們在本書中已經廣泛使用了函式,但從未定義過我們自己的函式。定義一個函式的目的
計算與推斷思維 翻譯完成
面向(未來的)資料科學家的入門課來咯~ 前一半講 Python 程式設計,後一半講統計學基本概念並用 Python 模擬。 電子書還沒生成好,由於存在 SVG 圖片,工具會報錯,線上和本地都沒辦法。 贊助我 KivyCN 學習資源
二十二、Linux 進程與信號---進程創建(續)
裏的 close %s 關閉 lee else wro 執行 靜態 22.2 父子進程操作文件 文件操作由兩種模式: IO 系統調用操作文件 標準C IO 操作文件 看代碼: 1 #include <unistd.h> 2 #include <
[Abp 源碼分析]十二、多租戶體系與權限驗證
表達式 如何實現 進入 urn tty token asp.net hang 都是 0.簡介 承接上篇文章我們會在這篇文章詳細解說一下 Abp 是如何結合 IPermissionChecker 與 IFeatureChecker 來實現一個完整的多租戶系統的權限校驗的。 1
《激蕩三十年》十二、中外合資——上海市長與上海大眾
差距 第一個 fff 離開 初步 談判 人在 說了 有趣 在鄧小平南巡之後,中國經濟發展再度揚帆起航。但是,1993年的中國已經不再是一個傳統意義上的計劃經濟國家。在民間,私營經濟快速發展,“投機倒把”成為一個歷史名詞,鄉鎮經濟如火如荼,資本市場作為現代化市場經濟的必要組
十二、JVM(HotSpot)執行緒安全與鎖優化----終結篇
注:本博文主要是基於JDK1.7會適當加入1.8內容。 執行緒安全:當多個執行緒訪問一個物件時,如果不用考慮這些執行緒在執行環境下的排程和交替執行,也不需要進行額外的同步,或者在呼叫方進行任何其他的協調操作,呼叫這個物件的行為可以獲取正確的結果,那這個物件就是執行緒安全的。 1、Ja
四十二、python學習之Django框架(二):類檢視與中介軟體
五、類檢視: 1.類檢視引入: 以函式的方式定義的檢視成為函式檢視,即我們常說的檢視函式. 但是, 檢視函式遭遇不同的請求方法(如get和post),並且需要做不同的處理時,我們如果在一個函式中編寫不同的業務邏輯,程式碼可讀性和複用性都不好. 例如:
十二、C#入門基礎12(泛型,檔案與資料流)
一、泛型 什麼是泛型? 泛型是用於處理演算法,資料結構的一種程式設計方法。泛型的目標是採用廣 泛適用和可互動性的形式來表示演算法和資料結構,以似它們能夠直接用 於軟體構造。泛型類,結構,介面,和方法可以根據它們儲存和操作的 資料型別來進行引數化。 泛型能在編譯時提供強大的型別檢查,減少資
十二、C#入門基礎(泛型,檔案與資料流)
一、泛型 什麼是泛型? 泛型是用於處理演算法,資料結構的一種程式設計方法。泛型的目標是採用廣 泛適用和可互動性的形式來表示演算法和資料結構,以似它們能夠直接用 於軟體構造。泛型類,結構,介面,和方法可以根據它們儲存和操作的 資料型別來進行引數化。 泛型能在編譯時
三十二、Linux 程序與訊號——不可靠訊號
32.1 不可靠訊號問題 發生訊號時關聯動作被重置為預設設定 訊號可能丟失 程式片段 在進入 sig_int 與再次呼叫 signal 之間發生的 SIGINT 訊號將不會捕獲 導致程序終止 &nbs
第十二、Java的成員變數與區域性變數的區別
成員變數與區域性變數的區別: 0、定義的位置上區別: 成員變數: 定義在方法之外,類之內的變數 區域性變數: 定義在方法之內的變數 1、應用範圍的區別 成員變數在整個類內都有效 區域性變數只在其宣告的方法內有效 2、生命
第十二、十三周作業【Linux微職位】
馬哥教育一、結合圖形描述LVS的工作原理;lvs-nat模型主要是修改目標IP地址為挑選出新的RS的IP地址。即請求進入負載均衡器時做DNAT,響應出負載均衡器時做SNAT。1.當用戶請求到達Director Server,此時請求的數據報文會先到達內核的PREROUTING鏈,此時報文的源IP是CIP,目標
十二、十三天總結筆記
異常、io、file一:File 1.1 File:文件和目錄(文件夾)路徑名的抽象表示形式。 1.2 File的構造方法: File(String pathname):把一個路徑名稱封裝成File對象 File(String p
雲計算時代應用設計十二要素
uil 推薦 ras 相似性 back size ont imp staging 雲計算時代應用設計十二要素 在雲計算時代。應用的整個生命周期將在數據中心裏度過。這跟傳統軟件模式極大不同。 雲應用實際上意味著:代碼 + 配置 + 執行時環境。 什麽樣的軟件才是
十二、samba服務器配置和管理
samba、文件共享12.1、Samba簡介 Linux和Windows是兩種無論在風格還是在技術上都完全不同的操作系統,它們是兩個對立的陣形。各自都擁有自己的用戶群和市場。但是,要實現這兩種系統之間的資源共享,則需要使用Samba。Samba采用的是C/S工作模式,通過它可以將一臺Linux系統主機配置為
二十二、英文字母和數字不會換行如何處理
英文 一次 bre word-wrap style 英文字母 ron wrap -a 一次偶然的項目中,遇到一個奇怪的問題,為什麽我都寫了換行的css怎麽還是沒有換行?請教宋老師之後才知道“英文字母和數字是不會換行的”,那如何處理呢? 處理辦法,在所在類上增加下面css:
十二、MySQL用戶管理
mysql用戶管理 MySQL是一個多用戶數據庫,具有功能強大的訪問控制系統,可以為不同用戶指定允許的權限。MySQL用戶可以分為普通用戶和root用戶。root用戶是超級管理員,擁有所有權限,普通用戶只擁有被授予的各種權限。12.1、權限表MySQL服務器通過權限來控制用戶對數據庫的訪問,權限表存放在MyS