計算與推斷思維 十一几蜻、估計

十一喇潘、估計

原文:Estimation

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

自豪地采用谷歌翻譯

在前一章中,我們開始開發(fā)推斷思維的方法梭稚。特別是颖低,我們學(xué)會了如何使用數(shù)據(jù),在世界的兩個假設(shè)之間做決策弧烤。但是我們通常只想知道忱屑,某件事情有多大。

例如扼褪,在前面的章節(jié)中想幻,我們調(diào)查了敵人可能擁有的戰(zhàn)機(jī)數(shù)量。在選舉年话浇,我們可能想知道有多少選民贊成特定候選人脏毯。為了評估目前的經(jīng)濟(jì)狀況,我們可能會對美國家庭年收入的中位數(shù)感興趣幔崖。

在本章中食店,我們將開發(fā)一種估計未知參數(shù)的方法。請記住赏寇,參數(shù)是總體相關(guān)的數(shù)值吉嫩。

要弄清參數(shù)的值,我們需要數(shù)據(jù)嗅定。如果我們有整個人口的相關(guān)數(shù)據(jù)自娩,我們可以簡單地計算參數(shù)。

但是渠退,如果人口非常龐大(例如忙迁,如果它由美國的所有家庭組成)脐彩,那么收集整個人口的數(shù)據(jù)可能過于昂貴和耗時。在這種情況下姊扔,數(shù)據(jù)科學(xué)家依賴從人口中隨機(jī)抽樣惠奸。

這導(dǎo)致了一個推斷問題:如何根據(jù)隨機(jī)樣本中的數(shù)據(jù),對未知參數(shù)做出正確的結(jié)論恰梢?我們將用推斷思維來回答這個問題佛南。

基于隨機(jī)樣本的統(tǒng)計量可能是總體中未知參數(shù)的合理估計。例如嵌言,你可能希望使用家庭樣本的年收入中位數(shù)嗅回,來估計美國所有家庭的年收入中位數(shù)。

但任何統(tǒng)計量的值都取決于樣本呀页,樣本基于隨機(jī)抽取妈拌。所以每次數(shù)據(jù)科學(xué)家得到了一個基于隨機(jī)樣本的估計,他們都面臨一個問題:

“如果樣本是不同的蓬蝶,這個估計有多大的不同呢?”

在本章中猜惋,你將學(xué)習(xí)一種回答這個問題的方法丸氛。答案將為你提供工具來估算數(shù)值參數(shù),并量化估算中的誤差量著摔。

我們將以百分位數(shù)開始缓窜。最有名的百分位數(shù)是中位數(shù),通常用于收入數(shù)據(jù)的摘要谍咆。在我們即將開發(fā)的估計方法中禾锤,其他百分位數(shù)也是非常重要的。所以我們一開始要仔細(xì)定義百分位數(shù)摹察。

百分位數(shù)

數(shù)值數(shù)據(jù)可以按照升序或降序排序彭则。因此吐葵,數(shù)值數(shù)據(jù)集的值具有等級順序。百分位數(shù)是特定等級的值。

例如北戏,如果你的考試成績在第 95 個百分位,一個常見的解釋是只有 5% 的成績高于你的成績雄卷。中位數(shù)是第 50 個百分位熄驼;通常假定數(shù)據(jù)集中 50% 的值高于中值。

但是劝赔,給予百分位一個精確定義誓焦,適用于所有等級和所有列表,需要一些謹(jǐn)慎着帽。為了明白為什么杂伟,考慮一個極端的例子移层,一個班級的所有學(xué)生在考試中得分為 75 分。那么 75 是中位數(shù)的自然候選稿壁,但是 50% 的分?jǐn)?shù)高于 75 并不是真的幽钢。另外,75 同樣是第 95 個或第 25 個百分位數(shù)傅是,或任何其他百分位數(shù)的自然候選匪燕。在定義百分位數(shù)時,必須將重復(fù) - 也就是相同的數(shù)據(jù)值 - 考慮在內(nèi)喧笔。

當(dāng)相關(guān)的索引不明確時帽驯,你還必須小心列表到底有多長。例如书闸,10 個值的集合的第 87 個百分位數(shù)是多少尼变?有序集合的第 8 個值,還是第 9 個浆劲,還是其中的某個位置嫌术?

數(shù)值的例子

在給出所有百分位數(shù)的一般定義之前,我們將把數(shù)值集合的第80個百分點定義為集合中的(一定條件的)最小值牌借,它至少與所有值的 80% 一樣大度气。

例如,考慮非洲膨报,南極洲磷籍,亞洲,北美洲和南美洲五大洲的大小现柠,四舍五入到最接近的百萬平方英里院领。

sizes = make_array(12, 17, 6, 9, 7)

第 80 個百分位數(shù)是(一定條件的)最小值,至少和 80% 的值一樣大够吩,也就是五個元素的五分之四比然。等于 12:

np.sort(sizes)
array([ 6,  7,  9, 12, 17])

第 80 個百分位數(shù)是列表中的一個值,也就是 12废恋。你可以看到谈秫,80% 的值小于等于它,并且它是列表中滿足這個條件的最小值鱼鼓。

與之類似拟烫,第 70 個百分位數(shù)是該集合中(一定條件的)最小值,至少與 70% 的元素一樣大迄本。 現(xiàn)在 5 個元素中的 70% 是“3.5 個元素”硕淑,所以第 70 個百分位數(shù)是列表中的第 4 個元素。 它是 12,與這些數(shù)據(jù)的第 80 百分位數(shù)相同置媳。

percentile函數(shù)

percentile函數(shù)接受兩個參數(shù):一個 0 到 100 之間的等級于樟,和一個數(shù)組。它返回數(shù)組相應(yīng)的百分位數(shù)拇囊。

percentile(70, sizes)
12

一般定義

p為 0 到 100 之間的數(shù)字迂曲。集合的第p個百分位數(shù)是集合中的(一定條件)的最小值,它至少與p%的所有值一樣大寥袭。

通過這個定義路捧,可以計算任何值的集合的任何 0 到 100 之間的百分位數(shù),并且它始終是集合的一個元素传黄。

實際上杰扫,假設(shè)集合中有n個元素。 要找到第p個百分位數(shù):

  • 對集合升序排序膘掰。
  • 計算np%(p/100) * n章姓。叫做k
  • 如果k是一個整數(shù)识埋,則取有序集合的第k個元素凡伊。
  • 如果k不是一個整數(shù),則將其四舍五入到下一個整數(shù)窒舟,并采用有序集合的那個元素窗声。

示例

scores_and_sections表包含 359 名學(xué)生,每個學(xué)生一行辜纲。 列是學(xué)生的討論分組和期中分?jǐn)?shù)。

scores_and_sections = Table.read_table('scores_by_section.csv')
scores_and_sections
Section Midterm
1 22
2 12
2 23
2 14
1 20
3 25
4 19
1 24
5 8
6 14

(省略了 349 列)

scores_and_sections.select('Midterm').hist(bins=np.arange(-0.5, 25.6, 1))

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-1.png

分?jǐn)?shù)的第 85 個百分位數(shù)是多少拦耐? 為了使用percentile函數(shù)耕腾,創(chuàng)建包含期中分?jǐn)?shù)的數(shù)組scores,并找到第 85 個百分位數(shù):

scores = scores_and_sections.column(1)
percentile(85, scores)
22

根據(jù)percentile函數(shù)杀糯,第 85 個百分點數(shù)是 22扫俺。為了檢查這是否符合我們的新定義,我們直接應(yīng)用定義固翰。

首先狼纬,把分?jǐn)?shù)升序排列:

sorted_scores = np.sort(scores_and_sections.column(1))

數(shù)組中有 359 個分?jǐn)?shù)。所以下面骂际,計算 359 的 85%疗琉,它是 305.15。

0.85 * 359
305.15

這不是一個整數(shù)歉铝。 根據(jù)我們的定義盈简,中位數(shù)是sorted_scores的第 306 個元素,按 Python 的索引約定,它是數(shù)組的第 305 項柠贤。

# The 306th element of the sorted array

sorted_scores.item(305)
22

它和我們通過使用percentile得到的答案一樣香浩。以后,我們會僅僅使用percentile臼勉。

四分位數(shù)

數(shù)值集合的第一個四分位數(shù)是第 25 個百分分?jǐn)?shù)邻吭。 這個術(shù)語(quartile)來自第一個季度(quarter)。 第二個四分位數(shù)是中位數(shù)宴霸,第三個四分位數(shù)是第 75 個百分位數(shù)囱晴。

對于我們的分?jǐn)?shù)數(shù)據(jù),這些值是:

percentile(25, scores)
11
percentile(50, scores)
16
percentile(75, scores)
20

分?jǐn)?shù)的分布有時歸納為“中等 50%”區(qū)間猖败,在第一和第三個四分位數(shù)之間速缆。

自舉法

一個數(shù)據(jù)科學(xué)家正在使用隨機(jī)樣本中的數(shù)據(jù)來估計未知參數(shù)。她使用樣本來計算用作估計值的統(tǒng)計量恩闻。

一旦她計算出了統(tǒng)計量的觀察值艺糜,她就可以把它作為她的估計值,然后順其自然幢尚。 但她是一名數(shù)據(jù)科學(xué)家破停。 她知道她的隨機(jī)樣本只是眾多可能的隨機(jī)樣本之一,因此她的估計只是眾多合理估算之一尉剩。

這些估計的變化有多大真慢? 為了回答這個問題,似乎她需要從總體中抽取另一個樣本理茎,并根據(jù)新樣本計算一個新的估計值黑界。 但是她沒有資源來回到總體中,再抽取一個樣本皂林。

這個數(shù)據(jù)科學(xué)家看起來好像卡住了朗鸠。

幸運的是,一個叫做自舉法的好主意可以幫助她础倍。 由于從總體中生成新樣本是不可行的烛占,自舉法通過稱為重采樣的方法生成新的隨機(jī)樣本:新樣本從原始樣本中隨機(jī)抽取。

在本節(jié)中沟启,我們將看到自舉法的工作方式和原因忆家。 在本章的其余部分,我們將使用自舉法進(jìn)行推理德迹。

舊金山市的雇員薪資

SF OpenData 是一個網(wǎng)站芽卿,舊金山市和縣在上面公開提供他們的一些數(shù)據(jù)。 其中一個數(shù)據(jù)集包含城市雇員的薪資數(shù)據(jù)浦辨。 其中包括市營醫(yī)院的醫(yī)療專業(yè)人員蹬竖,警察沼沈,消防員,運輸工人币厕,民選官員以及市內(nèi)所有其他雇員列另。

2015 日歷年的薪資數(shù)據(jù)見表sf2015

sf2015 = Table.read_table('san_francisco_2015.csv')
sf2015
Year Type Year Organization Group Code Organization Group Department Code Department Union Code Union Job Family Code Job Family Job Code Job Employee Identifier Salaries Overtime Other Salaries Total Salary Retirement Health/Dental Other Benefits Total Benefits Total Compensation
Calendar 2015 2 Public Works, Transportation & Commerce WTR PUC Water Department 21 Prof & Tech Engineers - Miscellaneous, Local 21 2400 Lab, Pharmacy & Med Techs 2481 Water Qualitytech I/II 21538 82146 0 0 82146 16942.2 12340.9 6337.73 35620.8 117767
Calendar 2015 2 Public Works, Transportation & Commerce DPW General Services Agency - Public Works 12 Carpet, Linoleum and Soft Tile Workers, Local 12 7300 Journeyman Trade 7393 Soft Floor Coverer 5459 32165.8 973.19 848.96 33987.9 0 4587.51 2634.42 7221.93 41209.8
Calendar 2015 4 Community Health DPH Public Health 790 SEIU - Miscellaneous, Local 1021 1600 Payroll, Billing & Accounting 1636 Health Care Billing Clerk 2 41541 71311 5757.98 0 77069 14697.6 12424.5 6370.06 33492.2 110561
Calendar 2015 4 Community Health DPH Public Health 351 Municipal Executive Association - Miscellaneous 0900 Management 2620 Food Service Mgr Administrator 26718 28430.2 0 763.07 29193.3 0 4223.14 5208.51 9431.65 38625
Calendar 2015 2 Public Works, Transportation & Commerce MTA Municipal Transportation Agency 790 SEIU - Miscellaneous, Local 1021 8200 Protection & Apprehension 8201 School Crossing Guard 45810 7948.75 0 0 7948.75 0 2873.17 616.24 3489.41 11438.2
Calendar 2015 1 Public Protection POL Police 911 Police Officers' Association Q000 Police Services Q002 Police Officer 32906 2235 0 0 2235 490.36 286.72 176.57 953.65 3188.65
Calendar 2015 4 Community Health DPH Public Health 791 SEIU - Staff and Per Diem Nurses, Local 1021 2300 Nursing 2328 Nurse Practitioner 7506 187247 0 11704.1 198951 37683.7 12424.5 11221.7 61329.9 260281
Calendar 2015 2 Public Works, Transportation & Commerce MTA Municipal Transportation Agency 253 Transport Workers - Transit Operators, Local 250-A 9100 Street Transit 9163 Transit Operator 36773 66988.5 3512.88 2770.39 73271.8 19127.2 13203 5455.1 37785.3 111057
Calendar 2015 6 General Administration & Finance CAT City Attorney 311 Municipal Attorneys' Association 8100 Legal & Court 8177 Attorney (Civil/Criminal) 12963 135190 0 1562.5 136752 27501.8 12424.5 10103 50029.3 186781
Calendar 2015 3 Human Welfare & Neighborhood Development DSS Human Services 535 SEIU - Human Services, Local 1021 9700 Community Development 9703 Emp & Training Spec 2 35179 70474.8 147.28 1647.24 72269.3 14650.3 10696.9 5993.11 31340.3 103610

(省略了 42979 行)

共有 42,979 名員工旦装,每個人一行页衙。 有許多列包含市政部門隸屬關(guān)系的信息,以及員工薪酬方案不同部分的詳細(xì)信息阴绢。 這是對應(yīng)市長 Ed Lee 的一行店乐。

sf2015.where('Job', are.equal_to('Mayor'))
Year Type Year Organization Group Code Organization Group Department Code Department Union Code Union Job Family Code Job Family Job Code Job Employee Identifier Salaries Overtime Other Salaries Total Salary Retirement Health/Dental Other Benefits Total Benefits Total Compensation
Calendar 2015 6 General Administration & Finance MYR Mayor 556 Elected Officials 1100 Administrative & Mgmt (Unrep) 1190 Mayor 22433 288964 0 0 288964 58117 12424.5 20293 90834.5 379798

我們要研究最后一欄,總薪酬呻袭。 這是員工的工資加上市政府對退休和福利計劃的貢獻(xiàn)眨八。

日歷年的財務(wù)方案有時難以理解,因為它們?nèi)Q于雇用日期左电,員工是否在城市內(nèi)部換工作等等廉侧。 例如,Total Compensation列中的最低值看起來有點奇怪篓足。

sf2015.sort('Total Compensation')
Year Type Year Organization Group Code Organization Group Department Code Department Union Code Union Job Family Code Job Family Job Code Job Employee Identifier Salaries Overtime Other Salaries Total Salary Retirement Health/Dental Other Benefits Total Benefits Total Compensation
Calendar 2015 1 Public Protection FIR Fire Department 798 Firefighters - Miscellaneous, Local 798 H000 Fire Services H002 Firefighter 43833 0 0 0 0 0 0 -423.76 -423.76 -423.76
Calendar 2015 4 Community Health DPH Public Health 790 SEIU - Miscellaneous, Local 1021 9900 Public Service Aide 9924 PS Aide Health Services 27871 -292.4 0 0 -292.4 0 -95.58 -22.63 -118.21 -410.61
Calendar 2015 1 Public Protection JUV Juvenile Probation 790 SEIU - Miscellaneous, Local 1021 8300 Correction & Detention 8320 Counselor, Juvenile Hall 10517 0 0 0 0 0 0 -159.12 -159.12 -159.12
Calendar 2015 6 General Administration & Finance CPC City Planning 21 Prof & Tech Engineers - Miscellaneous, Local 21 1000 Information Systems 1053 IS Business Analyst-Senior 18961 0 0 0 0 0 0 -26.53 -26.53 -26.53
Calendar 2015 6 General Administration & Finance CPC City Planning 21 Prof & Tech Engineers - Miscellaneous, Local 21 5200 Professional Engineering 5277 Planner 1 19387 0 0 0 0 0 0 -9.51 -9.51 -9.51
Calendar 2015 2 Public Works, Transportation & Commerce PUC PUC Public Utilities Commission 21 Prof & Tech Engineers - Miscellaneous, Local 21 1000 Information Systems 1044 IS Engineer-Principal 28988 0 0 0 0 0 0 -3.1 -3.1 -3.1
Calendar 2015 1 Public Protection JUV Juvenile Probation 39 Stationary Engineers, Local 39 7300 Journeyman Trade 7335 Senior Stationary Engineer 19125 0 0 0 0 0 0 -0.01 -0.01 -0.01
Calendar 2015 1 Public Protection ECD Department of Emergency Management 351 Municipal Executive Association - Miscellaneous 0900 Management 0922 Manager I 30025 0 0 0 0 0 0 0 0 0
Calendar 2015 7 General City Responsibilities UNA General Fund Unallocated 790 SEIU - Miscellaneous, Local 1021 3200 Recreation 3280 Assistant Recreation Director 49784 0 0 0 0 0 0 1.27 1.27 1.27
Calendar 2015 4 Community Health DPH Public Health 250 SEIU - Health Workers, Local 1021 2600 Dietary & Food 2654 Cook 26768 0 0 2.21 2.21 0 0 0.17 0.17 2.38

(省略了 42979 行)

為了便于比較段誊,我們將專注于那些工作時間相當(dāng)于至少半年的人。 最低工資約為每小時 10 美元栈拖,52 周每周 20 小時连舍,工資約為 1 萬美元。

sf2015 = sf2015.where('Salaries', are.above(10000))
sf2015.num_rows
36569

總體和參數(shù)

讓這張超過 36500 行的表格成為我們的總體涩哟。 這是總薪資的直方圖索赏。

sf_bins = np.arange(0, 700000, 25000)
sf2015.select('Total Compensation').hist(bins=sf_bins)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-2.png

雖然大部分值都低于 300,000 美元,但有一些還是比較高的贴彼。 例如参滴,首席投資官的總薪資不多是 65 萬美元。 這就是為什么橫軸延伸到了 700,000 美元锻弓。

sf2015.sort('Total Compensation', descending=True).show(2)
Year Type Year Organization Group Code Organization Group Department Code Department Union Code Union Job Family Code Job Family Job Code Job Employee Identifier Salaries Overtime Other Salaries Total Salary Retirement Health/Dental Other Benefits Total Benefits Total Compensation
Calendar 2015 6 General Administration & Finance RET Retirement System 351 Municipal Executive Association - Miscellaneous 1100 Administrative & Mgmt (Unrep) 1119 Chief Investment Officer 46881 507832 0 0 507832 105053 12424.5 23566.2 141044 648875
Calendar 2015 6 General Administration & Finance ADM General Services Agency - City Admin 164 Physicians and Dentists - Miscellaneous 2500 Med Therapy & Auxiliary 2598 Asst Med Examiner 1016 279311 3829.36 114434 397574 56211.6 12424.5 14299.1 82935.2 480509

(省略了 36567 行)

現(xiàn)在讓參數(shù)為總薪資的中位數(shù)。

既然我們有能力從總體中得到所有數(shù)據(jù)蝌箍,我們可以簡單計算參數(shù):

pop_median = percentile(50, sf2015.column('Total Compensation'))
pop_median
110305.78999999999

所有員工的薪酬總額的中位數(shù)剛剛超過 110,300 美元青灼。

從實際的角度來看,我們沒有理由抽取樣本來估計這個參數(shù)妓盲,因為我們只是知道它的值杂拨。 但在本節(jié)中,我們假裝不知道這個值悯衬,看看我們?nèi)绾胃鶕?jù)隨機(jī)樣本來估計它弹沽。

在后面的章節(jié)中,我們將回到現(xiàn)實,在參數(shù)未知的情況下工作策橘。 就目前而言炸渡,我們是無所不知的。

隨機(jī)樣本和估計

讓我們無放回地隨機(jī)抽取 500 名員工的樣本丽已,并將所選員工的總薪酬的中位數(shù)作為我們的參數(shù)估計量蚌堵。

our_sample = sf2015.sample(500, with_replacement=False)
our_sample.select('Total Compensation').hist(bins=sf_bins)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-3.png

est_median = percentile(50, our_sample.column('Total Compensation'))
est_median
113598.99000000001

樣本量很大。 根據(jù)平均定律沛婴,樣本的分布與總體的分布相似吼畏,因此樣本中位數(shù)與總體中位數(shù)相差不大(盡管當(dāng)然并不完全相同)。

所以現(xiàn)在我們有了參數(shù)的估計嘁灯。 但是泻蚊,如果樣本是不同的,估計的值也會不同丑婿。 我們希望能夠量化估計的值在不同樣本間的差異性雄。 這個變化的測量將有助于我們衡量我們可以將參數(shù)估計得多么準(zhǔn)確。

為了查看樣本有多么不同枯冈,我們可以從總體中抽取另一個樣本毅贮,但這樣做就作弊了。 我們正試圖模仿現(xiàn)實生活尘奏,我們不能掌握所有的人口數(shù)據(jù)滩褥。

用某種方式,我們必須得到另一個隨機(jī)樣本炫加,而不從總體中抽樣瑰煎。

自舉法:從樣本中重采樣

我們所做的是,從樣本中隨機(jī)抽樣俗孝。 我們知道了酒甸,大型隨機(jī)樣本可能類似于用于抽取的總體。 這一觀察使得數(shù)據(jù)科學(xué)家可以通過自舉來提升自己:抽樣過程可以通過從樣本中抽樣來復(fù)制赋铝。

以下是自舉法的步驟插勤,用于生成類似總體的另一個隨機(jī)樣本:

  • 將原始樣本看做總體。
  • 從樣本中隨機(jī)抽取樣本革骨,與原始樣本大小相同农尖。

二次樣本的大小與原始樣本相同很重要。 原因是估計量的變化取決于樣本的大小良哲。 由于我們的原始樣本由 500 名員工組成盛卡,我們的樣本中位數(shù)基于 500 個值。 為了看看樣本變化多少筑凫,我們必須將其與 500 個其他樣本的中位數(shù)進(jìn)行比較滑沧。

如果我們從大小為 500 的樣本中并村,無放回地隨機(jī)抽取了 500 次,我們只會得到相同的樣本滓技。 通過帶放回抽取哩牍,我們就可以讓新樣本與原始樣本不同,因為有些員工可能會被抽到一次以上殖属,其他人則完全不會姐叁。

為什么這是一個好主意? 按照平均定律洗显,原始樣本的分布可能與總體相似外潜,所有“二次樣本”的分布可能與原始樣本相似。 因此挠唆,所有二次樣本的分布也可能與總體相似处窥。

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-4.png

二次樣本的中位數(shù)

回想一下,使用sample方法而沒有指定樣本大小時玄组,默認(rèn)情況下樣本大小等于用于抽取樣本的表的行數(shù)滔驾。 這是完美的自舉! 這是從原始樣本中抽取的一個新樣本俄讹,以及相應(yīng)的樣本中位數(shù)哆致。

resample_1 = our_sample.sample()
resample_1.select('Total Compensation').hist(bins=sf_bins)

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-5.png

resampled_median_1 = percentile(50, resample_1.column('Total Compensation'))
resampled_median_1
110001.16

通過重采樣,我們有了總體中位數(shù)的另一個估計患膛。 通過一次又一次的重采樣摊阀,我們得到許多這樣的估計,因此有了估計的經(jīng)驗分布踪蹬。

resample_2 = our_sample.sample()
resampled_median_2 = percentile(50, resample_2.column('Total Compensation'))
resampled_median_2
110261.39999999999

自舉樣本中位數(shù)的經(jīng)驗分布

讓我們定義一個函數(shù)bootstrap_median胞此,該函數(shù)接受我們的原始樣本,包含變量的列的標(biāo)簽跃捣,以及我們想要的自舉樣本的數(shù)量漱牵,并返回二次樣本的相應(yīng)中值的數(shù)組。

每次我們重采樣并找到中位數(shù)疚漆,我們重復(fù)自舉過程酣胀。 所以自舉樣本的數(shù)量將被稱為重復(fù)數(shù)量。

def bootstrap_median(original_sample, label, replications):
    """Returns an array of bootstrapped sample medians:
    original_sample: table containing the original sample
    label: label of column containing the variable
    replications: number of bootstrap samples
    """
    just_one_column = original_sample.select(label)
    medians = make_array()
    for i in np.arange(replications):
        bootstrap_sample = just_one_column.sample()
        resampled_median = percentile(50, bootstrap_sample.column(0))
        medians = np.append(medians, resampled_median)

    return medians

我們現(xiàn)在將自舉過程重復(fù) 5000 次娶聘。 數(shù)組bstrap_medians包含所有 5,000 個自舉樣本的中位數(shù)灵临。 注意代碼的運行時間比我們以前的代碼要長。 因為要做很多重采樣趴荸!

bstrap_medians = bootstrap_median(our_sample, 'Total Compensation', 5000)

這是 5000 個中位數(shù)的直方圖。 紅點是總體的參數(shù):它是整個總體的中位數(shù)宦焦,我們碰巧知道但沒有在自舉過程中使用发钝。

resampled_medians = Table().with_column('Bootstrap Sample Median', bstrap_medians)

#median_bins=np.arange(100000, 130000, 2500)
#resampled_medians.hist(bins = median_bins)
resampled_medians.hist()

plots.scatter(pop_median, 0, color='red', s=30);

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-6.png

重要的是要記住顿涣,紅點是固定的:110,305.79 美元,總體的中位數(shù)酝豪。 經(jīng)驗直方圖是隨機(jī)抽取的結(jié)果涛碑,將相對于紅點隨機(jī)定位。

請記住孵淘,所有這些計算的重點是估計人口中位數(shù)蒲障,它是紅點。我們的估計是所有隨機(jī)生成的樣本中位數(shù)瘫证,它們的直方圖你在上面看到了揉阎。 我們希望這些估計量包含參數(shù) - 如果沒有,它們就脫線了背捌。

估計量是否捕獲了參數(shù)

紅點正好落在二次樣本的中位數(shù)的經(jīng)驗直方圖中間毙籽,而不是尾部的幾率有多少? 要回答這個問題毡庆,我們必須定義“中間”坑赡。 讓我們將它看做“紅點落在二次樣本的中位數(shù)的中間 95%”。

以下是二次采樣中位數(shù)的“中間 95%”的兩端:

left = percentile(2.5, bstrap_medians)
left
107652.71000000001
right = percentile(97.5, bstrap_medians)
right
119256.73

總體中位數(shù) 110,305 美元在這兩個數(shù)中間么抗。下面的直方圖展示了區(qū)間和總體中位數(shù)毅否。

#median_bins=np.arange(100000, 130000, 2500)
#resampled_medians.hist(bins = median_bins)
resampled_medians.hist()

plots.plot(make_array(left, right), make_array(0, 0), color='yellow', lw=3, zorder=1)
plots.scatter(pop_median, 0, color='red', s=30, zorder=2);

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-7.png

我們例子中,估計量的“中間 95%”的區(qū)間捕獲了參數(shù)蝇刀。 但是螟加,這是一個偶然嗎?

要查看區(qū)間包含參數(shù)的頻率熊泵,我們必須一遍又一遍地運行整個過程仰迁。具體而言,我們將重復(fù)以下過程 100 次:

  • 從總體中抽取一個大小為 500 的原始樣本顽分。
  • 執(zhí)行 5000 次重復(fù)的自舉過程徐许,并生成二次樣本的中位數(shù)的“中間 95%”的區(qū)間。
  • 我們最后得到了 100 個區(qū)間卒蘸,并計算其中有多少個包含總體中位數(shù)雌隅。

劇透警告:自舉的統(tǒng)計理論表明,這個數(shù)字應(yīng)該在 95 左右缸沃。它可能高于或低于 95恰起,但不會離得太遠(yuǎn)。

# THE BIG SIMULATION: This one takes several minutes.

# Generate 100 intervals, in the table intervals

left_ends = make_array()
right_ends = make_array()

total_comps = sf2015.select('Total Compensation')

for i in np.arange(100):
    first_sample = total_comps.sample(500, with_replacement=False)
    medians = bootstrap_median(first_sample, 'Total Compensation', 5000)
    left_ends = np.append(left_ends, percentile(2.5, medians))
    right_ends = np.append(right_ends, percentile(97.5, medians))

intervals = Table().with_columns(
    'Left', left_ends,
    'Right', right_ends
)    

對于 100 個重復(fù)中的每個趾牧,我們得到了一個中位數(shù)估計量的區(qū)間检盼。

intervals
Left Right
100547 115112
98788.4 112129
107981 121218
100965 114796
102596 112056
105386 113909
105225 116918
102844 116712
106584 118054
108451 118421

(省略了 90 行)

良好的區(qū)間是那些包含我們試圖估計的參數(shù)的區(qū)間。 通常參數(shù)是未知的翘单,但在本節(jié)中吨枉,我們碰巧知道參數(shù)是什么蹦渣。

pop_median
110305.78999999999

100 個區(qū)間中有多少個包含總體中位數(shù)? 這是左端低于且右端高于總體中位數(shù)的區(qū)間數(shù)量貌亭。

intervals.where('Left', are.below(pop_median)).where('Right', are.above(pop_median)).num_rows
95

構(gòu)建所有區(qū)間需要花費幾分鐘時間柬唯,但如果你有耐心,請再試一次圃庭。最有可能的是锄奢,100 個區(qū)間中有大約 95 個將是良好的:它們將包含參數(shù)。

因為它們有較大的重疊剧腻,所以很難在橫軸上顯示所有的區(qū)間 - 畢竟拘央,它們都試圖估計相同的參數(shù)。下圖通過豎直堆疊恕酸,在相同軸域上展示的每個區(qū)間堪滨。縱軸簡單地是重復(fù)的序號蕊温,區(qū)間從中生成袱箱。

紅線是參數(shù)所在的位置。良好的區(qū)間覆蓋了參數(shù)义矛;通常有大約 95 個发笔。

如果一個區(qū)間不能覆蓋這個參數(shù),就是個糟糕的事情凉翻。在這個地方了讨,你可以看到紅線周圍的“亮光”。他們中只有很少 - 通常是大約 5 個 - 但是他們確實存在制轰。

任何基于抽樣的方法都有可能脫線前计。基于隨機(jī)抽樣的方法的優(yōu)點是垃杖,我們可以量化它們可能脫線的頻率徐鹤。

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-8.png

為了總結(jié)模擬所示的內(nèi)容忙上,假設(shè)你通過以下過程來估計總體中位數(shù):

從總體中隨機(jī)抽取一個大樣本乱豆。
自舉你的隨機(jī)樣本躺盛,并從新的隨機(jī)樣本中獲取估計量。
重復(fù)上述步驟數(shù)千次彩库,并獲得數(shù)千個估計量肤无。
挑選所有估計量的“中間 95%”的區(qū)間。
這給了你一個估計量的區(qū)間『眨現(xiàn)在宛渐,如果重復(fù)整個過程 100 次,會得到 100 個區(qū)間,那么 100 個區(qū)間中的大約 95 個將包含總體的參數(shù)窥翩。

換句話說畴蹭,95% 的時間內(nèi),這個估計過程捕獲了參數(shù)鳍烁。

你可以用一個不同的值代替 95%,只要它不是 100繁扎。假設(shè)你用 80% 代替了 95%幔荒,并保持樣本大小為 500。那么你的估計量的區(qū)間將比我們這里的模擬要短梳玫,因為“中間 80%”是比“中間 95%”更小的范圍爹梁。只有大約 80% 的區(qū)間將包含參數(shù)。

置信區(qū)間

我們已經(jīng)開發(fā)了一種方法提澎,通過使用隨機(jī)抽樣和自舉來估計參數(shù)姚垃。我們的方法產(chǎn)生一個估計區(qū)間,來解釋隨機(jī)樣本的機(jī)會變異盼忌。通過提供一個估計區(qū)間而不是一個估計量积糯,我們給自己一些回旋的余地。

在前面的例子中谦纱,我們看到我們的估計過程在 95% 的時間內(nèi)產(chǎn)生了一個良好的區(qū)間看成,一個“良好”的區(qū)間就是包含這個參數(shù)的區(qū)間。對于這個過程的結(jié)果很好跨嘉,我們說我們有 95% 的置信度(信心)川慌。我們的估計區(qū)間稱為參數(shù)的 95% 置信區(qū)間,95% 稱為區(qū)間的置信度祠乃。

前一個例子中的情況有點不尋常梦重。因為我們碰巧知道參數(shù)的值,所以我們能夠檢查一個區(qū)間是好還是不好亮瓷,這反過來又幫助我們看到琴拧,我們的估計過程每 100 次中有 95 次捕獲了參數(shù)。

但通常情況下寺庄,數(shù)據(jù)科學(xué)家不知道參數(shù)的值艾蓝。這就是他們首先想要估計的原因。在這種情況下斗塘,他們通過使用一些方法赢织,類似我們開發(fā)的方法,獲得未知參數(shù)的估計區(qū)間馍盟。由于統(tǒng)計理論于置,和我們所看到的演示,數(shù)據(jù)科學(xué)家可以確信贞岭,他們產(chǎn)生區(qū)間的過程八毯,會以已知百分比的幾率搓侄,產(chǎn)生一個良好的區(qū)間。

總體中位數(shù)的置信區(qū)間:自舉百分位數(shù)方法

現(xiàn)在我們使用自舉法來估計未知總體的中位數(shù)话速。 數(shù)據(jù)來自大型醫(yī)院系統(tǒng)中的新生兒樣本; 我們將把它看作是一個簡單的隨機(jī)樣本讶踪,雖然抽樣分多個階段完成。 Deborah Nolan 和 Terry Speed 的 Stat Labs 擁有一個大數(shù)據(jù)集的詳細(xì)信息泊交,這個樣本是從中抽取的乳讥。

baby表中包含以下母嬰偶對的數(shù)量:嬰兒的出生體重(盎司),孕期天數(shù)廓俭,母親的年齡云石,母親身高(英寸),孕期體重(磅)研乒,母親是否在孕期吸煙汹忠。

baby = Table.read_table('baby.csv')
baby
Birth Weight Gestational Days Maternal Age Maternal Height Maternal Pregnancy Weight Maternal Smoker
120 284 27 62 100 False
113 282 33 64 135 False
128 279 28 64 115 True
108 282 23 67 125 True
136 286 25 62 93 False
138 244 33 62 178 False
132 245 23 65 140 False
120 289 25 62 125 False
143 299 30 66 136 True
140 351 27 68 120 False

(省略了 1164 行)

出生體重是新生兒健康的一個重要因素 - 較小的嬰兒比較大的嬰兒在初期需要更多的醫(yī)療護(hù)理。 因此雹熬,在嬰兒出生前估計出生體重是有幫助的宽菜。 一種方法是檢查出生體重和懷孕天數(shù)之間的關(guān)系。

這種關(guān)系的一個簡單的衡量標(biāo)準(zhǔn)是出生體重與懷孕天數(shù)的比值橄唬。ratios表包含baby的前兩列赋焕,以及一列ratios。 這一列的第一個條目按以下方式計算:

https://www.zhihu.com/equation?tex=%5Cfrac%7B120%7E%5Cmbox%7Bounces%7D%7D%7B284%7E%5Cmbox%7Bdays%7D%7D%20%7E%5Capprox%20%7E%200.4225%7E%20%5Cmbox%7Bounces%20per%20day%7D

ratios = baby.select('Birth Weight', 'Gestational Days').with_column(
    'Ratio BW/GD', baby.column('Birth Weight')/baby.column('Gestational Days')
)
ratios

| Birth Weight | Gestational Days | Ratio BW/GD |
| --- | --- | --- | --- |
| 120 | 284 | 0.422535 |
| 113 | 282 | 0.400709 |
| 128 | 279 | 0.458781 |
| 108 | 282 | 0.382979 |
| 136 | 286 | 0.475524 |
| 138 | 244 | 0.565574 |
| 132 | 245 | 0.538776 |
| 120 | 289 | 0.415225 |
| 143 | 299 | 0.478261 |
| 140 | 351 | 0.39886 |

(省略了 1164 行)

ratios.select('Ratio BW/GD').hist()

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-9.png

一眼望去仰楚,直方圖看起來相當(dāng)對稱隆判,密度在 4opd 到 4.5opd 的區(qū)間內(nèi)是最大的。 但仔細(xì)一看僧界,就可以看出一些比例相當(dāng)大侨嘀。 比率的最大值剛好超過 0.78opd,幾乎是通常值的兩倍捂襟。

ratios.sort('Ratio BW/GD', descending=True).take(0)
Birth Weight Gestational Days Ratio BW/GD
116 148 0.783784

中位數(shù)提供了通常比例的感覺咬腕,因為它不受非常大或非常小的比例的影響。 樣本(比值)的中位數(shù)約為 0.429opd葬荷。

np.median(ratios.column(2))
0.42907801418439717

但是總體中位數(shù)是多少涨共? 我們不知道,所以我們會估計它宠漩。

我們的方法將與前一節(jié)完全相同举反。 我們將自舉樣本 5000 次,結(jié)果是 5000 個中位數(shù)的估計量扒吁。 我們 95% 的置信區(qū)間將是我們所有估計量的“中間 95%”火鼻。

回憶前一節(jié)定義的bootstrap_median函數(shù)。 我們將調(diào)用這個函數(shù),并構(gòu)造總體(比值)中位數(shù)的 95% 置信區(qū)間魁索。請記住融撞,ratios表包含來自我們的原始樣本的相關(guān)數(shù)據(jù)。

def bootstrap_median(original_sample, label, replications):

    """Returns an array of bootstrapped sample medians:
    original_sample: table containing the original sample
    label: label of column containing the variable
    replications: number of bootstrap samples
    """

    just_one_column = original_sample.select(label)
    medians = make_array()
    for i in np.arange(replications):
        bootstrap_sample = just_one_column.sample()
        resampled_median = percentile(50, bootstrap_sample.column(0))
        medians = np.append(medians, resampled_median)

    return medians
# Generate the medians from 5000 bootstrap samples
bstrap_medians = bootstrap_median(ratios, 'Ratio BW/GD', 5000)
# Get the endpoints of the 95% confidence interval
left = percentile(2.5, bstrap_medians)
right = percentile(97.5, bstrap_medians)

make_array(left, right)
array([ 0.42545455,  0.43262411])

95% 置信區(qū)間是 0.425opd 到 0.433opd粗蔚。 我們估計的總體(出生重量與懷孕天數(shù)的比值)中位數(shù)尝偎,在 0.425opd 到 0.433opd 的范圍內(nèi)。

基于原始樣本的估計量 0.429 恰好在區(qū)間兩端的中間鹏控,盡管這通常不是真的冬念。

為了使我們的結(jié)果可視化,讓我們畫出我們自舉的中位數(shù)的經(jīng)驗直方圖牧挣,并將置信區(qū)間置于橫軸上。

resampled_medians = Table().with_column(
    'Bootstrap Sample Median', bstrap_medians
)
resampled_medians.hist(bins=15)
plots.plot(make_array(left, right), make_array(0, 0), color='yellow', lw=8);

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-10.png

這個直方圖和區(qū)間就像我們在前一節(jié)中繪制的直方圖和區(qū)間醒陆,只有一個很大的區(qū)別 - 沒有顯示參數(shù)的紅點瀑构。 我們不知道這個點應(yīng)該在哪里,或者它是否在區(qū)間中刨摩。

我們只是有一個估計區(qū)間寺晌。 這是估計量的 95% 置信區(qū)間,因為生成它的過程在 95% 的時間中產(chǎn)生了良好的區(qū)間澡刹。 那肯定是在隨機(jī)猜測呻征!

請記住,這個區(qū)間是一個大約 95% 的置信區(qū)間罢浇。 計算中涉及到很多近似值陆赋。 近似值并不差,但并不準(zhǔn)確嚷闭。

總體均值的置信區(qū)間:自舉百分位數(shù)方法

我們?yōu)橹形粩?shù)所做的事情也可以用于均值攒岛。 假設(shè)我們想估計總體中的母親的平均年齡。 自然估計量是樣本中的母親的平均年齡胞锰。 這是他們的年齡分布灾锯,他們的平均年齡大約是 27.2 歲。

baby.select('Maternal Age').hist()

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-11.png

np.mean(baby.column('Maternal Age'))
27.228279386712096

母親的平均年齡是多少嗅榕? 我們不知道這個參數(shù)的值顺饮。

我們用自舉法來估計未知參數(shù)。 為此凌那,我們將編輯bootstrap_median的代碼兼雄,而不是定義函數(shù)bootstrap_mean。 代碼是相同的案怯,除了統(tǒng)計量是代替中位數(shù)的均值君旦,并且收集在一個名為means而不是medians的數(shù)組中。

def bootstrap_mean(original_sample, label, replications):

    """Returns an array of bootstrapped sample means:
    original_sample: table containing the original sample
    label: label of column containing the variable
    replications: number of bootstrap samples
    """

    just_one_column = original_sample.select(label)
    means = make_array()
    for i in np.arange(replications):
        bootstrap_sample = just_one_column.sample()
        resampled_mean = np.mean(bootstrap_sample.column(0))
        means = np.append(means, resampled_mean)

    return means
# Generate the means from 5000 bootstrap samples
bstrap_means = bootstrap_mean(baby, 'Maternal Age', 5000)

# Get the endpoints of the 95% confidence interval
left = percentile(2.5, bstrap_means)
right = percentile(97.5, bstrap_means)

make_array(left, right)
array([ 26.89778535,  27.55962521])

95% 置信區(qū)間是約 26.9 歲到約 27.6 歲。 也就是說金砍,我們估計的母親的平均年齡在 26.9 歲到 27.6 歲之間局蚀。

注意兩端距原始樣本均值 27.2 歲的距離。 樣本量非常大 - 1174 個母親 - 所以樣本均值變化不大恕稠。 我們將在下一章進(jìn)一步探討這個觀察琅绅。

下面顯示了 5000 個自舉均值的經(jīng)驗直方圖,以及總體均值的 95% 置信區(qū)間鹅巍。

resampled_means = Table().with_column(
    'Bootstrap Sample Mean', bstrap_means
)
resampled_means.hist(bins=15)
plots.plot(make_array(left, right), make_array(0, 0), color='yellow', lw=8);

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-12.png

原始樣本的均值(27.23 歲)同樣接近區(qū)間中心千扶。 這并不奇怪,因為每個自舉樣本都是從相同的原始樣本中抽取的骆捧。 自舉樣本的均值大約對稱分布原始樣本(從其中抽扰煨摺)的均值的兩側(cè)。

還要注意敛苇,即使所采樣的年齡的直方圖完全不是對稱的妆绞,二次樣本的均值的經(jīng)驗直方圖也是大致對稱的鐘形:

baby.select('Maternal Age').hist()

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-13.png

這是概率統(tǒng)計的中心極限定理的結(jié)果。 在后面的章節(jié)中枫攀,我們將看到這個定理是什么括饶。

80% 置信區(qū)間

你可以使用自舉法來構(gòu)建任意水平的置信區(qū)間。 例如来涨,要為總體中的平均年齡構(gòu)建 80% 置信區(qū)間图焰,可以選取二次樣本的均值的“中間 80%”。 所以你會希望為兩個尾巴的每一個分配 10%蹦掐,因此端點是二次樣本的均值的第 10 和第 90 個百分位數(shù)技羔。

left_80 = percentile(10, bstrap_means)
right_80 = percentile(90, bstrap_means)
make_array(left_80, right_80)
array([ 27.01192504,  27.439523  ])
resampled_means.hist(bins=15)
plots.plot(make_array(left_80, right_80), make_array(0, 0), color='yellow', lw=8);

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-14.png

這個 80% 置信區(qū)間比 95% 置信區(qū)間要短得多。 它只是約定 27.0 歲到約 27.4 歲卧抗。 雖然這是估計量的較窄區(qū)間堕阔,你知道這個過程在 80% 的時間內(nèi)產(chǎn)生良好的區(qū)間。

之前過程產(chǎn)生了較寬的區(qū)間颗味,但是我們對產(chǎn)生它的過程擁有更高的置信度超陆。

為了以較高的置信度獲得較窄的置信區(qū)間,你必須從較大的樣本開始浦马。 我們將在下一章看到為什么时呀。

總體比例的置信區(qū)間:自舉百分位數(shù)方法

在樣本中,39% 的母親在懷孕期間吸煙晶默。

baby.where('Maternal Smoker', are.equal_to(True)).num_rows/baby.num_rows
0.3909710391822828

以下對觀察很實用谨娜,這個比例也可以通過數(shù)組操作來計算:

smoking = baby.column('Maternal Smoker')
np.count_nonzero(smoking)/len(smoking)
0.3909710391822828

譯者注:

np.count_nonzero(arr)等價于np.sum(arr != 0)

總體中有百分之多少的母親在懷孕期間吸煙磺陡? 這是一個未知的參數(shù)趴梢,我們可以通過自舉置信區(qū)間來估計漠畜。 這個過程中的步驟與我們用來估計總體均值和中位數(shù)的步驟相似。

我們將首先定義一個函數(shù)bootstrap_proportion坞靶,返回一個自舉樣本的比例的數(shù)組憔狞。 我們再一次通過編輯bootstrap_median的定義來實現(xiàn)它。 計算中唯一的變化是用二次樣本的吸煙者比例代替中位數(shù)彰阴。 該代碼假定數(shù)據(jù)列由布爾值組成瘾敢。 其他的改變只是數(shù)組的名字,來幫助我們閱讀和理解我們的代碼尿这。

def bootstrap_proportion(original_sample, label, replications):

    """Returns an array of bootstrapped sample proportions:
    original_sample: table containing the original sample
    label: label of column containing the Boolean variable
    replications: number of bootstrap samples
    """

    just_one_column = original_sample.select(label)
    proportions = make_array()
    for i in np.arange(replications):
        bootstrap_sample = just_one_column.sample()
        resample_array = bootstrap_sample.column(0)
        resampled_proportion = np.count_nonzero(resample_array)/len(resample_array)
        proportions = np.append(proportions, resampled_proportion)

    return proportions

讓我們使用bootstrap_proportion來構(gòu)建總體的母親吸煙者百分比的 95% 置信區(qū)間簇抵。 該代碼類似于均值和中位數(shù)的相應(yīng)代碼。

# Generate the proportions from 5000 bootstrap samples
bstrap_props = bootstrap_proportion(baby, 'Maternal Smoker', 5000)

# Get the endpoints of the 95% confidence interval
left = percentile(2.5, bstrap_props)
right = percentile(97.5, bstrap_props)

make_array(left, right)
array([ 0.36286201,  0.41908007])

置信區(qū)間是 36% 到 42%射众。原始樣本的百分比 39% 非常接近于區(qū)間的中心碟摆。你可以在下面看到:

resampled_proportions = Table().with_column(
    'Bootstrap Sample Proportion', bstrap_props
)
resampled_proportions.hist(bins=15)
plots.plot(make_array(left, right), make_array(0, 0), color='yellow', lw=8);

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-15.png

自舉法的注意事項

自舉法是一個優(yōu)雅而強大的方法。在使用之前叨橱,記住一些要點非常重要焦履。

以大型隨機(jī)樣本開始。如果你不這樣做雏逾,該方法可能無法正常工作。它的成功基于大型隨機(jī)樣本(因此也從樣本中重采樣)郑临。平均定律說栖博,如果隨機(jī)樣本很大,這很可能是真的厢洞。

為了近似統(tǒng)計量的概率分布仇让,最好多次復(fù)制重采樣過程。數(shù)千次重復(fù)將產(chǎn)生樣本中位數(shù)分布的正確近似躺翻,特別是如果總體分布存在峰值并且不是非常不對稱的話丧叽。在我們的例子中,我們使用了 5000 次重復(fù)公你,但一般會推薦 10000 次踊淳。

自舉百分位數(shù)方法適用于基于大型隨機(jī)樣本,估計總體中位數(shù)或均值陕靠。但是迂尝,它也有其局限性,所有的估計方法也是如此剪芥。例如垄开,在以下情況下,它預(yù)期沒有效果税肪。

  • 目標(biāo)是估計總體中的最小值或最大值溉躲,或非常低或非常高的百分位數(shù)榜田,或受總體中稀有元素影響較大的參數(shù)。
  • 統(tǒng)計量的概率分布不是近似鐘形的锻梳。
  • 原始樣本非常小箭券,比如 10 或 15。

使用置信區(qū)間

def bootstrap_median(original_sample, label, replications):

    """Returns an array of bootstrapped sample medians:
    original_sample: table containing the original sample
    label: label of column containing the variable
    replications: number of bootstrap samples
    """

    just_one_column = original_sample.select(label)
    medians = make_array()
    for i in np.arange(replications):
        bootstrap_sample = just_one_column.sample()
        resampled_median = percentile(50, bootstrap_sample.column(0))
        medians = np.append(medians, resampled_median)

    return medians
def bootstrap_mean(original_sample, label, replications):

    """Returns an array of bootstrapped sample means:
    original_sample: table containing the original sample
    label: label of column containing the variable
    replications: number of bootstrap samples
    """

    just_one_column = original_sample.select(label)
    means = make_array()
    for i in np.arange(replications):
        bootstrap_sample = just_one_column.sample()
        resampled_mean = np.mean(bootstrap_sample.column(0))
        means = np.append(means, resampled_mean)

    return means
def bootstrap_proportion(original_sample, label, replications):

    """Returns an array of bootstrapped sample proportions:
    original_sample: table containing the original sample
    label: label of column containing the Boolean variable
    replications: number of bootstrap samples
    """

    just_one_column = original_sample.select(label)
    proportions = make_array()
    for i in np.arange(replications):
        bootstrap_sample = just_one_column.sample()
        resample_array = bootstrap_sample.column(0)
        resampled_proportion = np.count_nonzero(resample_array)/len(resample_array)
        proportions = np.append(proportions, resampled_proportion)

    return proportions

置信區(qū)間只有一個目的 - 根據(jù)隨機(jī)樣本中的數(shù)據(jù)估計未知參數(shù)唱蒸。在最后一節(jié)中邦鲫,我們說區(qū)間(36%, 42%)是總體中吸煙者百分比的約 95% 的置信區(qū)間。正式的表述方式為神汹,據(jù)我們估計庆捺,總體中的吸煙者比例在 36% 到 42% 之間,我們的估計過程在 95% 的時間內(nèi)是正確的屁魏。

克制住將置信區(qū)間用于其他目的的沖動滔以,這很重要。例如氓拼,回想一下你画,我們計算了區(qū)間(26.9 yr, 27.6 yr),作為母親平均年齡的約 95% 的置信區(qū)間桃漾。區(qū)間的一個令人驚訝的常見誤用是得出這樣的結(jié)論坏匪,約 95% 的女性在 26.9 歲至 27.6 歲之間。你不需要怎么了解置信區(qū)間撬统,來查看這是不是正確的 - 你不會預(yù)計 95% 的母親的年齡在這個較小的范圍內(nèi)适滓。實際上,抽樣年齡的直方圖顯示出相當(dāng)多的變化恋追。

baby = Table.read_table('baby.csv')
baby.select('Maternal Age').hist()

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-16.png

抽樣年齡的一小部分在(26.9, 27.6)的區(qū)間內(nèi)凭迹,你可能會預(yù)計總體中的百分比很小。 區(qū)間只是估計一個數(shù)字:總體中所有年齡的平均值苦囱。

但是嗅绸,除了僅僅告訴我們這個參數(shù)有多大之外,用置信區(qū)間來估計一個參數(shù)確實有重要的用處撕彤。

使用置信區(qū)間來檢驗假設(shè)

我們總體(年齡)均值的 95% 置信區(qū)間是 26.9 歲到 27.6 歲鱼鸠。假設(shè)有人想要測試以下假設(shè):

原假設(shè)。人口的平均年齡是 30 歲羹铅。

備選假設(shè)瞧柔。人口的平均年齡不是 30 歲。

那么睦裳,如果你使用 5% 的截斷值作為 P 值造锅,則會拒絕原假設(shè)。這是因為總體平均值 30 不在 95% 置信區(qū)間內(nèi)廉邑。在 5% 的顯著性水平上哥蔚,30 對于人口平均值并不合理倒谷。

置信區(qū)間的使用是置信區(qū)間和檢驗之間二元性結(jié)果:如果你正在測試總體平均值是否是特定值 x,并且你使用的 5% 截斷值作為 P 值糙箍,那么如果 x 不在平均值的 95% 置信區(qū)間內(nèi)渤愁,你將拒絕原零假設(shè)。

這可以由統(tǒng)計理論來確定深夯。在實踐中抖格,它只是歸結(jié)為,檢查原假設(shè)中指定的值是否在置信區(qū)間內(nèi)咕晋。

如果你使用 1% 的截斷值作為 P 值雹拄,你必須檢查,原假設(shè)中指定的值是否在總體均值的 99% 置信區(qū)間內(nèi)掌呜。

粗略地說滓玖,如果樣本量很大,這些陳述也適用于總體比例质蕉。

雖然我們現(xiàn)在有一種方法势篡,使用置信區(qū)間來檢驗一種特定假設(shè),但是你可能想知道模暗,測試總體(年齡)的均值是否等于 30 的意義禁悠。實際上,這個意義并不清楚兑宇。但是在某些情況下碍侦,對這種假設(shè)的檢驗既自然又有用。

我們將在數(shù)據(jù)的背景下來研究它顾孽,這些數(shù)據(jù)是霍奇金病治療的隨機(jī)對照試驗中收集的信息的子集”裙妫霍奇金病是一種通常影響年輕人的癌癥若厚。這種疾病是可以治愈的,但治療可能非常艱難蜒什。該試驗的目的是找出治療癌癥的劑量测秸,并且將對患者的不利影響最小化。

這張表格包含治療對 22 名患者肺部的影響的數(shù)據(jù)灾常。這些列是:

  • 身高(厘米)
  • 覆蓋物輻射的測量(頸部霎冯,胸部,手臂下)
  • 化療的測量
  • 基線下钞瀑,即在治療開始時的肺健康得分沈撞;較高的分?jǐn)?shù)對應(yīng)于更健康的肺
  • 治療后 15 個月,相同的肺的健康得分
hodgkins = Table.read_table('hodgkins.csv')
hodgkins
height rad chemo base month15
164 679 180 160.57 87.77
168 311 180 98.24 67.62
173 388 239 129.04 133.33
157 370 168 85.41 81.28
160 468 151 67.94 79.26
170 341 96 150.51 80.97
163 453 134 129.88 69.24
175 529 264 87.45 56.48
185 392 240 149.84 106.99
178 479 216 92.24 73.43

(省略了 12 行)

我們將比較基準(zhǔn)和 15 個月的得分雕什。 由于每行對應(yīng)一個病人缠俺,我們說基線得分的樣本和 15 個月得分的樣本是成對的 - 它們不是每組 22 個值的兩組显晶,而是 22 對值,每個病人一個壹士。

一眼望去磷雇,你可以看到,15 個月的得分往往低于基線得分 - 抽樣患者的肺似乎在治療后 15 個月更差躏救。 這個由drop列主要是正值來證實唯笙,它是基線得分減去 15 個月的得分。

hodgkins = hodgkins.with_column(
    'drop', hodgkins.column('base') - hodgkins.column('month15')
)
hodgkins

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-17.png

height rad chemo base month15 drop
164 679 180 160.57 87.77 72.8
168 311 180 98.24 67.62 30.62
173 388 239 129.04 133.33 -4.29
157 370 168 85.41 81.28 4.13
160 468 151 67.94 79.26 -11.32
170 341 96 150.51 80.97 69.54
163 453 134 129.88 69.24 60.64
175 529 264 87.45 56.48 30.97
185 392 240 149.84 106.99 42.85
178 479 216 92.24 73.43 18.81

(省略了 12 行)

hodgkins.select('drop').hist(bins=np.arange(-20, 81, 20))
np.mean(hodgkins.column('drop'))
28.615909090909096

但是盒使,這可能是機(jī)會變異的結(jié)果嗎崩掘? 似乎并不如此,但數(shù)據(jù)來自隨機(jī)樣本忠怖。 難道在整個人群中呢堰,平均下降值只有 0 嗎?

為了回答這個問題凡泣,我們可以設(shè)定兩個假設(shè):

原假設(shè):總體(下降值)均值為 0枉疼。

備選假設(shè):總體(下降值)均值不為 0。

為了使用 1% 的截斷值作為 P 值來驗證這個假設(shè)鞋拟,讓我們?yōu)榭傮w(下降值)均值構(gòu)建近似 99% 置信區(qū)間骂维。

bstrap_means = bootstrap_mean(hodgkins, 'drop', 10000)

left = percentile(0.5, bstrap_means)
right = percentile(99.5, bstrap_means)

make_array(left, right)
array([ 17.25045455,  40.60136364])
resampled_means = Table().with_column(
    'Bootstrap Sample Mean', bstrap_means
)
resampled_means.hist()
plots.plot(make_array(left, right), make_array(0, 0), color='yellow', lw=8);

https://gitee.com/wizardforcel/data8-textbook-zh/raw/master/img/11-18.png

總體均值的 99% 置信區(qū)間是約 17 到約 40。區(qū)間不包含 0贺纲。因此航闺,我們拒絕原假設(shè)。

但是請注意猴誊,我們所做的不僅僅是簡單得出結(jié)論:總體均值不是 0潦刃,我們估計了均值的幅度是多大。這比僅僅說“不是 0”更有用懈叹。

對于準(zhǔn)確性的注解:我們的置信區(qū)間相當(dāng)寬泛乖杠,主要有兩個原因:

  • 置信水平很高(99%)。
  • 與我們之前的例子相比澄成,樣本量相對較小胧洒。

在下一章中,我們將研究樣本大小如何影響準(zhǔn)確性墨状。我們還將研究卫漫,樣本均值的經(jīng)驗分布為何經(jīng)常出現(xiàn)鐘形,盡管底層數(shù)據(jù)的分布根本不是鐘形的肾砂。

尾注

一個領(lǐng)域的術(shù)語通常來自該領(lǐng)域的主要研究人員列赎。首先提出自舉技術(shù)的 Brad Efron 用了一個美國血統(tǒng)的術(shù)語。中國統(tǒng)計學(xué)家不甘示弱镐确,提出了自己的方法粥谬。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肛根,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子漏策,更是在濱河造成了極大的恐慌派哲,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掺喻,死亡現(xiàn)場離奇詭異芭届,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)感耙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門褂乍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人即硼,你說我怎么就攤上這事逃片。” “怎么了只酥?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵褥实,是天一觀的道長。 經(jīng)常有香客問我裂允,道長损离,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任绝编,我火速辦了婚禮僻澎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘十饥。我一直安慰自己窟勃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布逗堵。 她就那樣靜靜地躺著秉氧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪砸捏。 梳的紋絲不亂的頭發(fā)上谬运,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天隙赁,我揣著相機(jī)與錄音垦藏,去河邊找鬼。 笑死伞访,一個胖子當(dāng)著我的面吹牛掂骏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厚掷,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼弟灼,長吁一口氣:“原來是場噩夢啊……” “哼级解!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起田绑,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勤哗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掩驱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芒划,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年欧穴,在試婚紗的時候發(fā)現(xiàn)自己被綠了民逼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡涮帘,死狀恐怖拼苍,靈堂內(nèi)的尸體忽然破棺而出伊磺,到底是詐尸還是另有隱情社付,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布昏苏,位于F島的核電站同蜻,受9級特大地震影響棚点,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜湾蔓,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一瘫析、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧默责,春花似錦贬循、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至媒熊,卻和暖如春奇适,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芦鳍。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工嚷往, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柠衅。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓皮仁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贷祈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容