µƒ tlD t©\ –… ¨‡ êÃ Ñ Version 2.0.25 µƒ tlD t©\ –… ¨‡ êÃ Ñ Version 2.0.25 àÌ: t⌘ò – ê: Allen B. Downey xwMOOC http://www.xwmooc.net \m¥ ëå © 2015 t⌘ò Copyright © 2014 Allen B. Downey. Green Tea Press 9 Washburn Ave Needham MA 02492 Permission is granted to copy, distribute, and/or modify this document under the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License, which is available at http://creativecommons.org/licenses/ by-nc-sa/4.0/. The original form of this book is LATEX source code. Compiling this code has the effect of generating a device-independent representation of a textbook, which can be converted to other formats and printed. The LATEX source for this book is available from http://thinkstats2.com. ⌧8 ⌧1 \m¥⇣ ⌧8 ¿ L¿ Ωÿ\ ɸ ⌅ ‰x ¯ò ÑX ⌅X, â ¨‡¥ƒX ¿T $‡ ൻ‰. t ¿T §–î (ω ໵»‰. ∞≈ ÖX † (Logical Thinking), 2080| ç¯\ µƒ ⌧ ⇠Y ¨‡ ¨‡(Experimental Thinking), 21 80–î ÙË⇧ ¨‡%(Computational Thinking)t|‡ i»‰. ¯¨‡, 8 ¡@ ⌅\¯ò D Xî ¨å¸ ⌅\¯® ⌧ ¨å<\ òX¥ ë˘T⇠¥ ‡ ൻ‰. µƒY¸ ÙË0 ¸Yt ⌘©⌧ 0ƒYµ(Machine Learning)@ ¸Y¸ 0 @ <`t‡, x8¨å, ï, Learning)<\ ¥• Ò pX ⌅Ñ|– ©à •D ¯‰<p %Ï›(Deep %D ít‡ ൻ‰. òD , µƒY¸ ⌅ıêà 0∏ ⌅à L‡⌧, —@\à ¥h 8 0‡X µƒ ò¨ ⌅lò ttX‡ ˘à ` ⌅ Dî 0¯0\ ภ| tD Ö » µ»‰. t– D»| t⌧ ÙË0î 3D ⌅∞⇧, \⌥, ¨<x07, xı¿•¸ ∞iXÏ ı•, ¨4‰, î Ä@ å%¸ |, x‹ <\ x¥ ò@ D⌧ ˘å⇠ ¨å–å DX¿ ª\ 99% ¨å–åî T∏\ ¯ò| ⌧‹X‡ ൻ‰. t⌥å D ©à ¿T⇠¥ î XΩ– ÏÏÑt ¸ƒåD ⇠>‡, 0ƒ@X Ω¡ Dt| i»‰. ÙË⇧ ¨‡%D î‡ T) ` ⇠ àî •%, pt0| t≈X‡ \©Xî •%@ ^<\ }0, 0, HX0@ Tॠ⌅lò u | ⇠î 0¯ x 0 Ö»‰. $ X‹Ë¥, ¨⇧§ ¥ ¥⌧, ¸Y ÙË⇧D ⌅\ $ ∞1 í@ ÙË0 ∏¥ ( tl), Äù⌧ å§ 4¥x, }‡ › \å ‰§»(Software Carpentry, vi ⌧ 0 •. ⌧8 OpenIntro Statistics)@ hÿ, l¨–t å§ å⌅ ‰<à |t §@ $ ∏Ë¥ |t §– 0| –¯å§@ hÿ ⌅lò ê \t \©` ⇠ àî ê ¸Ã8| i»‰. 0ƒ@X Ω¡, t⌧ ¸¿\l, ŸÃ, î. ¿ q¸ hÿ pxX ¥h ⌅–⌧ t ⌧⌅ —§T 4l(xwMOOC) ⌧2 DX8 hÿ i»‰. ⌧8 tE@ –… êÃ Ñ – ê pt0KD • 8$0@ \ ‰© x ƒl| å⌧X‡ à‰. t EX l1@ ¿‡ ë≈` L ¨©Xî ¸ D ⇠X‡ à‰: ⌧(importing and cleaning): pt0 ƒ∆t, µ¡ pt0| àÏ@⌧, ¥§ ›t‡¿ ⌧X‡ ¿XX‡, ¿Ì ¸ D µt⌧ ®‡ Ét ê¡⇠¿ J‡ (⌅X‰î ÉD ⇣ÄXî pî ‹⌅¸ x%t ,Ï⌧‰. • Ë¿… –…(Single variable explorations): êî µ¡ \à ¿⇠ Xò à t à p¨X‡, ¿⇠ …‡D LD¥‡, ✓‰– \ ÑÏ| ¥¥Ù‡, \ î} µƒ…D ‡tt⌧ êÃÑ – )⇠\‰. • ›¿¥ –…(Pair-wise explorations): ¿⇠ ¨t– îp, \@ ∞⇣ƒ| ¥¥Ù‡, ¡ ƒ@ •\ ƒ| ›ƒX iD ƒ∞\‰. • ‰¿… Ñ (Multivariate analysis): Ã} ¿⇠ ¨t– ÑÖ\ ƒ à ‰t, µ⌧ ¿⇠(control variable)| ‰⌘ å¿– î t⌧ ÄT ı°\ ƒ| p¨\‰. • î ¸ $Ä (Estimation and hypothesis testing): µƒ ∞¸| Ù‡ ` L, ‰L 8 ¿ »8– ‰‹ Ÿ|\ ! D ‰‹\‰t, º»ò Œ@ ¿Ÿ1t \ ®¸ ∞L8x¿ƒ º»ò p ? ıXî Ét ⌘îX‰: ®¸ ¡⇠î ? ÑÖ •\ ? • ‹ T(Visualization): –…ŸH–, ‹ Tî •\ ¥îp ॠ⌘î\ ƒl‰. ¯Ït, Ã} ÑÖ\ ®¸ ƒ@ ®¸| >D t à p¨\ ⇠t, ‹ Tî ∞¸| X¨åµXî ®¸ x )›t ⌧‰. 2. ⌧8 vii ⌘¸ï(computational approach)| ËXîp ⇠Y t E@ ÙË0 – ⌘¸ï t⌧ á ¿ •⇣t à‰: • êî ⇠Y \0ï Ù‰î ‰. |⇠ <\, L8–, ≈ê • ÄÑX Dt¥| tl T‹î ÄT tl T‹\ ⌧‹\ ≈1t à‰; ⇣\, ‰â •X0 ‰¥\‹X‡, ‰âX‡, ¿ t ¸ ⇠ à‰. •@ µ8⌧ Ïh⇠¥⌧ ≈ê Yµ\ ¥©D T ⌧⌧X‡ T` ⇠ à‰. ⌅\¯®D ë1` L, T‹\ tt\ ÉD \⌅\‰; ⌅\¯®D ÑEXî ŸH–, tt\ Ƀ ‡` ⇠ à‰. • |Ä µ8⌧î ‰ÿ¸ ⇠¥ µƒ âŸD L§∏` ⇠ à0. |‰ ¥, ÑX \¯D ›1X‡ iD ƒ∞h<\h ⌘Ï˘\ ¨(Central Limit Theorem, CTL)| –…` ⇠ à‰. ∞¸| ‹ Tt⌧ \ CLTt ŸëX‡, ∏⌧ ŸëX¿ Jî¿ ‹\‰. • ⇠Y <\ ttX0 ¥$¥ |Ä Dt¥| ®X‹ÿD µt⌧ ttX | ‰¥, P-✓D ÑX ®X‹ÿD ‰ât⌧ ˘¨TXîp, tÉ 0 }‰. t P-✓ X¯| ttXîp Ù Xî X¯ • t Et î© ⌅\¯ò | pX ®‡ Û–⌧ à‰. ∏¥( tl)– 0⇠X‡ à¥⌧, ≈êî pt0 8, ⇠ à‰. µƒ ƒl– fi∞ fiò pt0K– ⌧\D ›D ¿ Jî‰. t E@ ⌅\ ∏– 0⇠\ ⌘¸ïD ËX‡ à‰. 0 ⌅\ ∏\ ë≈\‰. \Y0 ŸH µƒ àî pt0KD >‡, Yµ\ ⌧⇠‡ ê ⇠≈–⌧, Y›‰t \Y »8D ⌧‹X‡, »8D ‰ ⇠ 0ïD ¯x pt0– ©\‰. êX ⌘¸ïD µƒÑ – ‹X0 ⌅t⌧, E ⌅¥| µXî ¨@ t E– ⌧‹⇠¥ à‰. Ppp êÃúò–⌧ pt0| ¨©\‰: • ¯m »— µ⌧ CDC) – )<0(Centers for Disease Control and Prevention, ⇠â\ “ q ›\, ∞< ✏ t<, ч, ú∞, <Ñ, ¯¨‡ ®@ t \ Ù”| ⇠—\ q1• m p¨(National Survey of Family Growth, NSFG) pt0. (http://cdc.gov/nchs/nsfg.htm 8p) viii ⌧ 0 •. ⌧8 • ¯m »— µ⌧ CDC) )<0(Centers for Disease Control and Prevention, ⇠â\ ⟠⌅ÿ îx ⇣‹ ‹§\ p¨ êÃ(Behavioral Risk Factor Surveillance System Survey Data)\ “¯m–⌧ t pt¸ ⌅ÿ âŸD î ”\‰. (http://cdc.gov/BRFSS/ 8p.) ⌧î IRS(¯m m8≠), ¯m xlµƒ, Ù§§ »|§–⌧ ò( pt0| ‰x ¨©\‰. Think Stats P௠⇣@ ´à¯ ⇣– ò( |Ä •D ÏhX‡ à¿Ã, ¡˘à Œt ⌧ë⇠»‡, å¿Ñ , ‹ƒÙ Ñ , ›tÑ , t )ï– \ »\¥ •t î ⇠»‰. t⌅ ⇣@ pandas, SciPy, StatsModels | ¨©X¿ Jî‰. ¯ò⌧ t ®‡ P¨ ⌧3 ê » Ét‰. tED ë\ )› »ED —D` L, Ùµ t⌅ P¸⌧| }‡ ‹ë\‰. ∞¸ <\, ÄÑX E@ pX ⇡@ ⌧⌧\ ⇡@ P¨| Ùå⌧‰. êî t⌅ )ïD ›X¿ JX‰. ¨‰, êî ED —D` L pX ¥§ ú% ⌧ P¨| ¨©X¿ JX‰: • êX ©\î t P¨– »\¥ ⌘¸ïD ®…X‡ê à‰. ¯ò⌧, 0t ⌘¸ï– ¡˘à xú⇠¿ J8 –à‰. • êî t ED ê Xt⌧ ¿•D |t §\ t© •Xå É$‡, ëå ⌧\– ‡ ˆ¿ Jƒ] U‰à X‡ê à‰. • tEX Œ@ ≈êî ú⇣⌧ P¨| ò ƒ⌧ – ⌘¸` ⇠ ∆‰. ¯ò⌧, x07– ê \t t© •\ ê–– t 8pX$‡ x%à‰. • ¸p ‰¥| ¿¿Xî |Ä ¨å@ ⌅ê Ùà ⌅©<\ ¨©Xî Ét å<t‡ ‡∞ ®¥» ⇠ à‰‡ › \‰. ´à¯ ⇣–⌧î fi∏ ⇠ à ¿Ã, P௠⇣– t⌧î ¿¨‰‡ › \‰. ¯ò⌧ êî êX t `D L§∏X‡ê à‰. ê ‰x ¥§ ÉÙ‰ƒ T ¨©\ –ú ê–@ ⌅§<D‰. |⇠ <\, µƒ ¸⌧– t⌧ ê }@ 0¨î ‰∞ Ãmà‰( êî ⌅Á |Ä ë@ 4. T‹ ¨© ix ¿ΩD à¿Ã). ≈ê êî tE ⌅⇠ <\ ⌅§<D òt¿ 8p| Ïht⌧, ¡l| 0| 8 å•\‰; Œ@ Ω∞–, ⌅§<D òt¿ ê0 t Hò ÛD t¥ î‰. tE– ¨©⌧ ©¥@ \0ï@ 0t¿ JD i¨ ∆‰t ⌅§<tD@ | 1D fiƒ‰. ¨ î ∏⌅® ⇠Y8¡(Wolfram MathWorld)¸ ê ⌧¨\ ‰x ©\ P¨ ' µƒ ϸ(Reddit statistics forum, http://www.reddit.com/r/statistics)t‰. ⌧4 T‹ ¨© t E–⌧ ¨©⇠î pt0@ T‹î https://github.com/AllenDowney/ ThinkStats2 ¨t∏–⌧ t© •X‰. Git@ Ñ<⌧¥‹§\<\ ⌅\ ∏| l1Xî |D î ` ⇠ àå \‰. Git ⌧¥ Dòàî (repository)|‡ Äx‰. GitHub@ Git •å– \ | ®LD •å •ı⌅¸ ∏¨\ ˘x 0òt§| ⌧ıXî 8§⇧ ⌧D§‰. ê •åX GitHub Hòt| µt T‹| ë≈Xî á ¿ )ït ⌧ı⌧‰: • Ïl(Fork) ѺD Ï êX GitHub •å– \ ¨¯D ›1\‰. Ã} GitHub ƒ t ∆‰t, ƒ D Xò ›1\‰. Ïπ\ ƒ–, t E< \ ë≈Xt⌧ ë1\ T‹| î ` ⇠ àî ¯xX å ⌧‰. ¯¨‡ ò⌧, 0– • 9@ •å| GitHub– •å| ı⌧` ⇠ àîp, tî ¯x \Ï ÙË | ¨¯D ›1` ⇠ à‰î ÉD X¯\‰. êX •å| ı⌧` ⇠ à‰. ı⌧Xîp GitHub ƒ t DîX ¿î J¿Ã, GitHub– ¿Ω¨mD ‰‹ ⇠ ` ⇠î ∆‰. • Ã} GitD ⌅ ¨©X‡ ˆ¿ J‰t, GitHub òt¿ $xΩ XË– ⌅ X\ ѺD ¨©t⌧ Uï⌧ Zip ®‡ T‹î ¿Xë≈ ∆t tl 2@ |D ‰¥\‹` ⇠ à‰. tl 3– ŸëXƒ] ë1⇣‰. Continuum Analytics–⌧ ⌧⌧⌧ DòX‰(Anaconda)| ¨©t⌧ t ED ⌧ ⌧àîp, DòX‰î T‹| ‰â(¯¨‡ ¯ t¡)Xîp Dî\ ®‡ )§¿| x ⌧ 0 •. ⌧8 ÏhX‡ àî 4à tl 0Ï⇣t‰. $XX0 }‰‡ ⇣ êî DòX‰ Ë\‰. 0¯$ <\ ‹§\ ⇠ t Dà ¨©ê ⇠ –⌧ $X` ⇠ à‰. ¯ò ⌧ ¨ê å\t Dî∆‰. ¯¨‡ DòX‰î tl 2@ tl 3| ®P ¿– \‰. DòX‰| http://continuum.io/downloads ˘¨t∏–⌧ ‰¥\‹` ⇠ à‰. Ã} DòX‰| ¨©X0 –X Jî‰t, ‰L )§¿ DîX‰: • pt0| \⌅X‡ Ñ Xî pandas, http://pandas.pydata.org/; • 0¯ x ⇠X ƒ∞D ⌅\ NumPy, http://www.numpy.org/; • µƒ| Ïh\ ¸Y ƒ∞D ⌅\ SciPy, http://www.scipy.org/; • å¿Ñ ¸ ‰x µƒ Ñ D ⌅\ StatsModels, http: //statsmodels.sourceforge.net/; • ‹ T| ⌅\ matplotlib, http://matplotlib.org/. t‰ )§¿ Tà ¨©⇠‡ à¿Ã, ®‡ tl $X 0Ï⇣– Ïh⌧ É@ D»‰. ¯¨‡ |Ä XΩ–⌧î $XX0 L‰m‰. Ã} $X– ¥$¿D ™î ‰t, êî %Xå DòX‰ 9@ t‰ )§¿ Ïh⌧ ‰x tl 0Ï⇣ ¨©D îú\‰. •å| ı⌧Xpò Uï |D | ‰L– ThinkStats2/code ÙT– nsfg.py |t à¥| ⌧‰. Ã} nsfg.py |D ‰â‹§t, pt0 |D }‡, L§ ∏| ‰âX‡ “All tests passed.” ⇡@ T‹¿| Tt– ú%\‰. Ã} 0 $X à‰t, D»ƒ $X ÄÑX µ@ Dî àî )§¿ 8$ àLD X¯\‰. tl §lΩ∏| ¨©X¿Ã, |Äî IPython x∏ÅD ¨ ©\‰. Ã} IPython x∏ÅD t⌅– ¨©X¿ JX‰t, http://ipython. org/ipython-doc/stable/notebook/notebook.html ò( 8⌧–⌧ ‹ët Ùî ÉD ⌧H\‰. ¥¿• 0•D Ïh\ uÏ SciPy î ò ®tî ≈ê| X‰t, |Ä tl ∏¥– \⇡X¿Ã, pandas, NumPy, X‡ ED D t ¯ ⇠ƒ à‰. à‰. Ã} t ®»– t¯ \⇡ 4. T‹ ¨© ≈ê xi | ‰¥ i∞¸ L‡¨òD Ïh\ 0¯ ⇠YD L‡ à‰‡ |Ä •å–⌧ ¯ ÑY ⌧PD ê \‰. ∏ X¿Ã, ¯ ÑYD ¡⌘ ` Dîî ∆‰. Ã} µƒ| ∞T ıÄ\ t ∆‰t, t Et Ï D ‹ëXî ã@ ‹⌧⇣t É<\ › \‰. ¯¨‡ Ã} ⌅µ x µƒY ⇠≈D ‰»‰t, t Et ê¡⌧ ÄÑD ⇠¨Xîp ƒ¿t ⇠8 l›\‰. — Allen B. Downey î ,∞ ı ÙË0 ¸Y¸ P⇠‰. 0Ïê ©] Ã} ⌧Htò ⇠ ¨mt à‰t, ê–å ⌅ê∞∏D downey@allendowney.com ¸å\ Ù¥¸8î. Ã} Ù¥¸‡ <‹1– ⇠ D Xå ⇠t, (|Ï|î î≠t πƒà ∆‰t) 0Ïê ©]– î ‹⌧‹¥ ÉÖ»‰. Ã} $X ò¿ú 8•X |Ä| Ét‰. òt¿@ ¥ƒ Ïh\‰t, ê Ä…X0 ⇠‘` à8ƒ ã¿Ã, ë≈X0î ¯‰¿ }¿ J‰. ⇣¨i»‰. • Lisa Downey and June Downey read an early draft and made many corrections and suggestions. • Steven Zhang found several errors. • Andy Pethan and Molly Farison helped debug some of the solutions, and Molly spotted several typos. • Andrew Heine found an error in my error function. • Dr. Nikolas Akerblom knows how big a Hyracotherium is. • Alex Morrow clarified one of the code examples. • Jonathan Street caught an error in the nick of time. • Gábor Lipták found a typo in the book and the relay race solution. • Many thanks to Kevin Smith and Tim Arnold for their work on plasTeX, which I used to convert this book to DocBook. xii ⌧ 0 •. ⌧8 • George Caplan sent several suggestions for improving clarity. • Julian Ceipek found an error and a number of typos. • Stijn Debrouwere, Leo Marihart III, Jonathan Hammler, and Kent Johnson found errors in the first print edition. • Dan Kearney found a typo. • Jeff Pickhardt found a broken link and a typo. • Jörg Beyer found typos in the book and made many corrections in the docstrings of the accompanying code. • Tommie Gannert sent a patch file with a number of corrections. • Alexander Gryzlov suggested a clarification in an exercise. • Martin Veillette reported an error in one of the formulas for Pearson’s correlation. • Christoph Lendenmann submitted several errata. • Haitao Ma noticed a typo and and sent me a note. • Michael Kearney sent me many excellent suggestions. • Alex Birch made a number of helpful suggestions. • Lindsey Vanderlyn, Griffin Tschurwald, and Ben Small read an early version of this book and found many errors. • John Roth, Carol Willing, and Carol Novitsky performed technical reviews of the book. They found many errors and made many helpful suggestions. • Rohit Deshpande found a typesetting error. • David Palmer sent many helpful suggestions and corrections. • Erik Kulyk found many typos. • Nir Soffer sent several excellent pull requests for both the book and the supporting code. • Joanne Pratt found a number that was off by a factor of 10. (@ v ⌧8 ⌧1 \m¥⇣ ⌧8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . v ⌧2 ⌧8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi ⌧3 ⌧4 ⌧1• ⌧1 ê tED ë\ )› . . . . . . . . . . . . . . . . . . . . . viii T‹ ¨© . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . –… ⌧2 1 êÃ Ñ µƒ ix ⌘¸)ï . . . . . . . . . . . . . . . . . . . . . . . . . . 2 p¨ (National Survey of Family Growth) . . . 3 q 1• m ⌧3 pt0 8$0 . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ⌧4 pt0⌅ Ñ(DataFrames) . . . . . . . . . . . . . . . . . . . . 5 ⌧5 ¿⇠ (Variables) . . . . . . . . . . . . . . . . . . . . . . . . . . 6 ⌧6 ¿X (Transformation) . . . . . . . . . . . . . . . . . . . . . . . 7 ⌧7 ¿˘1 Ĩ(Validation) . . . . . . . . . . . . . . . . . . . . . . 8 ⌧8 t ⌧9 µ 8⌧ (Exercises) . . . . . . . . . . . . . . . . . . . . . . . 11 (Interpretation) . . . . . . . . . . . . . . . . . . . . . . . . 10 ⌧ 10 ©¥¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 xiv (@ ⌧2• ÑÏ (Distribution) 15 ⌧1 ৆¯® . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 ⌧2 ৆¯® \⌅X0 . . . . . . . . . . . . . . . . . . . . . . . . 16 ⌧3 ৆¯® ¯¨0 (Plotting histograms) . . . . . . . . . . . . 16 ⌧4 NSFG ¿⇠ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 ⌧5 πt⇣ (Outliers) . . . . . . . . . . . . . . . . . . . . . . . . . . 19 ⌧6 ´à¯ Dt (First babies) . . . . . . . . . . . . . . . . . . . . . 20 ⌧7 ÑÏ î}X0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 ⌧8 Ñ∞ (Variance) . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 ⌧9 ®¸ l0 (Effect size) . . . . . . . . . . . . . . . . . . . . . . . 24 ⌧ 10 ∞¸ Ù‡X0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 ⌧ 11 µ 8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 ⌧ 12 ©¥¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 ⌧3• U` »… h⇠ 27 ⌧1 Pmf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 ⌧2 PMF ⌧3 ‰x ‹ T )ï . . . . . . . . . . . . . . . . . . . . . . . . . . 30 ⌧4 Y ⌧5 pt0⌅ Ñ xqÒ (DataFrame indexing) . . . . . . . . . . 34 ⌧6 µ 8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 ⌧7 ©¥¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 ⌧4• o<\ ¯¨0 . . . . . . . . . . . . . . . . . . . . . . . 29 l0 (Ï≈§ (class size paradox) . . . . . . . . . . . . . 31 ⌅ ÑÏh⇠ 39 ⌧1 PMFX \ƒ⇣ . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 ⌧2 1Ñ⌅⇠ (Percentiles) . . . . . . . . . . . . . . . . . . . . . . . 40 ⌧3 CDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 xv (@ ⌧4 CDF \⌅X0 (Representing CDFs) . . . . . . . . . . . . . . . 42 ⌧5 CDF DPX0 . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 ⌧6 1Ñ⌅⇠ 0⇠ µƒ… (Percentile-based statistics) . . . . . . . 44 ⌧7 ú⇠ (Random numbers) . . . . . . . . . . . . . . . . . . . . . 45 ⌧8 1Ñ⌅ ⌧⌅ DPX0 . . . . . . . . . . . . . . . . . . . . . . . 46 ⌧9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 ⌧ 10 ©¥¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 ⌧5• ÑÏ ® T (Modeling distributions) 49 ⌧1 ¿⇠ÑÏ (exponential distribution) . . . . . . . . . . . . . . . 49 ⌧2 ‹ ÑÏ (normal distribution) . . . . . . . . . . . . . . . . . 52 ⌧3 ‹U`¯º (Normal probability plot) . . . . . . . . . . . . . 53 ⌧4 \¯ ‹ÑÏ (lognormal distribution) . . . . . . . . . . . . . 56 ⌧5 † ÑÏ (Pareto distribution) . . . . . . . . . . . . . . . . . 57 ⌧6 ú⇠ ›1X0 (Generating random numbers) . . . . . . . . . 59 ⌧7 \ ® x ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 ⌧8 µ8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 ⌧9 ©¥ ¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 ⌧6• U` ƒh⇠ 65 ⌧1 PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 ⌧2 u ƒî ⌧3 ÑÏ ⌅ ÑÃl (distribution framework) . . . . . . . . . . . 68 ⌧4 Hist l⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 ⌧5 Pmf l⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 ⌧6 Cdf l⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 ⌧7 ` (Moments) . . . . . . . . . . . . . . . . . . . . . . . . . . 72 (Kernel density estimation) . . . . . . . . . . . . . 67 xvi (@ ⌧8 \ƒ (Skewness) . . . . . . . . . . . . . . . . . . . . . . . . . . 73 ⌧9 µ8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 ⌧ 10 ©¥ ¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 ⌧7• ¿⇠⌅ 79 ƒ ⌧1 ∞⇣ƒ (Scatter plots) . . . . . . . . . . . . . . . . . . . . . . . 79 ⌧2 ƒ| π’”0 . . . . . . . . . . . . . . . . . . . . . . . . . . 82 ⌧3 ¡ (Correlation) . . . . . . . . . . . . . . . . . . . . . . . . . 83 ⌧4 ıÑ∞ (Covariance) . . . . . . . . . . . . . . . . . . . . . . . . 84 ⌧5 <¥® ¡ ⌧6 D ⌧7 §<¥Ã ⌧⌅ ¡ ⌧8 ¡ ¸ x¸ (Correlation and causation) . . . . . . . . . . . . 88 ⌧9 µ 8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 (Pearson’s correlation) . . . . . . . . . . . . . . . 85 ƒ (Nonlinear relationships) . . . . . . . . . . . . . . 86 (Spearman’s rank correlation) . . . . . . . 87 ⌧ 10 ©¥ ¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 ⌧8• î (Estimation) 91 ⌧1 î åÑ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 ⌧2 Ñ∞ î ⌧3 \— ÑÏ (Sampling distributions) . . . . . . . . . . . . . . . 95 ⌧4 \— ∏X (Sampling bias) . . . . . . . . . . . . . . . . . . . . . 97 ⌧5 ¿⇠ÑÏ (Exponential distributions) . . . . . . . . . . . . . . 98 ⌧6 µ8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 ⌧7 ©¥ ¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 xvii (@ ⌧9• $Ä (Hypothesis testing) 103 ⌧1 ⌅µ ⌧2 HypothesisTest . . . . . . . . . . . . . . . . . . . . . . . . . . 104 ⌧3 …‡ (t Ä ⌧4 ‰x Ä µƒ… (ther test statistics) . . . . . . . . . . . . . . . 108 ⌧5 ¡ Ä (Testing a correlation) . . . . . . . . . . . . . . . . . 109 ⌧6 D( Ä (Testing proportions) . . . . . . . . . . . . . . . . . 110 ⌧7 tt⌧Ò Ä ⌧8 ‰‹ ´¯ Dt . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 ⌧9 $X (Errors) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 $Ä (Classical hypothesis testing) . . . . . . . . . 103 (Testing a difference in means) . . . . . . . . . 106 (Chi-squared tests) . . . . . . . . . . . . . . . . 112 ⌧ 10 Ä % (Power) . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 ⌧ 11 ⇠ı (Replication) . . . . . . . . . . . . . . . . . . . . . . . . . 116 ⌧ 12 µ 8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 ⌧ 13 ©¥ ¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 ⌧ 10 • \å⌧Ò (Linear least squares) 119 ⌧1 \å⌧Ò ⌧2 l⌅ (Implementation) . . . . . . . . . . . . . . . . . . . . . . 120 ⌧3 î( (Residuals) . . . . . . . . . . . . . . . . . . . . . . . . . . 122 ⌧4 î ⌧5 ⌧6 i (Least squares fit) . . . . . . . . . . . . . . . . . 119 (Estimation) . . . . . . . . . . . . . . . . . . . . . . . . . 123 iƒ (Goodness of fit) . . . . . . . . . . . . . . . . . . . . . . 124 ® Ä (Testing a linear model) . . . . . . . . . . . . . 126 ⌧7 ⌘ ¨\¯îú (Weighted resampling) . . . . . . . . . . . . 128 ⌧8 µ8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 ⌧9 ©¥ ¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 xviii (@ ⌧ 11 • å¿ (Regression) 131 ⌧1 StatsModels . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 ⌧2 ‰⌘å¿ (Multiple regression) . . . . . . . . . . . . . . . . . . 133 ⌧3 D ⌧4 Data mining . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 ⌧5 ! (Prediction) . . . . . . . . . . . . . . . . . . . . . . . . . . 138 ⌧6 \¿§Ò å¿ (Logistic regression) . . . . . . . . . . . . . . . 140 ⌧7 ®⇠ î ⌧8 l⌅ (Implementation) . . . . . . . . . . . . . . . . . . . . . . 142 ⌧9 ƒ (Accuracy) . . . . . . . . . . . . . . . . . . . . . . . . . 144 ƒ (Nonlinear relationships) . . . . . . . . . . . . . . 135 (Estimating parameters) . . . . . . . . . . . . . . . . 141 ⌧ 10 µ 8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 ⌧ 11 ©¥ ¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 ⌧ 12 • ‹ƒÙ Ñ 147 ⌧1 8$0(Importing)@ ⌧2 o ¯¨0 (Plotting) . . . . . . . . . . . . . . . . . . . . . . . 149 ⌧3 å¿ (Linear regression) . . . . . . . . . . . . . . . . . . . 151 ⌧4 tŸ …‡ (Moving averages) . . . . . . . . . . . . . . . . . . . 152 ⌧5 ∞!✓ (Missing values) . . . . . . . . . . . . . . . . . . . . . . 154 ⌧6 ƒÙ ¡ (Serial correlation) . . . . . . . . . . . . . . . . . . . 155 ⌧7 ê0¡ (Autocorrelation) . . . . . . . . . . . . . . . . . . . . 156 ⌧8 ⌧9 ⌧X0(cleaning) . . . . . . . . . . . 147 ! (Prediction) . . . . . . . . . . . . . . . . . . . . . . . . . . 158 î }0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 ⌧ 10 µ8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 ⌧ 11 ©¥ ¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 (@ xix ⌧ 13 • ›tÑ 165 ⌧1 ›t· ⌧2 ⌅ÿ h⇠ (Hazard function) . . . . . . . . . . . . . . . . . . . 167 ⌧3 ›t· ⌧4 ê Ä-»t¥ î ⌧5 ∞< · ⌧6 ›th⇠ î X0 . . . . . . . . . . . . . . . . . . . . . . . . . 171 ⌧7 ‡∞l⌅ (Confidence intervals) . . . . . . . . . . . . . . . . . 173 ⌧8 T8∏ ®¸ (Cohort effects) . . . . . . . . . . . . . . . . . . . 174 ⌧9 xΩï (Extrapolation) . . . . . . . . . . . . . . . . . . . . . . 176 ⌧ 10 0 (Survival curves) . . . . . . . . . . . . . . . . . . . . 165 î X0 . . . . . . . . . . . . . . . . . . . . . . . . . 168 (Kaplan-Meier estimation) . . . . . . . . . 169 (marriage curve) . . . . . . . . . . . . . . . . . . . . 170 ît ⇠Ö . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 ⌧ 11 µ8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 ⌧ 12 ©¥ ¨⌅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 ⌧ 14 • t )ï (Analytic methods) 183 ⌧1 ‹ÑÏ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 ⌧2 \—ÑÏ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 ⌧3 ‹ÑÏ \⌅X0 . . . . . . . . . . . . . . . . . . . . . . . . . 186 ⌧4 ⌘Ï˘\ ¨ (Central limit theorem) . . . . . . . . . . . . . . 187 ⌧5 CLT Ä ⌧6 CLT ⌧7 ¡ Ä ⌧8 tt⌧Ò Ä ⌧9 †X (Discussion) . . . . . . . . . . . . . . . . . . . . . . . . . 194 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 ©X0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 (Correlation test) . . . . . . . . . . . . . . . . . . . . 192 (Chi-squared test) . . . . . . . . . . . . . . . . . 193 ⌧ 10 µ 8⌧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 xx (@ ⌧1• –… êÃ Ñ t EX ¸î |¿î ‰© x )ï¸ ∞i⌧ pt0 1X–⌧ X¨∞ D H¥Xî Ét‰. »8– ıX‡, àU‰ \ ¿ ¨@\, —¨å¸ hÿ ´à¯ Dt| 0 ` L ⌅t‰@ »8– ® | ª¥ \ ¿ ¨@ l| ⌧‹\‰: ´¯ `0î ¶å ≥î Ω•t àDLî? Ã} t »8D l – Ä…Xt, ¡˘\ †` D ¸ ⇠ à‰. áá ¨å@ ¨‰ t|‡X‡, ‰x ¨å@ ¯‡t|‡ X‡, ‰x ¨å@ ´¯ ò‰t | ò( ‰‡ `XÏ –X‰ \‰. Œ@ †` –⌧, ¨å‰@ ê‡X ¸•D ∑ hX0 ⌅t⌧ pt0| ⌧ı\ ‰. ‰L¸ ⇡@ Œ@ ¨@| >D¸ ⇠ à‰. “\¸– ´¯ Dt| ú∞\ ¥ \l PÖ@ ®P êÑà 9@ ⌧ U ⌧X0 ⌅– |–⌧ pX 2¸ò ¿¨‰.” “´¯î 2¸ ¶å òT‡ t⌧ › X0– X¯î 2¸ h¨ ò,É ⇡‰.!!” “⌧ › –î ¨‰t D»|‡ › Xîp \–Xt ∏» ƒ»X ´¯xp ‰x Œ@ ¨ ¸ », ¿\ h¨ òT0 L8t‰.” t@ ⇡@ Ù‡| |T ùp(anecdotal evidence)|‡ Ätîp, t î |8 <\ ú⇣⇠¿ J‡ ¥\ ⌧x x pt0– 0⇠X‡ à0 L8t‰. |¡ x T–⌧, |T@ (t⌧ òª⌧ É@ ∆‰. ¯ò⌧ x©\ ¨åD U —¥⌧ P|‡ ` Xƒî ∆‰. X¿Ã, ÄT $› x ùp@, ÄT ‡Y1àî ıD –`¿ƒ ®x‰. t 0 <\ ¯‰t, |T ùpî ¥\ 1ı t¿ ªX‰. \–Xt: 2 ⌧ 1 •. –… êÃ Ñ • @ !X(Small number of observations): Ã} ´¯ D0– t⌧ ч 0⌅t ÄT 8‰t, D»ƒ (tî ê x ¿Ÿ¸ DPXÏ D Ét‰. t Ω∞–, (t t¨\‰î ÉD U‰à X0 ⌅t⌧î Œ@ Ñ ‡ ¨@| DPt|` Ét‰. • › ∏X(Selection bias): ч0⌅– \ †`– 8 \ ¨å‰@ ´¯ Dt ¶å ‹¥¨0 L8– Ït àD ⇠ à‰. t Ω∞– pt0| ›Xî ¸ t ∞¸| \·` ⇠ƒ à‰. • Uù ∏X(Confirmation bias): ¸•D ˇî ¨å‰@ ¸•D Uùt¸î ¨@– ÄT 0Ï` Ô X‰. ¸•– XlÏD î ¨å‰@ ⇠@| ÄT ‰É ⇡‰. • Ä U(Inaccuracy): |Tî ÖÖ ⌧x t|0\, 0µt Ä UX‡, òª \⌅⇠p, Ä UXå ⇠ı⌧‰. ¯⌥‰t, ¥ªå T ò ` ⇠ àDLî? ⌧1 |T ‰: µƒ ⌘¸)ï ⌘¸ïX \ƒ| ˘ıX0 ⌅t⌧ µƒƒl| ¨©Xîp ‰LD Ïh\ • êà ⇠—(Data collection): ‹® m p¨–⌧ ò( êÃ| ¨©\ ‰. µ¡ m p¨î Ö‹ <\ U.S ®—Ë– \ µƒ <\ ¿˘\ î`D ƒúXƒ] $ƒ⌧‰. • 0 µƒ(Descriptive statistics): pt0| ⌅∞Xå î}Xî µƒ…D ›1X‡ ‰x )›<\ … Xîp pt0| ‹ T\‰. • –… pt0 Ñ (Exploratory data analysis): Ïàî »8D ‰ ⇠ àî (4, (t⇣, ‰x π’D >î‰. Ÿ‹– | ⇠¿ ªhD ⇣ÄX‡ \ƒ| ›ƒ\‰. • î (Estimation): |⇠ x ®—ËX π’D î Xîp ÿ –⌧ îú⌧ pt0| ¨©\‰. • $ Äù (Hypothesis testing): P ¯˘⌅– (tò¸ Ö1\ ®¸| U xXîp à¥⌧ ®¸ ∞à ⌧›àî¿ … \‰. h – `¿î ÉD <X0 ⌅t⌧ ¡0 ˃| pϧ˝å D ¿‡ ÄT 3D É ⇡@ ∞`– ƒÏ` ⇠ à‰. D⌧ ÄT ˘⌅1 2. q 1• m ⌧2 p¨ (National Survey of Family Growth) 3 q 1• m p¨ (National Survey of Family Growth) 1973D tò\ ¯m »— µ⌧ ) <0 (Disease Control and Prevention, CDC)–⌧ q 1• m p¨ (National Survey of Family Growth, NSFG) | ⇠âX‡ à‰. p¨ © @ “ q ›\, ∞< ✏ t<, ч, ú∞, <Ñ, ¯¨ ‡ ®@ t – \ Ù| ⇠—X‡,” p¨ ∞¸î “t ⌧D§ ✏ t P! ⌅\¯®, ¯¨‡ q, ú∞, t – \ µƒ p¨| ⇠â”Xîp ¨©⌧‰. ê8\ ¨m@ ‰L ˘¨t∏| 8p\‰. http://cdc.gov/nchs/nsfg.htm. ´¯ Dt ¶å ≥î¿@ ‰x 8⌧| p¨X$‡ ¡0 p¨\ ⇠—⌧ pt0 | ¨©\‰. pt0| ®¸ <\ ¨©X0 ⌅t⌧î, p¨ $ƒ(design of the study)| tt` Dî à‰. NSFGî °Ë l(cross-sectional study)\ π ‹⇣– \ —Ë– \ § ≈˜ Ù| ⇠—\‰. • T\ H lî ÖË l(longitudinal study) \ \ —ËD ÏÏ ‹⇣– x– ⇠ı <\ 0Xî Ét‰. NSFGî 7à p¨| ⇠âà‰; p¨ ⌅⌧| ¨tt(cycle)t|‡ \‰. 2002 D 1‘–⌧ 2003D 3‘L¿ ⇠â⌧ Ï/௠¨tt–⌧ ò( pt0| ¨© \‰. p¨ © @ ®—Ë(population)– \ ∞`D ƒúXî É<\, NSFG ©\ ®—Ë@ 15-44 9X ¯m¸t‰. t¡ <\ pt0| ⌅¥ ®—ËX ®‡ ¨å–å⌧ pt0| ⇠—XÏ| X¿Ã, ⌅‰ <\ à •X‰. ‡– \¯ (sample)<\ à¨î ®—ËX |Ä–⌧ pt0| ⇠—\‰. p¨– 8Ï\ ¨ åD Qıê(respondents)|‡ Äx‰. |⇠ <\ ÖË lî \1(representative)D 8| Xîp ©\ ®— ËX ®‡ dÑ Ÿ|\ 8Ï •1D 8|\‰î X¯‰. tÏ\ t¡@ ‰4–⌧ Ï1X0î ¥5‰. X¿Ã p¨| ⇠âh– ॠ\ \ ¸⌘Xƒ] x%t| \‰. NSFGî \ t¿ J‰; ‡– Xƒ <\ $Ñÿ ¡(oversampling)à‰. p¨ $ƒê 8 —Ë (à§(…, Qx, 10 )– t⌧ ¯mxl–⌧ (¿Xî ÉÙ‰ í@ D(\ p¨| ‰‹\‰. ¨ î ®\ µƒ î`D tL¥ ¥0 ⌅t⌧ ¯˘– t ©Ñt p Qıê| UÙX0 ⌅t⌧‰. <`, $Ñÿ ¡ Ë⇣@ p¨\Ä0 ò( µƒ…– 0⇠XÏ |⇠ ®—Ë– \ ∞`D ƒúX0î }¿ J‰. ò⌘– t⇣– t⌧î ‰‹ ‰ Ét‰. tÏ\ X pt0| ë≈` L, T‹Å(codebook)¸ \¸t¿î Ét ⌘ îX‰. T‹Å@ p¨ ⌧@, p¨ »8, Qıê 0]D 8⌧T\‰. T‹Å¸ NSFG pt0– \ ¨©ê t‹î ˘¨t∏–⌧ >D¸ ⇠ à‰. http: //www.cdc.gov/nchs/nsfg/nsfg_cycle6.htm 4 ⌧ 1 •. –… ⌧3 pt0 êÃ Ñ 8$0 t E– ¨©⌧ T‹@ pt0î https://github.com/AllenDowney/ ThinkStats2 ¨t∏–⌧ ¨©` ⇠ à‰. ‰¥\‹@ T‹\ ë≈Xî É– \ ê8\ Ùî ??D 8p\‰. T‹| ‰¥\‹Xt, ThinkStats2/code/nsfg.pyt|î |t à‰. ‰âX t, pt0 |D }‡, á ¿ L§∏| ⇠âX‡, “All tests passed.” |î T‹¿| ú%\‰. $ python nsfg.py (13593, 244) nsfg.py: All tests passed. ⌅\¯®t 4«D ⇠âXî¿ ¥¥Ùê. NSFG 6௠¨tt–⌧ ч p t0î |Öt 2002FemPreg.dat.gzt‰. ‡ Ì |¸D ƒ |⇠ M§∏ (ASCII) | ›<\ gzip<\ Uï⇠¥ à‰. | |x@ \⌧ ч– \ pt0| ÏhXî T‹(record) ⌧‰. | ›(format)@ 2002FemPreg.dct |– 8⌧T⇠¥ 0 ⇠¥ à‡ Stata T ¨ |t‰. Stataî µƒ å⌅∏Ë¥ ‹§\ (µƒ )§¿)X |Ö<\ tÏ\ Â}–⌧ “ T ¨”î ⻉ ¿⇠X ⌅X| ›ƒXîp ¨©⇠ î xq§, ›, ¿⇠Ö ©] Ù| Ù‡ à‰. | ‰¥ 2002FemPreg.dct infile dictionary { _column(1) str12 _column(13) byte } |–⌧ á⌅t ‰L– à‰. caseid pregordr %12s %2f "RESPONDENT ID NUMBER" "PREGNANCY ORDER (NUMBER)" T ¨î ¿⇠ P⌧| 0 \‰: caseidî Qıê ID| \Xî 12 ê¨ 8ê \ ⌧ 8êÙt‰; pregorderî 1 t∏ ⇠ <\ Qıê– \ ч Ù| ò¿∏‰. ‰¥\‹\ T‹–î thinkstats2.py |t àîp tl ®»\ t E–⌧ ¨©⇠î Œ@ tò§@ h⇠| ÏhX‡ à‰. Stata T ¨@ NSFG pt 0 |D }¥ ‰| ⇠ à‰. ‰L– nsfg.py ⌅\¯®–⌧ ¥ªå ¨©⇠î¿ ¨©@ à‰. def ReadFemPreg(dct_file='2002FemPreg.dct', dat_file='2002FemPreg.dat.gz'): dct = thinkstats2.ReadStataDct(dct_file) df = dct.ReadFixedWidth(dat_file, compression='gzip') CleanFemPreg(df) return df 4. pt0⌅ Ñ(DataFrames) 5 ReadStataDct@ T ¨ |tÑD D⌧ dct| ⇠X\‰. dctî T ¨ –⌧ @ Ù| Ù‡ àî FixedWidthVariables ¥‰. dctî pt0 | D }î FixedWidthVariablesD ⌧ı\‰. ⌧4 pt0⌅ Ñ(DataFrames) ReadFixedWidth ∞¸î pt0⌅ Ñ(DataFrame)<\ ⇣‰§(pandas)–⌧ ⌧ıXî • ¸– x êÃlp‰. ⇣‰§î t E–⌧ ¨©Xî tl êà ✏ µƒ )§¿ tÑt‰. pt0⌅ Ñ@ T‹»‰ â(t Ω∞– ч »‰ \ ât ()¸ ¿⇠– \ ÙD ÏhX‡ à‰. pt0x– pt0⌅ Ñ@ ¿⇠Ö¸ ¿⇠ êà D ÏhX‡ à<p, pt0– ⌘¸ ✏ ¿ΩXî )ïD ⌧ı\‰. df| ú%Xt, ⸠Ù, pt0⌅ Ñ ®ë(13593 â/ T‹, 244 Ù/¿⇠)– \ ò$ƒ |Ä| ¸ ⇠ à‰. >>> import nsfg >>> df = nsfg.ReadFemPreg() >>> df ... [13593 rows x 244 columns] columns ç1@ »T‹ 8êÙ\ |¸Ö ‹ §(sequence)| ⇠X\‰. >>> df.columns Index([u'caseid', u'pregordr', u'howpreg_n', u'howpreg_p', ... ]) ∞¸î xq§(Index)\ ⇣‰x ⇣‰§ êÃlp‰. îƒ xq§(Index)– ⌧ ÄT 0∏ Ét¿Ã, ¿ @ ¨§∏ò¸ ‰Ë0\ \‰. t >>> df.columns[1] 'pregordr' pt0⌅ Ñ |¸– ⌘¸X0 ⌅t⌧î |¸tÑD §(key)\ ¨©` ⇠ƒ à‰. >>> pregordr = df['pregordr'] >>> type(pregordr) <class 'pandas.core.series.Series'> ∞¸î ‹¨à(Series)\ ⇣‰x ⇣‰§ êÃlp‰. ‹¨àî á ¿ î 0• D ƒ tl ¨§∏‰. ‹¨à| ú%Xt, xq§@ ¡QXî ✓t ú%⌧‰. >>> pregordr 0 1 1 2 6 ⌧ 1 •. –… êÃ Ñ 2 1 3 2 ... 13590 3 13591 4 13592 5 Name: pregordr, Length: 13593, dtype: int64 ¡0 ⌧–⌧, xq§î 0–⌧ 13592 ⇠ êÿÃ, |⇠ <\ , •\ ÑXX êà ƒ •X‰. îå✓ƒ ⇠ t¿Ã, ÑXX êà ƒ •X‰. »¿… â@ ¿⇠Ö, ‹¨à 8t, ¯¨‡ êà ٠à‰; int64@ NumPy –⌧ ⌧ıXî êà ⌘X Xò‰. Ã} 32-D∏ ÙË0–⌧ ¡0 ⌧| ‰â \‰t, int32 ú%⌧‰. ⇠ xq§@ ¨|t§(slice)| ¨©t⌧ ‹¨à îå✓(element)– ⌘¸` ⇠ à‰. >>> pregordr[0] 1 >>> pregordr[2:5] 2 1 3 2 4 3 Name: pregordr, dtype: int64 xq§ ∞ê ‰â ∞¸î int64t‡, ¨|t§ ∞ê ∞¸î ⇣ ‰x ‹¨ à‰. ⇣ \0ï(dot notation)D ¨©t⌧ pt0⌅ Ñ |¸D ⌘¸` ⇠ƒ à‰. >>> pregordr = df.pregordr |¸Öt ®\ tl ›ƒê|t t \0ï@ ò Ÿë\‰. ¯ò⌧ 8ê\ ‹ët| X‡, ı1D ÏhX¿ –D| X‡ ÒÒD ¿⌧⇠| à‰. ⌧5 ¿⇠ (Variables) NSFG pt0K–⌧ t¯ ¿⇠ P⌧, caseid@ pregordrD ¥¥$‰. ⌅¥ < \ 244⌧ ¿⇠ à‰î Ƀ Uxà‰. E–⌧ –… êÃÑ <\ ‰L ¿⇠| ¨©\‰. • caseidî QıêX • prglngthî ⇠ ID‰. ⇠ <\ ¸\ ч 0⌅D ò¿∏‰. 6. ¿X (Transformation) • outcome@ ú∞ ∞¸– ò¿∏‰. 7 \ ⇠ T‹✓t‰. T‹✓ 1 @ ¡ú∞D • pregordr@ ч |(à8‰; | ‰¥, QıêX ´à¯ ч T‹✓@ 1, P௠ч T‹✓@ 2, ÒÒ. • birthordî ¡ú∞– \ |(à8‰; QıêX ´à¯ Dt T‹✓@ 1 ÒÒ. ¡ú∞t Dà Ω∞–î D‹✓t ı1t‰. • birthwgt_lb@ birthwgt_oz@ ú∞‹ Dt ¥⌘– Ù| Ù‡ à‰. \ ¥‹@ (§ • agepregî ч ƒ0 ∞® òt| ò¿∏‰. • finalwgtî Qıê@ ⌧ µƒ ⌘X‰. ÄŸå⇠⇣ ✓<\ Qıê \Xî ¯m xl⌘– D⌘D ò¿∏‰. ¸XJt T‹ÅD }å⇠t, ¿⇠ ⌘X ¡˘⇠ ¨T‹(recodes)⌧ ÉD ¸ ⇠ àîp p¨–⌧ ⇠—⌧ –êà (raw data) |ÄÑ@ D»‰. ¨T‹⌧ ¿⇠î –êÃ| t©XÏ ƒ∞⌧ Ét‰. | ‰¥, ¡ú∞– \ prglngth ¿⇠î Ã} à‰t wksgest (åÑ0⌅ ¸( Ù)@ Ÿ|X‰; Ã} åÑ0⌅ Ù ∆‰t mosgest * 4.33 ı›(å Ñ0⌅ ‘( Ù ÒX0 \Ï …‡ ¸( Ù)D ¨©t⌧ î \‰. ¨T‹î êà i1¸ | 1D ⇣ÄXî \¡– 0⇠\‰. §§\ –êÃ| ò¨` ©›t Ã\ t ∆‰t, |⇠ <\ ¨T‹⌧ êà à‰t ¯ \ ¨©Xî Ét ã@ › t‰. ⌧6 ¿X (Transformation) t@ ⇡t pt0| 8, L, $X| ⇣ÄX‡, π⇠✓D ò¨X‡, pt0| ‰x ›<\ ¿XX‡, ƒ∞D ⇠ât| \‰. t@ ⇡@ ë≈D µ¡ pt0 ⌧(data cleaning)|‡ Äx‰. nsfg.pyî CleanFemPreg h⇠ à¥⌧ ¨©` ¿⇠| ¨⌅– ⌧\‰. def CleanFemPreg(df): df.agepreg /= 100.0 na_vals = [97, 98, 99] df.birthwgt_lb.replace(na_vals, np.nan, inplace=True) df.birthwgt_oz.replace(na_vals, np.nan, inplace=True) df['totalwgt_lb'] = df.birthwgt_lb + df.birthwgt_oz / 16.0 8 ⌧ 1 •. –… êÃ Ñ agepreg ¿⇠î ч –0– ∞® òt Ù| Ù‡ à‰. pt0 |–⌧ agepreg ¿⇠î 1ÑX ⇠\ xT)⇠¥ à‰. ¯ò⌧ ´à¯@ 100<\ agepreg ¿⇠| ò ⌧ ƒ\ ÄŸå⇠⇣ ✓D ›1\‰. birthwgt_lb@ birthwgt_oz ¿⇠î ¡ú∞ ч– \ ‡›DX ¥⌘<\ ¥‹@ (§ \⌅⌧ Ù| Ù‡ à‰. î \ áá π⇠✓ƒ à‰. 97 NOT ASCERTAINED 98 REFUSED 99 DON'T KNOW +ê Ä8\ \⌅⌧ π⇠✓@ ⌅ÿ\p, t î Ã} Xå ò¨⇠¿ Jî ‰t, 99 ¥‹ ‡›Dò¸ ı⌧ ∞¸| ›1` ⇠ à‰. replace Tÿ‹î π⇠✓D np.nan<\ º‰. np.nanî “not a number.”| ò¿¥î π⇠ ÄŸ å⇠⇣✓t‰. inplace ò¯î replace– »\¥ ‹¨à| ›1Xî ‡– 0t ‹¨à| ¿ΩXå \‰. IEEE ÄŸå⇠⇣ \ X |ÄÑ<\, Ã} xê⌘ Xò nan tt, ®‡ ⇠Y ∞@ nanD ⇠X\‰. >>> import numpy as np >>> np.nan / 100.0 nan ¯ò⌧, nan<\ ∞\ É@ ,x ∞D X‡, ÄÑX ⇣‰§ h⇠î nan D Xå ‰Ï‰. X¿Ã ∞!✓(missing value)D ‰Ëî É@ ⇠ı⇠î t à ⌧‰. CleanFemPreg h⇠ »¿… ⌅@ ¥‹@ (§| XòX ✓, »\¥ |¸ totalwgt_lbD ›1\‰. ¥‹\ piXî ⌘î\ ¨m: pt0⌅ Ñ– »\¥ |¸D î ` L, ‰L¸ ⇡@ T ¨ l8D ¨©t| \‰. # CORRECT df['totalwgt_lb'] = df.birthwgt_lb + df.birthwgt_oz / 16.0 ‰L¸ ⇡@ ⇣\0ï@ H⌧‰. # WRONG! df.totalwgt_lb = df.birthwgt_lb + df.birthwgt_oz / 16.0 ⇣\0ï Ñ<@ pt0⌅ Ñ ¥– ç1D î X¿Ã, ¯ ç1t »\¥ | ¸<\ ‰⌅¿î É@ D»‰. ⌧7 ¿˘1 Ĩ(Validation) pt0| ‰x å⌅∏Ë¥ XΩ–⌧ ¥Ù¥‡ ⇣ ‰x å⌅∏Ë¥ XΩ<\ 8 $0 ` L, $X ⌧›`¿ƒ ®x‰. ¯¨‡ ⌅ »\¥ pt0K– u⇡t» 7. ¿˘1 Ĩ(Validation) 9 L, pt0| Ä UXå t Xpò $t ›®ò0ƒ \‰. Ã} pt0X ¿ ˘1D UÙ` ‹⌅D å ⌧‰t, ò⌘– ≈4‹⌅D }X‡ $X| åD` ⇠ à‰. pt0 ¿˘1D UÙXî \ )ï@ 0 µƒ…D ƒ∞X‡ ı\⌧ ∞¸✓¸ DPXî Ét‰. | ‰¥, NSFG T‹Å–î ¿⇠| î}\ •\ à‰. outcome– \ Ltt àîp ч ∞¸✓D T‹T\ Ét‰. value label 1 LIVE BIRTH 2 INDUCED ABORTION 3 STILLBIRTH 4 MISCARRIAGE 5 ECTOPIC PREGNANCY 6 CURRENT PREGNANCY Total 9148 1862 120 1921 190 352 ‹¨à tò§î value_counts |î Tÿ‹| ⌧ıXîp ✓t ú⌅X î ü⇠| ƒ⇠\‰. Ã} pt0⌅ Ñ–⌧ outcome ‹¨à| ›\‰t, value_counts| ¨©t⌧ ı\⌧ ✓¸ DP` ⇠ à‰. >>> df.outcome.value_counts().sort_index() 1 9148 2 1862 3 120 4 1921 5 190 6 352 value_counts ∞¸î ‹¨àt‡ sort_index ‰. ¯ò⌧ ∞¸✓t ⌧⌧ \ ò¿ú‰. xq§ƒ\ ‹¨à| ,\ ∞¸✓D ı\⌧ •\@ DPXt, outcome ✓t ,x Éò¸ Ùx‰. », ¿\, birthwgt_lb– \ ı\⌧ •\ ‰L– à‰. value label . INAPPLICABLE 0-5 UNDER 6 POUNDS 6 6 POUNDS 7 7 POUNDS 8 8 POUNDS 9-95 9 POUNDS OR MORE Total 4449 1125 2223 3049 1889 799 ¯¨‡, ƒ⇠⌧ ✓t ‰L– à‰. >>> df.birthwgt_lb.value_counts().sort_index() 0 8 1 40 10 2 3 4 5 6 7 8 9 10 11 12 13 14 15 51 ⌧ 1 •. –… êÃ Ñ 53 98 229 697 2223 3049 1889 623 132 26 10 3 3 1 1 6, 7, 8 – \ ƒ⇠î Ux⇣‡, Ã} 0-5@ 9-95 î⌅ +ê| T\‰t, ƒ⇠ ƒ fiî É<\ Ux⌧‰. X¿Ã, Ã} ÄT ê8à ‰Ï‰¯‰t, $X àî ✓D Xò ⌧¨` Ét‰. 51 ¥‹ ‡›D! t $X| ‰Ë0 ⌅t⌧, CleanFemPreg ⌅\¯®– \⌅ T‹| î \‰. df.birthwgt_lb[df.birthwgt_lb > 20] = np.nan ¡0 8•@ ®X¿ J@ ✓D np.nan<\ º‰. æ‡⌅8– àî \⌅›@ Ä∏(bool) êà ‹¨à| ∞ú\‰. Ï0⌧ Trueî ptt 8x ÉD ò¿ ∏‰. à¨∏ ‹¨à xq§\ ¨© L, ptD ÃqXî îå✓(element)à ›\‰. ⌧8 t (Interpretation) ®¸ <\ pt0| ¿‡ ë≈X0 ⌅t⌧î Ÿ‹– P t|à \‰: µƒ ⇣¸ 8 ⇣. ⇣– t⌧ › ¨@\ Qıê áÖ– \ Qı ‹ §| ¥¥Ùê. pt0 |t l1⌧ )› L8– Qıê– \ ч pt0| ⇠—X0 ⌅t⌧î á ¿ ë≈D t| \‰. ‰Lt ë≈D ⇠âXî h⇠‰. def MakePregMap(df): d = defaultdict(list) for index, caseid in df.caseid.iteritems(): d[caseid].append(index) return d 9. µ 8⌧ (Exercises) 11 dfî ч pt0 àî pt0⌅ Ñt‰. iteritems Tÿ‹î ч t xq§(â à8)@ caseid| Xò) Ùp\‰. – dî T ¨\ ID–⌧ xq§ ¨§∏\ ‰Q\‰. Ã} defaultdict¸ \ ⇡X¿ J‰t, tl collections ®»\ › Xt ⌧‰. d| ¨©t⌧, Qı ê| >D¥‡ t˘ Qıê ч– \ xq§| ªD ⇠ à‰. ‰L ¨@î Qıê \ÖD >D QıêX‡ Ï1ÑX ч ∞¸| ¨§∏\ ú %\‰. >>> caseid = 10229 >>> indices = preg_map[caseid] >>> df.outcome[indices].values [4 4 4 4 4 4 1] indicesî Qıê à8 10229– Q⇠î ч xq§ ¨§∏‰. xq§\ df.outcome– ¨§∏| ¨©X⌧ \›⌧ âD ›X‡ ‹¨à| ∞ ú\‰. ⌅¥ ‹¨à| ú%Xî ‡– NumPy 0Ùx values ç1D ›à ‰. T‹ ∞¸✓ 1@ ¡ú∞D ò¿∏‰. T‹ ∞¸✓ 4î µ¡ L$ƒ XY x –x ∆t ê§˝å ]ú ч. µƒ <\ t˘ Qıê ƒú É@ D»‰. ¡D Ù‡\ ‰x Qıêƒ à‰. ∞D ò¿∏‰; â, ∞@ TXp, ‰⇠ 9@ ¯ t X¿Ã 8ÂD 0µ\‰t, pt0 –Xî É@ 6à чà‡, ‰à ∞<\ ]ú \ Ï1X t|0‰. 7à¯\ • \¸ ч@ ¡ú∞<\ »4¨ ⇠» ‰. Ã} ¸D ¿‡ pt0| › \‰t, pt0 ⌅Xî t|0\ ⇣Ÿ î É@ ¥Lt ê§˝‰. NSFG pt0KX T‹î D¸ Œ@ ⌧x t‡ ¥$¥ »8– \ ¡\ QıD ⌧ı\ ¨åD \\‰. t˘ pt0| ¨©t⌧ q ›\, ú∞, t – \ µƒ »8– ı` ⇠ à‰. Ÿ‹– pt0\ \⇠î ¨åD ¨$Jt › X‡, tΩ¸ ⇣¨| » X4ƒ à‰. ⌧9 µ 8⌧ (Exercises) Exercise 1.1 ‰¥\‹ @ •å–⌧, chap01ex.ipynb |D >D|. IPython x∏Å |t‰. Ö9|x–⌧ ‰L¸ ⇡t Ö%t⌧ IPython x∏ ÅD ‰â\‰: $ ipython notebook & 12 ⌧ 1 •. –… êÃ Ñ Ã} IPythont $X⇠¥ à<t, 1¯|¥‹\ ‰â⇠î ⌧Ñ| ‰â‹§‡, x∏ÅD ¸ ⇠ àƒ] |∞8 Ù∞‰. Ã} IPython¸ \⇡X¿ J‰t, http://ipython.org/ipython-doc/stable/notebook/notebook.html ˘¨ t∏–⌧ ‹ët Ùî ÉD å•\‰. ¯ºD “I ⌅¿¥(inline)” ò$ƒ] Ö9|x ›5XD î ` ⇠ à‰; â, “I ⌅¿¥(inline)”î ≈ ƒ∞ Dà x∏Å– ¯ºt ò$å \‰: $ ipython notebook --pylab=inline & chap01ex.ipynb |D ‰. |Ä @t t¯ DÃ8 à‡, Dà @@ ‰ât | \‰. ‰x @@ µ8⌧\ Ö9¥| #¥ ¸¥| ⌧‰. µ8⌧– \ tı@ chap01soln.ipynb |– ò@ à‰. Exercise 1.2 chap01ex.py|î |D ›1X‡, 2002FemResp.dat.gz Qıê |D àÏ }î T‹| ë1\‰. nsfg.py |D ı¨\ § ¿ tƒ ã‰. pregnum ¿⇠î Qıê º»ò Œt чàî¿ ¨Ä8T(recode)\ Ét ‰. t ¿⇠X ✓– \ /⇠| ú%X‡ NSFG T‹E– ú⇣⌧ ∞¸@ DP X|. Qıê– \ pregnum@ ч |– T‹ +ê@ DPt⌧ Qıê ч |D ¡8 ¿˘1D Äù` ⇠ƒ à‰. …x ©]– caseid–⌧ ч pt0⌅ Ñ<\ ‰QXî îp nsfg.MakePregMapD ¨©` ⇠ à‰. t µ8⌧– |¸ T ¨| Ë \ tı@ chap01soln.py– ò@ à‰. Exercise 1.3 µƒ| YµXî • ã@ )ï@ Ïàî ⌅\ ∏\ ë≈tÙ î Ét‰. “´¯ Dt ¶å ‹¥†L?” ⇡@ »8t p¨X‡ê Xî Éx ? ⌧x <\ Ït àî »8, |Ät àî ¸⌧, X •D î »8, ¨å µPD › t Ù|. ¯¨‡ µƒ l\ tLå ⇠î »8<\ ı›T` àî¿ ¥¥Ù|. »8D ‰Ëîp ƒ¿t ⇠î êÃ| >DÙ|. Ä ã@ –ú Ù ⇠ àîp t î ıı l\Ä0 ò( pt0 Tà ê \t t© •X0 L 8t‰. ‹ëX0 ã@ ˘¨tî ‰L¸ ⇡‰. http://www.data.gov/, http: //www.science.gov/, m–î http://data.gov.uk/. ê 8Xî P ¿ pt0K@ |⇠¨åp¨(General Social Survey), http://www3.norc.org/gss+website/, ¯¨‡ ˝¨åp¨, http://www. europeansocialsurvey.org/. Ã} ⌅p t¯ Ïàî »8– ıD \ Éò¸ Ùx‰t, t˘ ıt ˘T ⇠ àî¿ <<à ¥¥Ù|. pt0– $X àpò ∞`– ‡∞ ¿ Jî 10. ©¥¨⌅ 13 Ñ | ⇠ à‰. t Ω∞, Ÿ|\ pt0– ‰x Ñ D ⇠âXpò, T ã@ pt0 –ú Ù| >Dò ‰. Ã} Ïàî »8D ‰Ï ú⇣⌧ |8D >å ⇠t, –êÃ| ªD ⇠ à¥| ⌧‰. Œ@ êî ˘– pt0| ı⌧X‡ à‰. X¿Ã, ¸⇣\ pt0– t⌧ î ê–å ∏¿| h⌧ pt0 ¨©ƒç– \ Ù| ⌧ıX‡, ¨© pt– ŸXt|à \‰. H0| ¿8î! ⌧ 10 ©¥¨⌅ • |T ùp (anecdotal evidence): ⌧ \ $ƒ⌧ p¨– X\ ÉÙ‰î ∞à ⇠—⌧ ÖÖ ⌧x x ùp. • ®—Ë (population): p¨–⌧ 4¨X ¨åD t§¿Ã, ©¥ ÏD ¿î ¯˘. “®—Ë”@ ÖÖ \ ⇣\ ‰x ¡– t⌧ƒ ¨©⌧‰. • ÖË l (cross-sectional study): π ⇠—Xî l. ‹⇣– ®—Ë– \ êÃ| • ¨tt (cycle): ⇠ı⇠î ÖË l–⌧, l ⇠ıD ¨ttt|‡ \‰. • °Ë l (longitudinal study): ‹⌅D P‡ ®—ËD î Xî l \ Ÿ| ¯˘–⌧ ⇠ı <\ pt0| ⇠—\‰. • T‹(record): ptK–⌧, \ ¨å 9@ ‰x <ÿê– \ Ù —i. • Qıê (respondent): p¨– Qı\ ¨å. • \¯ (sample): êà ⇠—Xîp ¨©⌧ ®—ËX ÄÑ—i. • \1 (representative): Ã} ®—ËX ®‡ dÑ t Ÿ|\‰t \¯@ \1t à‰. \¯– Qê •1 • $Ñÿ ¡ (oversampling): @ \¯ l¨\ ›0î $X| <X0 ⌅ t⌧ X⌅ ®—ËX \1D §∞î 0ï. • –êà (raw data): ⇣Ä, ƒ∞, t t pX ∆pò ⌅ ⇠‡ ⇠—⌧ ✓. • ¨T‹ (recode): –êÖ ∆î ¡‹\ 0] ©⌧ ƒ∞ 9@ ‰x \¡<\ ›1⌧ ✓. • êà ⌧ (data cleaning): pt0 ¿˘1 UÙ, $X ›ƒ, êà ⌅X ¿X, êà \⌅ ÒD ÏhXî ⌅\8§. 14 ⌧ 1 •. –… êÃ Ñ ⌧2• ÑÏ (Distribution) ⌧1 ৆¯® ¿⇠| 0 Xî • ã@ )ï⌘X Xòî pt0K– ò¿òî ✓¸ ✓ t º»ò ò¿òî¿| Ù‡Xî Ét‰. tÏ\ 0 ïD ¿⇠ ÑÏ(distribution)|‡ Äx‰. • |⇠ x ÑÏ \⌅@ ৆¯®(histogram)<\ ✓X Hƒ(frequency)| ÙÏ¸î ¯ò⌅‰. tÏ\ Â}–⌧ “Hƒ”î ✓t ú⌅Xî ü⇠| X¯\‰. tl–⌧ Hƒ| ƒ∞Xî ®( x )ï@ § ✓ t ¸¥ƒ ¡‹–⌧, T ¨| ¨©Xî Ét‰. ‹ hist = {} for x in t: hist[x] = hist.get(x, 0) + 1 ∞¸î ✓D Hƒ\ ‰mXî T ¨‰. Counter tò§| ¨©` ⇠ à‰. H<\ collections ®»– X⌧ from collections import Counter counter = Counter(t) ∞¸î Counter ¥\ T ¨X X⌅tò§ ⌧‰. ⇣‰x ›¿î ⇣‰§ value_counts Tÿ‹| ¨©Xî É<\ ^•–⌧ ¥ ¥$‰. X¿Ã, t E–⌧ ৆¯®D ò¿¥î Hist tò§| ›1X‡ Hist tò§–⌧ ŸëXî Tÿ‹| ⌧ı\‰. 16 ⌧2 ⌧ 2 •. ÑÏ (Distribution) ৆¯® \⌅X0 Hist ›1êî ‹ §, T ¨, ⇣‰§ ‹¨à, 9@ ‰x Hist| ‰L¸ ⇡t Hist ¥ x§4§| ›1` ⇠ à‰. D ⇠ à‰. >>> import thinkstats2 >>> hist = thinkstats2.Hist([1, 2, 2, 3, 5]) >>> hist Hist({1: 1, 2: 2, 3: 1, 5: 1}) Hist ¥î Freq Tÿ‹| ⌧ıXîp ✓D D Hƒ| ⇠X\‰. >>> hist.Freq(2) 2 æ‡ ∞êƒ Ÿ|\ ÉD ⇠â\‰. >>> hist[2] 2 Ã} >î ✓t ∆‰t, Hƒî 0t‰. >>> hist.Freq(4) 0 Values Tÿ‹î Hist– ,⇠¿ Jî ¨§∏ ✓D ⇠X\‰. >>> hist.Values() [1, 5, 3, 2] ,⌧ ✓<\ Ë⌅| è$t, ¥•h⇠ sorted| ¨©` ⇠ à‰. for val in sorted(hist.Values()): print(val, hist.Freq(val)) Items Tÿ‹| ¨©t⌧ ✓-Hƒ(value-frequency) ›D ⇠ıò¨` ⇠ à‰. for val, freq in hist.Items(): print(val, freq) ⌧3 ৆¯® ¯¨0 (Plotting histograms) t E–⌧ êî thinkplot.py ®»D ë1t⌧ Hists| ¯¨î h⇠ @ thinkstats2.py– X⌧ ¥| ⌧ı\‰. pyplot– 0⇠X‡ à‡ matplotlib (§¿X |ĉ. matplotlibD $XXî )ï@ ??D 8pX 8î. thinkplot<\ hist| ¯¨0 ⌅t⌧ ‰LD ‹ƒt Ù8î. 4. NSFG ¿⇠ 17 ¯º 2.1: ú›¥⌘ ¥‹ ৆¯®. >>> import thinkplot >>> thinkplot.Hist(hist) >>> thinkplot.Show(xlabel='value', ylabel='frequency') http://greenteapress.com/thinkstats2/thinkplot.html thinkplot– \ 8⌧| 8p` ⇠ à‰. ⌧4 ˘¨t∏–⌧ NSFG ¿⇠ t⌧ NSFG– àî pt0\ ‰‹ ÃD ê. t•– àî T‹î first.py‰. T‹| ‰¥\‹X‡ ë≈– \ Ùî ?? •D 8pX|. »\¥ pt0KD ¿‡ ë≈D ‹ë` L, \à– Xò) ¨©X$î ¿⇠| –…X8 ⌧H\‰. ‹ëXî ã@ )ï@ ৆¯®D ¯$Ùî Ét‰. ??–⌧ agepreg| 1ÑD–⌧ DË⌅\ ¿Xà‡, birthwgt_lb@ birthwgt_ozD pit⌧ totalwgt_lb \ Ë⌅…<\ É»‰. tà –⌧ ৆¯®X á ¿ 0•D ‹X0 ⌅t⌧ t ¿⇠‰D ¨©\‰. pt0| }‡, ¡ ú∞– \ T‹| ›t⌧ ‹ëtÙê. preg = nsfg.ReadFemPreg() live = preg[preg.outcome == 1] æ‡ \⌅›@ Ä∏ ‹¨à(boolean Series)\ pt0⌅ Ñ–⌧ âD ›X‡ »\¥ pt0⌅ ÑD ⇠X\‰. ‰L– ¡ú∞– \ birthwgt_lb ৆ ¯®D ›1X‡ ot⌧ ¯$∏‰. 18 ⌧ 2 •. ÑÏ (Distribution) ¯º 2.2: ú›¥⌘ (§ ৆¯®. ¯º 2.3: ч ÖË⇣ ∞®9 ৆¯®. 4. NSFG ¿⇠ 19 ¯º 2.4: ч0⌅(¸ƒ) ৆¯®. hist = thinkstats2.Hist(live.birthwgt_lb, label='birthwgt_lb') thinkplot.Hist(hist) thinkplot.Show(xlabel='pounds', ylabel='frequency') Hist– xê ⇣‰§ ‹¨à| L, nan ✓@ »}\‰. label@ 8êÙ\ Hist ¯$» L î@– ò¿ú‰. ¯º ?? ∞¸| ÙÏ ‰. • Œt 0⇠î ✓D \H✓(mode)t|‡ X‡ t Ω∞– 7 ¥‹‰. ÑÏî ¸¨ <\ Ö®ëx ‹(normal) ÑÏ ®ë< \ ∞§(Gaussian) ÑÏ|‡ƒ \‰. X¿Ã, ⌧⇠ ‹ÑÏ@ Ϩ, ÑÏ D mt‰; $xΩÙ‰ |Ω<\ ÄT U•⌧ ,¨(tail) à‰. ¯º ??@ ¿⇠ birthwgt_ozX ৆¯®<\ ú› ¥⌘X (§ ÄÑt‰. t ` <\ ÑÏ ‡Ò(uniform)X8 0 \‰; â, ®‡ ✓t Ÿ|\ Hƒ| 8| \‰. ¨‰ 0 t ‰x ✓¸ DPXÏ ÄT TX‡, 1¸ 15î ÄT TX¿ J@p, D»ƒ t î Qıê ⇠✓– L¥ ú› ¥⌘D ⇠,º\É<\ î!\‰. ¯º ??@ agepregX ৆¯®<\ ч –0 ∞® òt‰. ÑÏî µ Ö® ët¿Ã, t ¨@X Ω∞ ,¨ ÄT |ΩÙ‰ $xΩ<\ ◊Ïò‰. ÄÑ X ∞®î 20 t¿Ã 30 ƒ @ ⇠¿Ã t¨\‰. ¯º ??@ prglngthX ৆¯®<\ ¸⌅(week) Ë⌅ ч0⌅t‰. • T \ ✓@ 39¸‰. xΩ ,¨ $xΩ ,¨Ù‰ 8‰; p∞ ‡›D |⇠ t¿Ã, ч0⌅t 43¸| ⇠¥ ¿î J‡, Ã} X¨ ⇣ËX0– DîX‰t ч 0⌅– ÏXî Ét |⇠ t‰. 20 ⌧ 2 •. ÑÏ (Distribution) ⌧5 πt⇣ (Outliers) ৆¯®D Ùt, • T\ ✓¸ ÑÏ ®ëD ›ƒX0î }‰. X¿Ã, ‹8 ✓t m¡ – ò (t¿î Jî‰. ƒç ƒâX0 ⌅–, πt⇣ (outliers)D ⇣ÄXî Ét ã@ › t‰. πt⇣@ t¡X|‡ à¨î ˘Ë✓<\ ! ¸ 0]–⌧ $X| ⇠ƒ à‡, ‹Ñ ¨tX U\ 0]| ⇠ƒ à‰. Histî Largest, Smallest Tÿ‹| ⌧ıXîp, \ ✓¸ \å✓ n⌧| ⇠X\‰. ⇠ nD D ৆¯®–⌧ for weeks, freq in hist.Smallest(10): print(weeks, freq) ¡ ú∞– \ ч0⌅ ¨§∏–⌧ • ë@ \å✓ 10⌧î [0, 4, 9, 13, 17, 18, 19, 20, 21, 22]t‰. 10 ¸Ù‰ @ ✓@ U‰\ $X‰; • ¯ÙÔ\ $Ö@ D»ƒ ∞¸| ,tå T‹TX¿ ª\ Ét‰. 30¸ t¡⇠ î ✓@ D»ƒ iX‰. 10¸–⌧ 30¸ ¨tX ✓@ U‰X‰‡ X0 ¥5‰; áá ✓@ D»ƒ $X¿Ã áá@ ¯⇡D| ò¿∏‰. î⌅X ⇠ ∏–⌧ weeks 43 44 45 46 47 48 50 • p ✓@ ‰L¸ ⇡‰. count 148 46 10 1 1 7 2 Ã} ч0⌅t 42¸| ⇠¥ t ÄÑX X¨î ƒÑÃ(induced labor)D îú\‰. ¯ò⌧ áá 4 ч0⌅✓@ Ä|¿D ‰. πà, ч 50¸î XY <\ •X¿ JD Ùx‰. πt⇣D ‰Ëî • ã@ )ï@ “π Ñ|X ⌅8 ¿›(domain knowledge)”– Ï$à‰; â, pt0 úò@ pt0 X¯Xî – \ Ù. ¯ ¨‡ ¥†\ Ñ )ïD ⇠â`¿– Ï$à‰. tà ⌧–⌧, Ÿ0 ÄÏ »8@ ´à¯ Dt | (9@ ¶å) ‹¥òî Ω• t àê–î Ét‰. ¨å‰t t »8D ` L, ¥\ ⌅¥ ч0⌅– Ït à‰. ¯ò⌧, tà Ñ –⌧î 27¸ t¡t ⇠î ч– ⇣D fiú Ét‰. 6. ´à¯ Dt (First babies) 21 ¯º 2.5: ч0⌅ ৆¯®. ⌧6 ´à¯ Dt (First babies) ´¯ Dt@ ò8¿ Dt– \ ч 0⌅ ÑÏ| t⌧ DP` ⇠ à‰. birthord ¿⇠| ¨©t⌧ ¡ ú∞ pt0⌅ ÑD ò⌅‡ ৆¯®D ∞t⌧ ¯∞‰. firsts = live[live.birthord == 1] others = live[live.birthord != 1] first_hist = thinkstats2.Hist(firsts.prglngth) other_hist = thinkstats2.Hist(others.prglngth) ¯¨‡ ò⌧, Ÿ| ï– à§†¯®D oXÏ ¯∞‰. width = 0.45 thinkplot.PrePlot(2) thinkplot.Hist(first_hist, align='right', width=width) thinkplot.Hist(other_hist, align='left', width=width) thinkplot.Show(xlabel='weeks', ylabel='frequency') thinkplot.PrePlot h⇠î ¯ò⌅| ¯¨$‡Xî ৆¯® /⇠| xê\ î‰; xê Ù| t©t⌧ \ …T —iD ›` ⇠ à‰. thinkplot.Histî align=’center’D 0¯✓<\ ¨©t⌧ … î ✓– t⌧ ⌘Y– ⌅X\‰. ¯º–⌧î align=’right’@ align=’left’| ¨©t ⌧ ✓X ëΩ<\ t˘ … | ⌅X‹0‰. width=0.45 5X✓<\, P … X ⌅¥ ◆tî 0.9\, ı1D P»‰. … ò¥ ⌅– }⌅ 22 ⌧ 2 •. ÑÏ (Distribution) »¿…<\, ïD p t⌧ 27¸@ 46¸ ¨t pt0à Ùtå É»‰. ¯º ?? t ¿ L¿X ∞¸| ÙÏ ‰. ৆¯®@ \H✓D â‹ ÖUXå ÙÏ ‰î ⇣–⌧ ©X‰. X¿Ã, P ÑÏ| DPXîpî • ã@ ›t ⇠¿î ªX‰. tà ⌧–⌧ “´¯ Dà Dt”Ù‰ “´¯ Dt” +ê T ‰. ¯ò⌧, ৆¯®–⌧ Ö1\ ( tî \¯l0–⌧ ò(‰. ‰L •–⌧ U`»…h⇠(probability mass functions)| ¨©t⌧ t 8⌧| ‰⌅¯‰. ⌧7 ÑÏ î}X0 ৆¯®@ \¯D D⌅à 0 Xî Ñω; â, ৆¯®t ¸¥ƒ‰t (⌧ ⌧ \î ` ⇠ ∆¿Ã) \¯– àî ✓D ¨l1` ⇠ à‰. Ã} ÑÏ– \ ê8\ ¨mt ⌘îX‰t, ৆¯®<\ \⌅Xî Ét D î`¿ƒ ®x‰. X¿Ã, ÖÖ 0 µƒ… á⌧\ ÑÏ| î}` Lƒ à‰. Ù‡Xîp ¨©⇠î π1X á⌧î ‰L¸ ⇡‰. • ⌘ÏΩ•1 (central tendency): ✓‰t π \ ⇣D ¸Ï<\ p—Xî Ω •t àî ? • ®‹ (modes): Xò t¡ p—(cluster)t àî ? • |– (spread): ✓‰– º»ò Œ@ ¿Ÿt àî ? • ,¨ (tails): ®‹(\H✓)–⌧ @¥» L, U`t º»ò h¨ ®¥¿î ? • πt⇣ (outliers): ®‹(\H✓)–⌧ @¨ ®¥ƒ ˘Ë✓t àî ? ¡0 »8– ıXƒ] $ƒ⌧ µƒ…t î}µƒ (summary statistics)‰. ¿ L¿ • T\ î}µƒî …‡(mean)<\ ÑÏX ⌘ÏΩ•1D 0 Xî Xƒ à‰. ✓t xi x n⌧ \¯t à‰t, …‡ x̄î ✓D i\ §– \¯/⇠\ ò ‰; ‰x –\, 1 x̄ =  xi n i Ét “…‡ (mean)”@ “…‡(average)”@ LL\ ¡88X <<\ ¨©⌧‰. X¿ à ‰L¸ ⇡t t E–⌧ lƒ\‰. 8. Ñ∞ (Variance) 23 • \¯ “…‡ (mean)”@ ^ ı›<\ ƒ∞⇠î î} µƒ‰. • “…‡ (average)”@ ⌘ÏΩ•1D 0 X$‡ ⌘ Xò‰. ›Xî ‰⇠ î}µƒ… LL\ …‡(mean)@ ✓‰X —iD ò 0 \‰. | ‰¥, ¨¸î pX l0 Ÿ|X‰. (\å\ »∏–⌧ ¨î ¨¸î ¯⌥‰.) ¯ò⌧, ¨¸ 6⌧| ¨‡, ⌅¥ 4å 3 ¥‹|t, ¨¸ @ 0.5 ¥‹|‡ ¸•Xî É@ |¨àî î}t ⌧‰. X¿Ã, 8 @ ÄT ‰ëX‰. C-–⌧ 8 áÖD 0x‰‡ Xê. ¥ê † 1 ¥‹ •›© 8 3⌧, 3 ¥‹ 8 t© 8 2⌧, ¯¨‡ 519 ¥‹ ⌧ë px 8 \⌧| ⇠Uà‰. \¯ …‡@ 100 ¥‹‰. X¿Ã, “C-– 8 …‡ 4åî 100 ¥‹”|‡ –\‰t $ƒ` ⇠ à‰. 8 4å– t⌧ ⌅ x 8 t ∆0 L8– X¯\ …‡@ ∆‰. ⌧8 Ñ∞ (Variance) 8 4å| î}Xî Ë XòX +ê …‡(meand)¸ Ñ∞ (variance). ∆‰t, +ê P⌧\ ÄT ò ` ⇠ à‰; Ñ∞@ ÑÏX ¿Ÿ(variability)¸ |–(spread)D 0 X$î î}µƒ‰. ✓ ‰X —i– \ Ñ∞@ ‰L¸ ⇡‰. S2 = 1 ( xi n i x̄ )2 xi x̄ m@ “…‡<\Ä0 ∏((deviation from the mean)”|‡ X‡, Ñ∞@ …‡⌧Ò∏(‰. Ñ∞X ⌧Ò¸(S)D \ ∏( (standard deviation)|‡ \‰. t⌅– Ωÿt à‰t, Ñ®– n ‡– n 1\ Ñ∞D ƒ∞Xî ı›D $D É t‰. t µƒXî \¯D ¨©t⌧ ®—Ë Ñ∞D î Xîp ¨©⌧‰. tÉ– t⌧î ò⌘– ??•–⌧ ‰‹ ‰ Ét‰. ⇣‰§ êÃlpî …‡, Ñ∞, \ ∏(| ƒ∞Xî Tÿ‹| ⌧ı\‰. mean = live.prglngth.mean() var = live.prglngth.var() std = live.prglngth.std() ®‡ ¡ ÑÖ t⌧, …‡ ч0⌅@ 38.6¸, \ ∏(î 2.7¸\ X¯Xî î |⇠ <\ 2-3¸ ∏( à‰î Ét‰. ч 0⌅X Ñ∞@ 7.3<\ t X0 Ï5‰. πà, Ë⌅ ¸2 , â “¸ ⌧Ò” t‰. Ñ∞@ áá ƒ∞–⌧î ©X¿Ã, ã@ î}µƒî D»‰. 24 ⌧ 2 •. ÑÏ (Distribution) ⌧9 ®¸ l0 (Effect size) ®¸ l0(effect size)î ®¸X l0| 0 X$î î} µƒ‰. —Ë⌅– (t| 0 X0 ⌅t⌧ …‡✓X (tî ÖU\ \ ¿ | ‰¥, P ›t ⌧‰. ´¯ Dt– \ …‡ ч0⌅@ 38.601; ´¯| ⌧x\ Dt‰X …‡ ч 0⌅@ 38.523t‰. (tî 0.078¸ ⇠‡, ‹⌅<\î 13‹⌅t‰. ⌅ x ч0⌅– \ |ÄÑ<\ Ùt, (tî } 0.2% ⌧‰. Ã} î X UX‰‡ Xt, t@ ⇡@ (tî ‰» x ⌘î1@ ∆‰. ¨‰, ‹® ч¨@| 0X¿ J‡ ⌅lƒ t@ ⇡@ (t| x¿` É ⇡¿ î J‰. ®¸X l0| ⌅ÏXî ⇣ ‰x )ï@ —Ë⌅(between groups)X (t| —Ë ¥(within groups) ¿Ÿ1¸ DPXî Ét‰. TË(Cohen) d tÏ\ Xƒ| ƒ µƒ…t‰; ‰L¸ ⇡t X⌧‰. d= x¯1 x¯2 s x¯1 @ x¯2 @ —Ë …‡✓t‡, sî “iŸ \ ∏((pooled standard deviation)” ‰. TË(Cohen) d| ƒ∞Xî tl T‹ ‰L– à‰. def CohenEffectSize(group1, group2): diff = group1.mean() - group2.mean() var1 = group1.var() var2 = group2.var() n1, n2 = len(group1), len(group2) pooled_var = (n1 * var1 + n2 * var2) / (n1 + n2) d = diff / math.sqrt(pooled_var) return d t ⌧`⌧, …‡✓X (tî 0.029 \ ∏(\ l¿ J‰. tÏ\ ⇣–⌧ ¯‰t, ®1¸ Ï1X § (tî } 1.7 \ ∏(‰.(https://en.wikipedia. org/wiki/Effect_size 8p) ⌧ 10 ∞¸ Ù‡X0 ´¯ Dt@ ´¯ Dà Dt⌅– ч 0⌅(Ã} (t Xî á ¿ )ïD ¥¥$‰. à‰t)– (t| 0 11. µ 8⌧ 25 »8@ ⌅ »8D Xê–– Ï$à‰. ¸Yêî D4¨ ëT|ƒ t¨Xî (‰ ⌧) (t– Ït àD¿ ®x‰. X¨î Ë¿ Ñ¡ <\ X\ (clinically significant) ®¸–à ÏD X ⇠ à‰; â, XÃ∞ – •D ¸î (t. Ñ ‡\ Ï1@ ¶å 9@ h¨ ú∞` U` ⇡@ ¯x–å (⌧ ∞¸–à Ït àD ⇠ à‰. ¥ªå ∞¸| Ù‡`¿ƒ ⇣\ © – Ï$à‰. Ã} ®¸X ⌘î1D ‹ X$‡ \‰t, (t| pXî î}µƒ…D ›` ⇠ƒ à‰. Ã} Xê| HÏ‹§‡ê \‰t, (t| ¸P– T µƒ…D ›`¿ƒ ®x‰. <`, ¯xX ∞ @ ⇣\ ⌅8 $¨– 0||à \‰. $›X$‡ \‰t ⌧. ‰; §†¨| ÖUXå ⌅ÏXî ‹ T ƒl@ µƒ Ù‡⌧| $ƒt|à \‰. X¿Ã, ⇣\ Ù‡⌧| ¡Xå ɇ, à\‰1¸ \ƒ| x Xîpƒ \ D ‰t| \‰. ⌧ 11 µ 8⌧ Exercise 2.1 tà •X ∞¸– 0⇠t⌧, ´à¯ Dt ú∞t ¶@ – 0¥ ÉD î}Xƒ] î≠  Xê. t⌧ 9‹ t§– ò(‰t, ¥§ î} µƒ…D ¨©t| `L? àHt Xî Xê| HÏ‹§$t ¥§ î} µƒ…D ¨©t| `L? »¿…<\, ƒ‰\ Ù(The Straight Dope) (http://straightdope.com)X ê 8‰ DÙ§(Cecil Adams)|‡ ¡¡Xê. ÏÏÑX |@ “´¯ Dt ¶å ‹¥òî ?” »8– ıXî Ét‰. ÑÖX‡, UX‡, ¡Xå »8– ı Xîp tà •–⌧ ò( ∞¸| ¨©t⌧ \ 8Ë<\ ë1X‹$. Exercise 2.2 ‰¥\‹ @ •å–⌧, chap02ex.ipynb |î tÑX |D > D⌧ ‰. |Ä @t t¯ DÃ8 à‡, Dà @@ ‰ât| \‰. ‰x @@ µ8⌧\ Ö9¥| #¥ ¸¥| ⌧‰. ¿hD 0|⌧ ıD DÃ#<8î. µ8⌧– \ tı@ chap02soln.ipynb ‰L µ8⌧\, chap02ex.py tÑ<\ |– ıt ò@à‰. |– ò@ à‰. |D ›1X‹$. chap02soln.py Exercise 2.3 ÑÏ \H✓(mode)@ • HàXå ò$î ✓t‰; http:// wikipedia.org/wiki/Mode_(statistics)D 8p\‰. Hist| Ö%✓<\ D⌧ • HàXå ò$î ✓D ⇠XXî h⇠ Mode| ë1X‹$. ÄT ƒ⌅ x µ8⌧\, AllModes|î h⇠| ë1\‰. Hƒ⇠| ¥º(⌧ <\ ,Xî ✓-Hƒ| ›¿@ ©]<\ ⇠X\‰. 26 ⌧ 2 •. ÑÏ (Distribution) Exercise 2.4 ¿⇠ totalwgt_lbD ¨©t⌧, ´à¯ Dt ‰x Dt‰Ù‰ T º¥¿ T 4p¥¿ p¨X‹$. —Ë ¨t (t| …TXîp TË d (Cohen’s d)| ƒ∞\‰. ч 0⌅– (t@ ¥ªå DP ⇠î ? ⌧ 12 ©¥¨⌅ • ÑÏ (distribution): \¯– ò¿òî ✓¸ ⌧ƒ ✓X Hƒ • ৆¯® (histogram): ✓–⌧ Hƒ\ ‰Q, 9@ ‰QD ÙÏ¸î ¯ò ⌅. • Hƒ (frequency): \¯–⌧ ✓t ò¿òî ü⇠. • \H✓ (mode): \¯–⌧ X Xò. • • Hƒ í@ ✓ 9@ • Hƒ í@ ✓⌘ ‹ÑÏ (normal distribution): t¡ x Ö®ë ÑÏ; L$8 à‰. ∞§ ÑÏ\ƒ • ‡ÒÑÏ (uniform distribution): ®‡ ✓t Ÿ|\ ¯ƒ| î ÑÏ. • ,¨ (tail): • í‡ • Æ@ ˘Ë– àî ÑÏ ÄÑ. • ⌘ÏΩ•1 (central tendency): \¯ 9@ ®—Ë π1X; ¡ ‡ 9@ ⌅ x ✓. <\ … • πt⇣ (outlier): ⌘ÏΩ•1–⌧ ®¥ƒ ✓. • |– (spread): ÑÏ– àî ✓‰t º»ò |8àî¿– \! . • î}µƒ (summary statistic): ⌘ÏΩ•1 9@ |–⇡t ÑÏX |Ä ! tD …TXî µƒX. • Ñ∞ (variance): |–D …TXîp ÖÖ ¨©⇠î î}µƒ. • \ ∏( (standard deviation): Ñ∞X ⌧Ò¸<\ ⇣\ |–D ! Xî p ¨©⌧‰. • ®¸ l0 (effect size): —Ë⌅X (tò¸ ®¸ l0| µƒ. • Ñ¡ <\ àî ∞¸. …TXî î} X\ (clinically significant): —Ë⌅ (tò¸, ‰⌧\ ⌧3• U` »… h⇠ tà •–⌧ ¨©⇠î T‹î probability.py– à‰. T‹| ‰¥\‹X‡ ë ≈Xî É– \ Ùî ??D 8p\‰. ⌧1 Pmf ÑÏ| \⌅Xî ⇣‰x )›@ U` »… h⇠(probability mass function) (PMF)\ ✓D U`\ ‰Q\‰. U`(probability)@ \¯ l0 nX |Ä\ ⌧ \⌅⇠î Hƒ‰. Hƒ–⌧ U`D ª0 ⌅t⌧, n<\ ò⌅îp t| ‹T (normalization)|‡ Äx‰. Hist ¸¥¿t, ✓– U`✓D ‰QXî T ¨| É ⇠ à‰. n = hist.Total() d = {} for x, freq in hist.Items(): d[x] = freq / n 9@ thinkstats2–⌧ ⌧ıXî Pmf tò§| ¨©` ⇠ƒ à‰. Hist@ », ¿\, Pmf ›1êî ⇣‰§, ‹¨à, T ¨, Hist, ‰x Pmf ¥| D ⇠ à‰. ‰L– ⌅Ë\ ¨§∏| Ö%✓<\ î ⌧ à‰. >>> import thinkstats2 >>> pmf = thinkstats2.Pmf([1, 2, 2, 3, 5]) >>> pmf Pmf({1: 0.2, 2: 0.4, 3: 0.2, 5: 0.2}) Pmfî ‹T ¸ D p– ⌅¥ U`✓t 1t ⌧‰. 28 ⌧ 3 •. U` »… h⇠ Pmf@ Hist ¥î Œ@ ⇣–⌧ D∑X‰; ¨‰, ıµ Ä® tò§–⌧ Œ@ Tÿ ‹| ¡ç X‰. | ‰¥, Values@ Items Tÿ‹î P ¥ ®P– Ÿ|\ ) ›<\ Ÿë\‰. • p (t⇣@ Hist ✓D ⇠ ƒ⇠0(integer counter) \ ‰Q\‰î Ét‡; Pmfî ✓D ÄŸå⇠⇣ U`✓<\ ‰Q\‰î Ét‰. ✓¸ ⌧ U`✓D påX$t, Prob| ¨©\‰.: >>> pmf.Prob(2) 0.4 æ‡ ∞êƒ ŸÒ\ 0•D \‰. >>> pmf[2] 0.4 0t Pmf| ✓¸ ⇠¥ àî U`✓D ù ‹¥<\h ¿Ω` ⇠ à‰. >>> pmf.Incr(2, 0.2) >>> pmf.Prob(2) 0.6 9@ U`– | …D Ò` ⇠ƒ à‰. >>> pmf.Mult(2, 0.5) >>> pmf.Prob(2) 0.3 Ã} Pmf| ¿ΩXt, ∞¸î ‹T⇠¿ JD¿ƒ ®x‰; â, U`✓D ‰ iX t 1t ⇠¿ JD¿ƒ ®x‰. U`✓D i\ ∞¸| ⇠XXîp ¨©⇠î Total Tÿ‹| 8út⌧ Ux\‰. >>> pmf.Total() 0.9 ‰‹ ‹TX0 ⌅t⌧, Normalize| 8ú\‰: >>> pmf.Normalize() >>> pmf.Total() 1.0 Pmf ¥î Copy Tÿ‹| ⌧ıXîp, t| µt⌧ –¯– ¨¯D ɇ ¿Ω ë≈D ` ⇠ à‰. •D ¸¿J‡, tà – \0ït | 1D ¿ Jî Éò¸ Ù|¿ƒ ®t¿Ã ¥ƒ à‰; Pmf| tò§ Öm<\, pmfî tò§X x§4§\, PMFî U`»…h⇠– \ ⇠Y ⌧P<\ D \0Xîp ¨©\‰. 2. PMF 29 o<\ ¯¨0 ¯º 3.1: … ¯ò⌅@ ƒË h⇠| ¨©XÏ, ´¯ D0@ ´¯ \ ч0⌅ PMF. ⌧2 PMF thinkplot@ Pmf Dà D0– o<\ ¯¨0 oD ¯¨î P ¿ )›D ⌧ı\‰. • Pmf| … ¯ò⌅\ ¯¨0 ⌅t⌧ thinkplot.HistD ¨©\‰. Ã} Pmf– ✓X ⌧⇠ ë‰t … ¯ò⌅ • ©\‰. • ƒË h⇠\ Pmf| ¯ò⌅ ¯¨0 ⌅t⌧î, thinkplot.PmfD ¨©` ⇠ à‰. Ã} ✓t Œ‡, Pmf ‰D˝‰t(smooth) ¡‘\ ›t ⌧‰. t h⇠î Hist ¥–⌧ƒ Ÿë\‰. î \, pyplot@ hist h⇠| ⌧ıXîp ✓(value) ‹ §| D⌧ ৆¯ ®D ƒ∞X‡, ¯ò⌅\ ¯∞‰. Hist ¥| ¨©X0 L8–, pyplot.hist@ ¨©X¿ Jî‰. ¯º ??@ … ¯ò⌅(|Ω)@ ƒËh⇠($xΩ)| ¨©t⌧ ´¯ Dt@ ´¯ Dà Dt– \ ч0⌅ PMF| ÙÏ ‰. ৆¯® ‡– PMF oD ¯$⌧, \¯(t\ $ƒ⇠¿ J‡ P ÑÏ| DP` ⇠ à‰. ¯ºD t Xt, ´à¯ Dtî ‰x Dt‰Ù‰ ‹(39¸() – ú∞X¿ J‡, ¶å(41, 42¸() ú∞` É ⇡‰. ¯º ??D ›1Xî T‹ ‰L– à‰: 30 ⌧ 3 •. U` »… h⇠ thinkplot.PrePlot(2, cols=2) thinkplot.Hist(first_pmf, align='right', width=width) thinkplot.Hist(other_pmf, align='left', width=width) thinkplot.Config(xlabel='weeks', ylabel='probability', axis=[27, 46, 0, 0.6]) thinkplot.PrePlot(2) thinkplot.SubPlot(2) thinkplot.Pmfs([first_pmf, other_pmf]) thinkplot.Show(xlabel='weeks', axis=[27, 46, 0, 0.6]) PrePlot Tÿ‹î 5X ‰⌧¿⇠ rows@ colsD D⌧ ¯º ©ê(grid)| à ‹îp tΩ∞ \ â– ¯º P⌧| #î ©ê ⌧‰. ´à¯ ¯º(|Ω)@ thinkplot.HistD ¨©t⌧ ^–⌧ $X Pmf| Tt– ú%\‰. PrePlot– P௠8ú\ …T ›1ê| 0T\‰. ¯¨‡ ò⌧ SubPlott P௠¯º($xΩ)<\ ‘⌧, thinkplot.PmfsD ¨©t⌧ Pmf| Tt– ú%\‰. axisD ¨©t⌧ ¯º P⌧ ®P Ÿ|\ ï(axis)– ìÏ¿ƒ] U‰ à \‰. ¯º P⌧| DPX$‡ \‰t, ïD µ|Xî Ét ã‰. ⌧3 ‰x ‹ T )ï ৆¯®¸ PMF@ pt0| –…X‡ (4¸ ƒ| ›ƒXîp ©Xå ¨©⌧‰. pt0–⌧ 4® Ù Ù®8à‡, ¥ªå ÃD î¿ Dt¥| ªå ⌧‰t, ‰L ˃î \ \ TTXå ›ƒ\ (4T` ⇠ àî ‹ T $ƒ Xî Ét‰. NSFGpt0–⌧ ÑÏ–⌧ • p (tî ®‹(\HX)– à‰. ¯ò⌧, ¯ò ⌅–⌧ t ÄÑÃD U XÏ ‰Ï‰Ù‡, (t| pXƒ] êÃ| ¿XXî Ét X¯ à‰. weeks = range(35, 46) diffs = [] for week in weeks: p1 = first_pmf.Prob(week) p2 = other_pmf.Prob(week) diff = 100 * (p1 - p2) diffs.append(diff) thinkplot.Bar(weeks, diffs) 4. Y l0 (Ï≈§ (class size paradox) 31 ¯º 3.2: ¸ƒ 1Ñ(⇣(percentage point)<\ ò¿∏ (t. ¡0 T‹–⌧ weeks ч¸ î⌅‰; diffsî |<∏–⌧ P PMF⌅ (t ⌧‰. ¯º ??î … ¯ò⌅\ ∞¸| ÙÏ ‰. ¯ºt (4D ÄT ÖUXå \ ‰: ´¯ Dtî ч 39¸(– \ ‹¥† É ⇡‡, ч 41, 42¸(– T ‹¥† É ⇡‰. ¿ L¿ ∞`D † <\ ¥8‰. Ÿ|\ pt0KD ¨©t⌧ Ö1Xå ( t| ›ƒX‡ ò⌧ (t| ÖUXå Ã‹î ‹ T )›D ›à‰. ®¸ ( t ‰» x¿ U‰X‰‡ ` ⇠î ∆‰; U`¿Ÿ(random variation)| ⇠ƒ à‰. ò⌘– t 8⌧| ‰‹ ‰ Ét‰. ⌧4 Y l0 (Ï≈§ (class size paradox) ƒƒ| T ò 0 ⌅–, Pmf ¥| ¿‡ ` ⇠ àî \ ¿ ƒ∞(computation)D ‹X‡ê \‰; ‰L ⌧| “Y l0 (Ï≈§(class size paradox)” |‡ ÖÖ\‰. Œ@ ¯m Y–⌧, Y› P⇠ D(@ } 10:1t ⌧‰. X¿Ã ÖÖ Y›‰t …‡ Y l0 10Ù‰ p ÉD ⌧¨X‡ Ä|‰ \‰. à|X– \ P ¿ t à‰. • Y›‰t Y0˘ |⇠ <\ 4–5 ¸©D ⇠ X¿Ã, P⇠î 1 9@ 2 P¸ ©Ã t\‰. • @Y Œ‰. ⇠≈D ê0î Y› +êî ¿Ã, p Y ⇠≈– Y›⇠î 32 ⌧ 3 •. U` »… h⇠ ´ t î ÖUX¿Ã, P௠t î ‰å ®8X‰. ¨@| ¥¥Ùê. Y–⌧ ‰L¸ ⇡@ Y l0 ÑÏ\ \ Y0– 65 P¸©D ⌧$\‰‡ Xê. size 5- 9 10-14 15-19 20-24 25-29 30-34 35-39 40-44 45-49 count 8 8 14 4 6 12 8 3 2 Ã} YP •–å …‡ Y l0| <¥¯‰t, •@ PMF| ›1X‡, …‡ D ƒ∞X‡ ò⌧ Y …‡ l0 23.7t|‡ Ù‡\‰. ‰L– T‹ à‰. d = { 7: 8, 12: 8, 17: 14, 22: 4, 27: 6, 32: 12, 37: 8, 42: 3, 47: 2 } pmf = thinkstats2.Pmf(d, label='actual') print('mean', pmf.Mean()) X¿Ã, Y›—ËD ¡<\ ⇠≈– Y›t àî¿ <¥Ù‡, …‡D ƒ∞\‰ t, …‡ Y l0 T l‰‡ › ` Ét‰. º»ò T p¿ ¥¥Ùê. < , Y›‰t !\ ÑÏ| ƒ∞Xê. Ï0⌧ Y – àî Y›<\ “∏X(bias)” à‰. Y l0@ ⌧ U`@ def BiasPmf(pmf, label): new_pmf = pmf.Copy(label=label) for x, p in pmf.Items(): new_pmf.Mult(x, x) new_pmf.Normalize() return new_pmf Y l0 x»‰, U`✓– Y ∏XÑÏ| ò¿¥î »\¥ Pmf t⌧ ‰⌧@ !⌧ ÑÏ ®P| l0| ⌧‰. !\ Y›⇠ x| Ò\‰. ∞¸î o ¯ò⌅\ ¯¥ ⇠ à‰. biased_pmf = BiasPmf(pmf, label='observed') thinkplot.PrePlot(2) thinkplot.Pmfs([pmf, biased_pmf]) thinkplot.Show(xlabel='class size', ylabel='PMF') 4. Y l0 (Ï≈§ (class size paradox) ¯º 3.3: ‰⌧✓¸ Y›t !\ ✓– 33 \ Y l0 ÑÏ. ¯º ??@ ∞¸| ÙÏ ‰. ∏X⌧ ÑÏ–⌧ ë@ Y @ T ë‡, p Y @ T Œ‰. ∏X⌧ ÑÏ …‡@ 29.1\ ‰⌧ …‡✓Ù‰ } 25%T Œ‰. t ∞D p∏\ Xî Ƀ ⇣\ •X‰. Y Y l0 ÑÏ| L‡ê \ ‰‡ Xê. X¿Ã, Y •<\Ä0 ‡∞1 àî êÃ| ªD ⇠î ∆‰. H@ 4ë⌅ Y› \¯D Ë| Y – Y›⇠ º»x¿ $8Xî Ét‰. ∞¸î ^ ¥¥$X t \ ∏X àD¿ ®t¿Ã, tÉD ¨©t⌧ ‰⌧ ÑÏ| î \‰. ‰L– Pmf à∏X(unbiased) h⇠ à‰. def UnbiasPmf(pmf, label): new_pmf = pmf.Copy(label=label) for x, p in pmf.Items(): new_pmf.Mult(x, 1.0/x) new_pmf.Normalize() return new_pmf BiasPmf h⇠@ D∑X‰; ‰î Ét‰. |\ (t⇣@ ÒXî ‡– U`✓D x\ ò 34 ⌧ 3 •. U` »… h⇠ ⌧5 pt0⌅ Ñ xqÒ (DataFrame indexing) ?? –⌧ ⇣‰§ pt0⌅ ÑD }‡, pt0⌅ ÑD ¨©t⌧ pt0 Ù(| ¸)D ›X‡ ¿Ωà‰. t⌧ â ›D ¥¥Ùê. NumPy ú⇠ â,D ›1X ‡, tÉD ¨©t⌧ pt0⌅ Ñ<\ 0T\‰. >>> >>> >>> >>> >>> 0 1 2 3 import numpy as np import pandas array = np.random.randn(4, 2) df = pandas.DataFrame(array) df 0 1 -0.143510 0.616050 -1.489647 0.300774 -0.074350 0.039621 -1.369968 0.545897 0 $ ✓(by default)<\ ⸠٠®P 0–⌧ ‹ëXî +ê\ à8 ƒ‰. X¿Ã, ÙtÑD ¿ ` ⇠ à‰. ‰® >>> columns = ['A', 'B'] >>> df = pandas.DataFrame(array, columns=columns) >>> df A B 0 -0.143510 0.616050 1 -1.489647 0.300774 2 -0.074350 0.039621 3 -1.369968 0.545897 âtу ¿ ` ⇠ à‰. âtÑ —iD index|‡ \‰; âtÑ ê¥î labels t|‡ \‰. >>> index = ['a', 'b', 'c', 'd'] >>> df = pandas.DataFrame(array, columns=columns, index=index) >>> df A B a -0.143510 0.616050 b -1.489647 0.300774 c -0.074350 0.039621 d -1.369968 0.545897 ^•–⌧ ¥¥ÙXÔt, Ë⌧ xqÒ<\ ÙD >>> df['A'] a -0.143510 b -1.489647 ›Xt ‹¨à| ⇠X\‰. 5. pt0⌅ Ñ xqÒ (DataFrame indexing) 35 c -0.074350 d -1.369968 Name: A, dtype: float64 t(label)\ âD ›X$t loc ç1D ¨©Xt ⇠‡ ‹¨à| ⇠X\‰. >>> df.loc['a'] A -0.14351 B 0.61605 Name: a, dtype: float64 t(label) Ù‰ âX ⇠ ⌅X Ù| L‡ à‰t, ilocç1D ¨©X‡, ‰â ∞¸\ ‹¨à| ⇠X\‰. >>> df.iloc[0] A -0.14351 B 0.61605 Name: a, dtype: float64 ⇣\ locî t ¨§∏| xê\ ‡, ∞¸\ pt0⌅ ÑD ⇠X\‰. >>> indices = ['a', 'c'] >>> df.loc[indices] A B a -0.14351 0.616050 c -0.07435 0.039621 »¿…<\ t(label)\ â î⌅| ›Xîp ¨|t§| ¨©` ⇠ à‰. >>> df['a':'c'] A B a -0.143510 0.616050 b -1.489647 0.300774 c -0.074350 0.039621 9@ ⇠ ⌅X Ù| ¨©` ⇠ƒ à‰. >>> df[0:2] A a -0.143510 b -1.489647 B 0.616050 0.300774 ¥ê Ω∞‡¿ ƒ∆t ∞¸î pt0⌅ Ñt ⌧‰. X¿Ã ´à¯ ∞¸î ¨ |t§ ]✓D ÏhX¿Ã, Pà¯î ]✓D ÏhX¿ Jî ÉD ¸©X|. ê ©‡: Ã} â– Ë⌧à ⇠✓t Dà t(label)t à‰t, | ⇠å ¨©X‡ ⇠ ⌅X Ù ¨©D <X|. tD 36 ⌧6 ⌧ 3 •. U` »… h⇠ µ 8⌧ tà µ8⌧ Ù®à‰. \ tı@ chap03soln.ipynb |¸ chap03soln.py |– Exercise 3.1 Ã} ê@– t⌧, º»ò Œ@ ê@ àî¿ ;î‰t, Y l 0 (Ï≈§ ⇡@ Ét ò¿ú‰. Œ@ ê@| î qt \¯– T ò ò¿† É ⇡‡ ê@ ∆î qt \¯– ò¿† •1@ ∆‰. NSFG Qıê NUMKDHH ¿⇠| ¨©t⌧ ÑÏ| ›1X|. l–⌧ 188 tX ê@⇠– t⌧ Ã} ê@– t⌧, 188 tX (¯x Ïh) º»ò Œ@ ê@ î‰t, Ùå ∏•⌧ ÑÏ| ƒ∞X|. \ ‰⌧ àî¿ ; ‰⌧ ÑÏ@ ∏•⌧ ÑÏ| ƒ›TX‡ …‡D ƒ∞X|. ú⌧•å\ chap03ex.ipynb |D ¨©` ⇠ à‰. Exercise 3.2 ?? –⌧ l1îå| Tt ‡ n<\ ò ⌧ \¯ …‡D ƒ∞à ‰. Ã} PMF ¸¥¿t, Ï⌅à …‡D ƒ∞` ⇠ à<ò, ¸ @ ‰å (t ú‰: x̄ =  pi xi i Ï0⌧, xi î PMF– àî |\ ✓t‡, pi = PMF ( xi ). », ¿\, ‰L¸ ⇡t Ñ∞D ƒ∞` ⇠ à‰: S2 =  pi ( xi x̄ )2 i Pmf ¥| xê\ D …‡¸ Ñ∞D ƒ∞Xî h⇠| PmfMean @ PmfVar <\ tÑ¿¥ ë1X‹$. ë1\ Tÿ‹| L§∏X0 ⌅t⌧, Pmf–⌧ ⌧ı Xî Mean, Var Tÿ‹@ |XXî¿ Ä¨X|. Exercise 3.3 êî “´¯ Dt ÄT ¶å ‹¥† É ⇡@ ?” |î »8<\ ‹ëà‰. t »8D ‰Ëîp, Dt —Ë⌅– …‡– (t| ƒ∞à‰. X¿Ã, Ÿ| Ï1– t ´¯ Dt@ ‰x Dt ¨t– (t àD ⇠ à‰î •1D ⌅¸à‰. t »8D ‰Ëîp, ¥ƒ Dt PÖx Qıê| ›X‡ ƒ (t(pairwise difference)| ƒ∞\‰. t »8 l1t ‰x ∞¸| ƒút ¥î ? å∏: nsfg.MakePregMapD ¨©\‰. Exercise 3.4 ÄÑX ƒÙΩ¸(foot race)–⌧ ®‡ ¨åt ⇡@ ‹⌅– ú⌧\ ‰. Ã} `x ¸ê|t, ⇠ Ω¸–⌧ Œ@ ¨åD ^»Ï ⌅‰. X¿Ã, á »| ¿ú ƒ– ¸⌅ ®‡ ¨å@ ⇡@ çƒ] Ï$⌅‰. 7. ©¥¨⌅ 37 ê òL<\ •p¨ (209»|) ƒ¸| »D L, êî πt\ ⌅¡D L DX‰: ê ‰x ¸ê| 0| °XD L, êî µ¡ Ë, T `t‡, ⇣‰x ¸ê ê| 0| °XD L, ⇣‰x ¸ê êÙ‰ Ë, T `t‰. òL–, êî ⇠çƒ ÑÏ t t|‡ › à‰; â, çƒ çƒ `x ¸ê, X¿Ã ê@ ⇡@ çƒî å⇠. ê∞ ¸ê@ ¯¨‡ ò⌧, ê Y l0 ®¸@ ¨\ ∏•X l›êÑD x›Xå ⇠» 0. Ω¸î P ¿ )›<\ |⇠ t J‰: §‹p‹ §¿∏(Staggered Start) | ¨©t⌧, ‰x ‹⇣– D ¿¥ ú⌧\‰; ¯ò⌧ ‰x ⇠ X •%D î ¸ê Œ@ – Ïh⌧‰. ∞¸ <\, ¸êî çƒ@ •å– pX ƒ∆t Ω¸¸ D µt⌧ I º–¿ å ⌧‰. ê Ω¸– 8 àD L, ê ¸⌅ 8 êî (¡˘à) Ω¸– 8 \ ÑX \¯t‰. ¯ò⌧, ∏•@ ¥⌧ ò$î É|L? Ω¸| ƒâXî ŸH, ê Ω¸ê| î‘X‡, Xî •1@ çƒ (t– D@\‰. ê ê∞ ¸ê| 0| °D É ⇡‡, `x ¸ê– 0|°ê Ô X‰. X¿Ã, ⇡@ çƒ| î ¸êî ⌧\| Ù¿ ª` Ô X‰. ObservedPmf\ à¨î h⇠| ë1\‰. ë1\ h⇠î ¸ê çƒ@ Ϩî !êX 烖 \ ‰⌧ ÑÏ| ò¿¥î Pmf| xê\ ‡, !ê ¯ Ω¸ êX ÑÏ| ò¿¥î »\¥ Pmf| ⇠X\‰. ë1\ h⇠| L§∏Xîp, relay.py| ¨©` ⇠ àîp, »t`¯ Dedham –⌧ Ù∞ 10 ¨\¯0 ⌧ѧ pt§ Ω¸(James Joyce Ramble)–⌧ ò( ∞ ¸| }‡ ¸êX çƒ| mph\ ¿X\‰. Ã} 7.5 mph\ t˘ —Ë ¸ê@ ƒ¸| Ï∞‰t, !` çƒ ÑÏ| ƒ∞X ‹$. t µ8⌧ \ tı@ relay_soln.py– ò@à‰. ⌧7 ©¥¨⌅ • U`»…h⇠ (Probability mass function, PMF): ✓D U`\ ‰QXî h⇠\ ÑÏ| \⌅. • U` (probability): \¯l0X |Ä\ \⌅⇠î Hƒ⇠. • ‹T (normalization): U`✓D ª0 ⌅t⌧ \¯ l0\ Hƒ⇠| ò ⌅î ¸ . • xq§ (index): ⇣‰§ pt0⌅ Ñ–⌧, xq§î â hXî πƒ\ Ù(|¸)t‰. t(label)D Ï 38 ⌧ 3 •. U` »… h⇠ ⌧4• ⌅ ÑÏh⇠ tà •–⌧ ¨©⇠î T‹î cumulative.py– à‰. T‹| ‰¥\‹X‡ ë ≈Xî É– \ Ùî ??D 8p\‰. ⌧1 PMFX \ƒ⇣ PMFî ✓(value)X ⇠ ë‰t ò Ÿë\‰. X¿Ã, ✓X /⇠ ù h– 0 |, ✓¸ ⌧ U`✓t T ëD¿‡ U`°L(random noise)X ®¸î ù \‰. | ‰¥, ú∞ ¥⌘ ÑÏ– Ït à‰‡ Xê. NSFG pt0–⌧ totalwgt_lb ¿⇠ ¥‹\ ú› ¥⌘D 0]\‰. ¯º ??t ´à¯ Dt@ ´¯ Dà Dt– \ ¥⌘✓D PMF\ ÙÏ ‰. ⌅⇠ <\ ÑÏî ‹ÑÏX Ö®ëD ÓX‰. …‡ ¸ò– ✓t Œ‡ ¥⌘t T ípò T ÆD¿t ✓t ëDƒ‰. X¿Ã ¯ºD ttX0î ¥5‰. ∞q\ ɸ Ëê0 Œ‡, P —Ë ÑÏ ¨ t– Ö1\ (tƒ Ùx‰. Ïˇ⌘–⌧ ¥ê tt X¯\¿ Ñ⌅X0î }¿ J‰. ⇣\ ⌅⇠ x (4D Ù0ƒ ¥5‰; | ‰¥, ÏÏÑt Ù0– ¥ê ÑÏ …‡✓t T í@ ? pt0| l⌅(bin)– Ùî É<\ tÏ\ 8⌧î DT ⇠ à‰; â, ✓ î⌅| ⌧\ π–¿¿ Jî l⌅<\ ò⌅‡ l⌅(bin)– ✓ /⇠| ƒ⇠\‰. l⌅– Ùî É(binning)@ ©X¿Ã, \ l⌅ l0| °î É@ L‰m‰. °L D …\(smooth out)X0 ⌅t⌧ ©Ñà p µD °î Ét ⇣\ ©\ Ùƒ …\` ⇠ƒ à‰. 40 ⌧ 4 •. ⌅ ÑÏh⇠ ¯º 4.1: ú›¥⌘ PMF. PMFX \ƒ| ¯ºt Ùϸ‡ à‰: ‹ë <\ DP X0 ¥5‰. tÏ\ 8⌧| å<Xî Ht ⌅ ÑÏh⇠(cumulative distribution function, CDF)\ tà • Yµ¸⌧‰. X¿Ã, CDF| $ÖX0 ⌅– 1Ñ⌅⇠(percentile)| < $Öt| \‰. ⌧2 1Ñ⌅⇠ (Percentiles) Ã} ⌅m Ë⌅ \ ‹ÿD Xtå ⇠t, –⇣⇠@ 1Ñ⌅ ⌧⌅(percentile rank) ‹\ ‹ÿ∞¸| DÙå ⌧‰. tÏ\ Â}–⌧ 1Ñ⌅ ⌧⌅î ‹ÿ ˘¨ êÙ‰ @ ⇣⇠| ªî ¨å‰t ⌧‰. ¯ò⌧ Ã} “1Ñ⌅⇠ 90௔|t, ‹ÿD Xx 90% ¨åÙ‰ 9@ ŸÒX‰î X¯ ⌧‰. ‰L– scores ‹ § ✓–⌧ ¡ ƒ∞Xî )ït à‰. <\ your_score ✓– \ 1Ñ⌅ ⌧⌅| def PercentileRank(scores, your_score): count = 0 for score in scores: if score <= your_score: count += 1 percentile_rank = 100.0 * count / len(scores) return percentile_rank ⌧\ Ã} ‹ § ⇣⇠ 55, 66, 77, 88, 99t‡, ‹ÿ ⇣⇠\ 88⇣D 1Ñ⌅ ⌧⌅î 100 * 4 / 5, 80t ⌧‰. X‰t, 3. CDF 41 ✓t ¸¥ƒ‰t, 1Ñ⌅ ⌧⌅| >0î }‰; ⇠ )•<\î ‰å T ¥5‰. Ã} 1Ñ⌅ ⌧⌅ ¸¥ƒ ¡‹–⌧ t˘Xî ✓D >‡ê \‰t, \ ›¿î ✓D ,X‡ –Xî ✓D >î Ét‰. def Percentile(scores, percentile_rank): scores.sort() for score in scores: if PercentileRank(scores, score) >= percentile_rank: return score ƒ∞ ∞¸î 1Ñ⌅⇠(percentile) ⌧‰. | ‰¥, 50௠1Ñ⌅ ⇠î 1Ñ ⌅ ⌧⌅ 50 x ✓t ⌧‰. ‹ÿ⇣⇠ ÑÏ–⌧ 50௠1Ñ⌅ ⇠î 77t‰. Percentile l⌅T‹ ¯‰¿ ®( t¿ J‰. T ò@ ⌘¸ï@ 1Ñ⌅ ⌧⌅ | ¨©t⌧ t˘Xî 1Ñ⌅⇠ xq§| ƒ∞Xî Ét‰. def Percentile2(scores, percentile_rank): scores.sort() index = percentile_rank * (len(scores)-1) // 100 return scores[index] “1Ñ⌅⇠ (percentile)”@ “1Ñ⌅ ⌧⌅ (percentile rank)” (t <Ÿ§ Ï∏ ⇠ à‡ m¡ ©¥| UXå lƒXÏ ¨©X¿î Jî‰. î}Xt, PercentileRank h⇠î ✓D xê\ D ✓ —i–⌧ 1Ñ⌅ ⌧⌅| ƒ∞\ ‰; Percentile h⇠î 1Ñ⌅ ⌧⌅| xê\ D t˘Xî ✓D ƒ∞\‰. ⌧3 CDF t⌧ 1Ñ⌅⇠@ 1Ñ⌅ ⌧⌅| ttX‡ à0 L8–, ⌅ ÑÏh⇠(cumulative distribution function, CDF)| ‰ D ⇠»‰. CDFî ✓D 1Ñ⌅ ⌧⌅\ ‰QXî h⇠‰. CDFî xX h⇠\ xî ÑÏ– ò¿òî ÑX✓t‰. π \ x ✓– t⌧ CDF( x )| … X0 ⌅t⌧, x@ Ÿ|Xpò ë@ ÑÏX Ñ⇠✓D ƒ∞\‰. ‹ § sample@ ✓ x| xê\ î h⇠\ ¥§ êåx¿ ‰L– T‹ def EvalCdf(sample, x): count = 0.0 for value in sample: if value <= x: count += 1 prob = count / len(sample) return prob à‰. 42 ⌧ 4 •. ⌅ ÑÏh⇠ ¯º 4.2: CDF ⌧. h⇠ pX PercentileRank¸ Ÿ|X¿Ã, 1Ñ⌅ ⌧⌅ ¸✓t 0–1 î⌅| î U`t|î ⇣t (t à‰. ⌧\ \¯✓<\ [1, 2, 2, 3, 5]D ⇠—à‰‡ 0 ✓t á⌧ à‰. CDF (0) = 0 0–100x ⇠t– ∞ Xê. ‰L– CDF\Ä CDF (1) = 0.2 CDF (2) = 0.6 CDF (3) = 0.8 CDF (4) = 0.8 CDF (5) = 1 \¯– àî ✓–à D»| xX ÑX✓– t⌧ CDF| … ` ⇠ à‰. Ã} x \¯– • ë@ ✓Ù‰ ë‰t, CDF( x )î 0. Ã} x • p ✓Ù‰ l‰ t, CDF( x )î 1. ¯º ??t CDF| ¯ò=<\ \⌅\ Ét‰. \¯ CDFî ƒË h⇠‰. ⌧4 CDF \⌅X0 (Representing CDFs) thinkstats2@ CDF| \⌅Xî Cdf|î tò§| ⌧ı\‰. Cdf 0¯ Tÿ‹î ‰L¸ ⇡‰. ⌧ıXî • Prob(x): x ✓t ¸¥LD L, p = CDF( x ) U`✓D ƒ∞\‰. æ‡ ∞ êî Prob@ Ÿ|X‰. 5. CDF DPX0 43 ¯º 4.3: ч0⌅ CDF. • Value(p): U` p ¸¥LD L, ¡QXî ✓ x| ƒ∞\‰; â, pX CDF Ìh⇠(inverse CDF)‰. Cdf ›1êî xê\ ¨§∏, ⇣‰§ ‹¨à, Hist, Pmf, 9@ ⇣‰x Cdf| D ⇠ à‰. NSFG pt0–⌧ ч 0⌅ ÑÏ– \ Cdf| ›1Xî T‹ ‰L– à‰. live, firsts, others = first.MakeFrames() cdf = thinkstats2.Cdf(live.prglngth, label='prglngth') thinkplot@ Cdf|î h⇠| ⌧ıt⌧ Cdf| ¯ò⌅| ¯¥ ⇠ à‰. thinkplot.Cdf(cdf) thinkplot.Show(xlabel='weeks', ylabel='CDF') ¯º ??– ∞¸ à‰. CDF| }î \ ¿ )ï@ 1Ñ⌅⇠| >î Ét‰. | ‰¥, ч 0⌅ 10%î 36¸(Ù‰ T Á‡, 90%î 41¸(Ù‰ T Á@ Éò¸ Ùx‰. ⇣î CDF| µt⌧ ÑÏ ®ëD ‹ <\ \⌅` ⇠ƒ à‰. T\ ✓ @ CDF–⌧ ©Xpò ⇠¡ ÄÑ<\ ò¿ú‰; tà ⌧–⌧ 39¸( ®‹ (\H✓) ÖUà Ùx‰. 30¸( ⌘<\ ✓t á⌧ ∆¥⌧ t î⌅– àî CDF î ……X‰. CDF– u⇡t¿îp ‹⌅t Ä DîX‰. X¿Ã, \à u⇡t¿t, PMFÙ‰ T Œ@ Ù| ÄT ÖUXå ÙÏ⌅ É<\ › ⌧‰. ⌧5 CDF DPX0 CDFî πà ÑÏ| DPXîp ©X‰. | ‰¥, ´¯ Dt@ ´¯ Dt Dà Dt– \ ú∞ ¥⌘ CDF| o<\ ¯¨î T‹ ‰L– à‰. 44 ⌧ 4 •. ⌅ ÑÏh⇠ ¯º 4.4: ´¯ D0@ ´¯ Dà D0– \ ú∞¥⌘ CDF. first_cdf = thinkstats2.Cdf(firsts.totalwgt_lb, label='first') other_cdf = thinkstats2.Cdf(others.totalwgt_lb, label='other') thinkplot.PrePlot(2) thinkplot.Cdfs([first_cdf, other_cdf]) thinkplot.Show(xlabel='weight (pounds)', ylabel='CDF') ¯º ??– ∞¸ à‰. ¯º ??@ DPXÏ, ÄT ÖUXå ÑÏ ®ë¸ ÑÏ⌅ X (t| ¯º–⌧ ÙÏ ‰. ´¯ Dt ¥⌘t …‡ t¡–⌧ p T ‰‰Ä à|X1D Ùt‡, ÑÏ ⌅⇠– x– ‰å Õ‰î ÉD ¸ ⇠ à‰. ⌧6 1Ñ⌅⇠ 0⇠ µƒ… (Percentile-based statistics) CDF| ƒ∞Xå ⇠t, 1Ñ⌅⇠@ 1Ñ⌅ ⌧⌅| ƒ∞X0î }‰. Cdf tò§ P ¿ Tÿ‹| ⌧ı\‰. • PercentileRank(x): x \‰. ¸¥¿t, 100 · CDF( x ) 1Ñ⌅ ⌧⌅| ƒ∞ • Percentile(p): 1Ñ⌅ ⌧⌅ rank Value(p/100)¸ ŸÒX‰. ¸¥¿t, t˘Xî ✓ x| ƒ∞\‰. 1Ñ⌅⇠ (Percentile)î 1Ñ⌅⇠ 0⇠ îë µƒ…D ƒ∞Xîp ¨© ⇠ à‰. | ‰¥ 50௠1Ñ⌅⇠î ⌘⌅⇠ (median)\ L$ƒ ÑÏ| ⇠<\ 7. ú⇠ (Random numbers) 45 ò⌅î ✓t‰. …‡¸ », ¿\ ⌘⌅⇠î ÑÏX ⌘ÏΩ•1D ! Xî ! ƒ‰. ¨‰, 0 ‰x π1D ƒ “⌘⌅⇠(median)”– \ Ã, Percentile(50) Ë⌧X‡ ƒ∞X0 ®( t‰. X á⌧ à‰. X¿ ⇣ ‰x 1Ñ⌅⇠ 0⇠ µƒ…t ¨Ñ⌅⇠ î⌅ (interquartile range, IQR\ ÑÏX |–D ! Xî !ƒ‰. IQRî 75à¯@ 25௠1Ñ⌅⇠ ⌅X (t‰. ÄT |⇠ <\, 1Ñ⌅⇠î ÖÖ ÑÏ ®ëD î}Xîp σ‰. | ‰ ¥, ⇠Ö ÑÏî ÖÖ “Ñ⌅⇠ (quintiles)”\ Ù‡⌧‰; â, 20à¯, 40à¯, 60 à¯, 80௠1Ñ⌅⇠\ º⌧ƒ‰. ‰x ÑÏî 10⌧ “ÌÑ⌅(deciles)”<\ ò ƒ‰. t@ ⇡t CDF–⌧ Ÿ|⌅©<\ \⌅⇠î µƒ…D Ñ⌅⇠(quantiles)|‡ \‰. ÄT ê8\ Ùî ‰L ˘¨t∏| 8‡ ĉ. https: //en.wikipedia.org/wiki/Quantile. ⌧7 ú⇠ (Random numbers) ¡ ú∞ ®—Ë–⌧ ÑX \¯D îúX‡, ú› ¥⌘ 1Ñ⌅ ⌧⌅| >D∏‰ ‡ Xê. t⌧ 1Ñ⌅ ⌧⌅ CDF| ƒ∞\‰‡ Xê. ÑÏ ¥® É<\ › Xî ? ‰L– ¥ªå ƒ∞Xî¿ T‹ à‰. ´¯\ ú› ¥⌘ Cdf| ›1\‰. weights = live.totalwgt_lb cdf = thinkstats2.Cdf(weights, label='totalwgt_lb') ¯¨‡ ò⌧, \¯D ›1X‡, \¯– àî \‰. ✓– \ 1Ñ⌅ ⌧⌅| ƒ∞ sample = np.random.choice(weights, 100, replace=True) ranks = [cdf.PercentileRank(x) for x in sample] sample@ 100⌧ ú› ¥⌘ ÑX \¯tp ı– îúX ‰; â, Ÿ|\ ✓t \ àt¡ îú ⇠ à‰. ranksî 1Ñ⌅ ⌧⌅ ¨§∏‰. »¿…<\ 1Ñ⌅ ⌧⌅ Cdf| ɇ o<\ ¯∞‰. rank_cdf = thinkstats2.Cdf(ranks) thinkplot.Cdf(rank_cdf) thinkplot.Show(xlabel='percentile rank', ylabel='CDF') ¯º ??t ∞¸| ÙÏ ‰. CDF X¯‰. ¸¨ <\ ¡ t‰. ÑÏ ‡ÒX‰|î ∞¸ ÖUX¿ JD ⇠ƒ à¿Ã, CDF X⌧ )›X ∞¸‰. ¯ºt ÙÏ ¸î Ùî \¯X 10% 10௠1Ñ⌅⇠ Ù‰ ⌘– à‡, \¯X 20% 20 ௠1Ñ⌅⇠ Ù‰ ⌘– à‡ ÒÒ, Uà !àX Ét‰. 46 ⌧ 4 •. ⌅ ÑÏh⇠ ¯º 4.5: ú›¥⌘ ÑX \¯– \ 1Ñ⌅ ⌧⌅ CDF. ¯ò⌧, CDF ®ë– ƒ∆t, 1Ñ⌅ ⌧⌅ ÑÏî ‡ÒX‰. t ç1t ©\ p, t î ¸¥ƒ CDF–⌧ ú⇠| ›1Xîp à¥⌧ ⌅ËXt⌧ƒ ®( x L‡¨ò $ƒXî 0 ⇠0 L8t‰; ‰L– ú⇠| ›1Xî )ït à‰. • 0–100 î∞–⌧ ‡ÒXå 1Ñ⌅ ⌧⌅| ‡x‰. • Cdf.Percentile| ¨©t⌧ ⌧ >î‰. ›\ 1Ñ⌅ ⌧⌅– ¡QXî ✓D ÑÏ– Cdfî ¡0 L‡¨òD l⌅\ É<\ Randomt h⇠Öt‰. # class Cdf: def Random(self): return self.Percentile(random.uniform(0, 100)) Cdfî Sample Tÿ‹| ⌧ıXîp \ n⌧ ¨§∏| ⇠X\‰. ⌧8 ⇠ nD xê\ D Cdf–⌧ ÑX\ îú 1Ñ⌅ ⌧⌅ DPX0 1Ñ⌅ ⌧⌅î ‰x —Ë– t⌧ ! ✓D DPXîp ©X‰. | ‰¥, Ï ¨0 Ω¸–⌧ 8 êî ¥\ òt@ 1ƒ\ 4¨| lj. ‰x 9 —Ë– àî ¨åD DPXîp Ω¸‹⌅D 1Ñ⌅ ⌧⌅\ ¿X` ⇠ à‰. áD⌅– ‰¨î8 (Massachusetts)¸–⌧ ⌧ѧ pt§(James Joyce) 10¨ \ »|§D »‰; 42Ñ 44 \ ¸ t⌧ 1633Ö⌘–⌧ 97à¯\ D¸à‰. 8 ê 1633Ö ⌘ 1537Ö 8 êÙ‰ h¨ ƒ)t⌧ êX \Ö 1Ñ⌅ ⌧⌅î 94%‰. 9. Exercises 47 ÄT |⇠ <\, ⌅X@ D‹ l0 à‰. Ù ¸¥ƒ‰t, 1Ñ⌅ ⌧⌅| ƒ∞` ⇠ def PositionToPercentile(position, field_size): beat = field_size - position + 1 percentile = 100.0 * beat / field_size return percentile “40–⌧ 498 ®1”, M4049\ \0⌧ ê ç\ 9—Ë, 256Ö ⌘–⌧ 26 à¯\ D¸à‰. ¯ò⌧, ê ç\ 9—Ë–⌧ 1Ñ⌅ ⌧⌅î 90% ⌧‰. 10D ƒ T »|§D Ù‰t (¯¨‡ ƒçt⌧ ‡ ˆ‰.), M5059 ¯˘– àD Ét‰. ê ç\ —Ë–⌧ Ÿ|\ 1Ñ⌅⇠| ¿\‰‡ \‰t, D¸ Xîp º»ò T ‹⌅t Dî`L? M4049 —Ë– àî êX 1Ñ⌅ ⌧⌅| M5059 —Ë– ⌅X\ ⌅XXt ¡0 »8– ı` ⇠ à‰. ‰L– ⌅\¯® T‹ à‰. def PercentileToPosition(percentile, field_size): beat = percentile * field_size / 100.0 position = field_size - beat + 1 return position M5059 —Ë– 171 Öt à¥⌧ Ÿ|\ 1Ñ⌅ ⌧⌅| ¿X$t 17à¯@ 18 ௠¨t–⌧ D¸t| \‰. M5059–⌧ 17௠»|† 46:05\ D¸t⌧, 40 Ÿ|\ 1Ñ⌅ ⌧⌅| ¿Xîp 46:05 ‹⌅t D¸ ©\‹⌅t ⌧‰. ⌧9 Exercises Dò µ8⌧– t⌧, chap04ex.ipynb chap04soln.ipynb |– ò@ à‰. |\ ‹ë` ⇠ à‰. ê tı@ Exercise 4.1 ÏÏÑ ú›˘‹ ∏4å º»ò ⇠òî? Ã} ∏4å| L¿ ª\ ‰t, ƒ»ò 9@ Dî ⌅p – ⌅Tt⌧ LDÙ8î. (®‡ ¡ú›) NSFG pt0| ¨©t⌧, ú› ¥⌘X ÑÏ| ƒ∞X‡, t| ¨©t⌧ ÏÏÑX 1 Ñ⌅⇠| LD¥8î. Ã} ´¯|t, ´à¯ Dt– t⌧ ÑÏX 1Ñ⌅⇠| LD¥8î. ´¯ D»|t, ´¯ Dà Dt– \ ÑÏ| ¨©X8î. Ã} 1Ñ⌅⇠ 90௠9@ ¯ t¡t|t, ƒ»–å ‰‹ ⌅Tt⌧ ¨¸X8î. Exercise 4.2 random.random–⌧ ›1⌧ +êî 0¸ 1 ¨t–⌧ ‡ÒXå ò, É<\ ⌅¸⌧‰; â, t î⌅ ®‡ ✓@ Ÿ|\ U`D 8|à ⌧‰. random.random–⌧ ú⇠ 1000⌧| ›1X‡ PMF@ CDF| ƒ›TX‹$. t ÑÏî ‡ÒÑÏx ? 48 ⌧ 4 •. ⌅ ÑÏh⇠ ⌧ 10 ©¥¨⌅ • 1Ñ⌅ ⌧⌅ (percentile rank): ÑÏ–⌧ ¸¥ƒ ✓¸ Ÿ|Xpò X |<¿. @✓ • 1Ñ⌅⇠ (percentile): ¸¥ƒ 1Ñ⌅ ⌧⌅@ ⌧ ✓. • ⌅ ÑÏh⇠ (cumulative distribution function, CDF): ✓–⌧ ⌅ U `✓<\ ‰QXî h⇠. CDF( x )î x@ Ÿ|Xpò ë@ \¯D(t‰. • Ì CDF (inverse CDF): ⌅ U`(p)–⌧ t˘✓<\ ‰QXî h⇠. • ⌘⌅⇠ (median): ÖÖ ⌘ÏΩ•1 !ƒ\ ¨©⇠î 50௠1Ñ⌅⇠. • ¨Ñ⌅ î⌅ (interquartile range): |–X !ƒ\ ¨©⇠î 75à¯@ 25 ௠1Ñ⌅⇠ ⌅ (t. • Ñ⌅⇠ (quantile): Ÿ| ⌅© 1Ñ⌅ ⌧⌅– ¡QXî § § ✓; ¥, ÑÏ ¨Ñ⌅⇠î 25à¯, 50à¯, 75௠1Ñ⌅⇠ ⌧‰. |‰ • ı– (replacement): \¯îú ¸ X ç1. “ı–îú (With replacement)”î Ÿ|\ ✓t \àt¡ îú ⇠ à‰î X¯‰; “Dı–îú (Without replacement)”î ✓t \à îú t, ®—Ë–⌧ ⌧p⌧‰î X¯ ⌧‰. ⌧5• ÑÏ ® T (Modeling distributions) ¿ L¿ ¨©\ ÑÏî Ωÿ ÑÏ (empirical distributions)|‡ Äx‰. t î D <\ \ \¯x Ωÿ !X– 0⇠X‡ à0 L8t‰. ⇠Y h⇠x CDF\ π’ ¿¥¿î t ÑÏ (analytic distribution) Ht ⌧‰. t ÑÏ Ωÿ ÑÏ| ® TXîp ¨© ⇠ à‰. tÏ\ Â}–⌧ ® (model)@ àDî\ ÄÑD \¥∏ Ë⌧T ⌧‰. tà •–⌧ ê¸ ¨© ⇠î ÑÏ| ⌧‹X‡ t| ¨©XÏ ‰ë\ úò| ƒ pt0| ® T\‰. tà •–⌧ ¨©⇠î T‹î analytic.py– à‰. T‹| ‰¥\‹X‡ ë≈ Xî É– \ Ùî ??D 8p\‰. ⌧1 ¿⇠ÑÏ (exponential distribution) ¿⇠ ÑÏ (exponential distribution)\ ‹ëXîp t î ¡ 0 L8t‰. ¿⇠ÑÏ CDFî ‰L¸ ⇡‰. CDF( x ) = 1 ®⇠ l CDF e <\ Ë⌧X lx ÑÏ ¡(shape)D ∞ \‰. ¯º ??–⌧ l = 0.5, 1, 2 ✓D µ ®ët ¥§¿ ¸ ⇠ à‰. ƒ ⌅‰ 8ƒ–⌧ |(X ¨tD Ù‡, ¨t ⌅– ‹⌅(ƒ)⌅© ‹⌅, interarrival times)D ! ` L ¿⇠ÑÏ Ò•\‰. Ã} ¨tt ∏⌧‡¿ ‡ÒXå ⌧› ` É ⇡‰t ƒ)⌅© ‹⌅ ÑÏî ¿⇠ÑÏ⇡@ Ω•t à‰. 50 ⌧ 5 •. ÑÏ ® T (Modeling distributions) ¯º 5.1: ‰ë\ ®⇠| î ¿⇠ÑÏ CDF. |@\, ú›⌅ ⌧›‹⌅D ¥¥Ùê. 1997D 12‘ 18| 8¸ ¨àà 1 –⌧ 44 Ö ‡›D ú›à‰. ®‡ 44Ö ‡›D ú› ‹⌅t ¿Ì‡8– ú⌅⇠»‰; ⌅¥ pt0K@ ThinkStats2 •å babyboom.dat |– Ù®à‰. df = ReadBabyBoom() diffs = df.minutes.diff() cdf = thinkstats2.Cdf(diffs, label='actual') thinkplot.Cdf(cdf) thinkplot.Show(xlabel='minutes', ylabel='CDF') ReadBabyBoom h⇠ pt0 |D }¥‰t‡ time, sex, weight_g, minutes |¸<\ l1⌧ pt0⌅ ÑD ⇠X\‰. Ï0⌧ minutes ê tƒ ú›‹ ⌅D Ñ<\ ¿X\ ‹⌅ Ù| Ù‡ à‰. diffsî ç⇠î ú›‹⌅ ¨t (t ¯º ?? (|∏)t CDF| ò¿∏‰. ⌅ Ã, ¥ªå Ñ⌅` ⇠ àDL? ⇠‡ cdfî ú›⌅© ‹⌅ ÑÏ ⌧‰. x ¿⇠ÑÏ ¡D ¿Ã ò¸ Ùt¿ \ )ï@ ÙD CDF (complementary CDF)| o<\ ¯¨î Ét‰. ÙD CDFî log-y ôƒ\ 1 CDF( x )t‰. ¿⇠ÑÏ pt0– t⌧î ∞¸ ¡ t‰. \ ¯¿ ¥¥Ùê. ≈ê › X0– ¿⇠ÑÏ| 0tî pt0KD ÙD CDF(CCDF) ¯¨t, ‰L¸ ⇡@ h⇠ ò, É<\ 0 \‰. 1 y⇡e o<\ lx ⌧– ò$î êÃ@ Ùî ⇣ |8– 0⇠\‰. Dunn, “A Simple Dataset for Demonstrating Common Distributions,” Journal of Statistics Education v.7, n.3 (1999) 1. ¿⇠ÑÏ (exponential distribution) 51 ¯º 5.2: ƒ)⌅©‹⌅ CDF (å!), log-y ôƒ\ ⌧ CCDF (∞!). ë¿– \¯| ËXt ‰L¸ ⇡‰. log y ⇡ ¯ò⌧, log-y ôƒ\ CCDFî 0∏0 î )ït à‰. lx lx ¡ t ⌧‰. ‰L– oD ›1X thinkplot.Cdf(cdf, complement=True) thinkplot.Show(xlabel='minutes', ylabel='CCDF', yscale='log') complement=True xê à¥⌧, thinkplot.Cdft oD ¯¨0 ⌅– ÙD CDF| ƒ∞\‰. ¯¨‡ yscale=’log’| µt⌧ thinkplot.Show \¯ ô ƒ\ yïD ‡ \‰. ¯º ?? ($x∏)– ∞¸ à‰. UXå ¡ t D»‰. t pt0– t⌧ DΩ\ ®x\ ¿⇠ ÑÏ D»|î Ét \‹⌧‰. 0¯ —ú›t D4 L‡ ‡ÒXå ⌧›—t UXå ¨‰t D– Ét‰. ¯¸–ƒ àlX‡ ¿⇠ ÑÏ\ t pt0KD ® TXî Ét i¨ | Ét‰. t@ ⇡@ Ë⌧T\ Ë XòX ®⇠\ ÑÏ| î}` ⇠ à‰. ®⇠ l ((rate)\ t ⇠ à‰; â, …‡ <\ Ë⌅ ‹⌅– ⌧›Xî ¨t ⇠. ⌧–⌧ 44ÖX ‡›D 24‹⌅¥– ‹¥ú‰. ¯ò⌧ (✓t Ñ˘ l = 0.0306t ⌧‰. ¿⇠ÑÏ …‡@ 1/l <\ ‡›D ⌅– ú› …‡ ‹⌅@ 32.7 Ñt ⌧‰. 52 ⌧ 5 •. ÑÏ ® T (Modeling distributions) ¯º 5.3: ®⇠ î⌅– 0x ⌧2 ‹ÑÏ CDF. ‹ ÑÏ (normal distribution) ∞§ ÑÏ(Gaussian distribution)|‡ƒ à¨î ‹ ÑÏ (normal distribution) Tà ¨©⇠îp t î Œ@ ⌅¡D 0 X‡ \å\ ¸¨ <\ƒ 0 ` ⇠ à0 L8t‰. ?? –⌧ ‰Ëå ⇠îp t@ ⇡@ Ù∏1–î t à‰. 1 CDF(z) = p 2p Z z • e t2 /2 dt ‹ ÑÏî ®⇠ P⌧\ π1T⌧‰: …‡ µ, \ ∏( s. ®⇠ µ = 0¸ s = 1 D î ‹ÑÏ| \ ‹ ÑÏ (standard normal distribution)|‡ \‰. ‹ÑÏ CDFî Îå › tï(closed form solution)D ¿ Jî Ñ<\ X⌧‰. X¿Ã, ®( <\ ƒ∞Xî L‡¨òt à‰. L‡¨ò ⌘ Xò SciPyD µt ⌧ı⌧‰: scipy.stats.normt ‹ÑÏ| \⌅Xî ¥‰. \ ‹ÑÏ CDF| ƒ∞Xî cdf Tÿ‹| ⌧ı\‰. >>> import scipy.stats >>> scipy.stats.norm.cdf(0) 0.5 ∞¸✓@ fi‰: \ ‹ÑÏ ⌘⌅⇠î 0 (…‡¸ ⇡‰)t‡, ✓X Dò ⌅X\‰. ¯ò⌧ CDF(0)@ 0.5 t‰. norm.cdf@ 5X ®⇠| π \‰. î‰: loc ⇠t ⌘⌅⇠ …‡D π X‡, scaleî \ ∏(| thinkstats2î ¡0 h⇠| ÄT ¨©X0 }å \‰. EvalNormalCdf Tÿ‹ î mu¸ sigmaD xê\ D x– CDF| ƒ∞\‰. 3. ‹U`¯º (Normal probability plot) ¯º 5.4: 53 ‹® ¸ ú›¥⌘ CDF. def EvalNormalCdf(x, mu=0, sigma=1): return scipy.stats.norm.cdf(x, loc=mu, scale=sigma) ¯º ??– ‹ÑÏ– ‰ë\ ®⇠| #¥ ¯∞ CDF à‰. · X Sê(sigmoid) ¡t ‹ÑÏ| ›ƒ` ⇠ àå Xî π1t‰. ^•–⌧ NSFG ú› ¥⌘ ÑÏ| ¥¥$‰. ®‡ ¡ ú∞ ¥⌘– \ Ωÿ CDF@ Ÿ|\ …‡¸ Ñ∞<\ ‹ÑÏ CDF| ⌘©XÏ o<\ ¯∞ Ét ¯º ??t‰. ‹ÑÏ t pt0K– t⌧ ã@ ® t ⌧‰. ¯ò⌧ Ã} ®⇠ µ = 7.28 ¸ s = 1.24<\ ÑÏ| î}\‰t, ∞¸ $((® ¸ pt0 ⌅ (t) ë‰. 1Ñ⌅⇠ 10௠Dò–⌧ pt0@ ® ¨t– à|X à‰. ‹ÑÏ–⌧ !⇠î ÉÙ‰ T Œt ¥⌘t @ Dt à‰. Ã} p∞D– πƒà Ï t à‰t, ÑÏ–⌧ t ÄÑD ò iXî Ét ⌘îX‰. ¯ò⌧ ‹ÑÏ| ¨©Xî Ét X¿ JD ⇠ƒ à‰. ⌧3 ‹U`¯º (Normal probability plot) ¿⇠ÑÏ@ á ¿ ÑÏ–⌧ t⌧ t ÑÏ(analytic distribution) π p t0K– t⌧ i\ ® x | L§∏Xîp ¨©` ⇠ àî ⌅Ë\ ¿Xt à‰. ‹ÑÏ– t⌧ ¯Ï\ ¿X@ ∆‰. X¿Ã, ‹U`¯º (normal probability plot)<\ à¨î Ht à‰. ‹U`¯ºD ›1Xî )›t P⌧ à‰.: ¥$¥ )›¸ l¥ )›. ¥$¥ )›– Ït à‰t https://en. 54 ⌧ 5 •. ÑÏ ® T (Modeling distributions) ¯º 5.5: ‹ÑÏ–⌧ ò( ÑX \¯– \ ‹U`¯º. wikipedia.org/wiki/Normal_probability_plot–⌧ ê8\ à‰. ‰L– l¥ )›t à‰. 1. \¯– àî ✓D ,\‰. 2. \ ‹ÑÏ(µ = 0, s = 1)–⌧ \¯¸ Ÿ|\ l0| X‡ ,\‰. 3. \¯–⌧ ò( Ù| ªD ⇠ ,⌧ ✓¸ ú⇠| î ú⇠D ›1 o<\ ¯∞‰. Ã} \¯ ÑÏ ¸¨ <\ ‹ÑÏ|t, ∞¸î ∏ mu, 0∏0 sigma| î ¡ t‰. thinkstats2– NormalProbabilityt à‰. \¯D xê\ D⌧ ⇠ t(NumPy) 0Ù P⌧| ⇠X\‰. xs, ys = thinkstats2.NormalProbability(sample) ysî sample–⌧ Ù®à‰. ,⌧ ✓t Ù®à‰; xs–î \ ‹ÑÏ–⌧ ›1⌧ ú⇠ NormalProbabilityD L§∏X0 ⌅t⌧ ‰ë\ ®⇠| ƒ ‹ÑÏ–⌧ ® p ÿ D ›1à‰. ¯º ??– ∞¸ à‰. ‰t ¸¨ <\ ¡ <\, …‡– àî ✓Ù‰ ó¥ú ✓D ,¨– î‰. t⌧ ‰⌧ pt0– iD ‹ƒt Ùê. ^ \Ä0 ú› ¥⌘ pt0– t ‹U`¯ºD ›1Xî T‹ ‰L– à‰. ® D \⌅Xî å… ¸ ‰⌧ pt0| \⌅Xî Ä D o<\ ¯∞‰. def MakeNormalPlot(weights): mean = weights.mean() std = weights.std() 3. ‹U`¯º (Normal probability plot) ¯º 5.6: ú›¥⌘– \ 55 ‹U`¯º. xs = [-4, 4] fxs, fys = thinkstats2.FitLine(xs, inter=mean, slope=std) thinkplot.Plot(fxs, fys, color='gray', label='model') xs, ys = thinkstats2.NormalProbability(weights) thinkplot.Plot(xs, ys, label='birth weights') weightsî ú› ¥⌘ ⇣‰§ ‹¨à‰; mean¸ std@ …‡¸ \ ∏(‰. FitLinet ‹ § xs, ∏, 0∏0| xê\ î‰; ⇠XXî xs@ ysî xs ✓–⌧ ƒ∞⇠¥ xê\ @ ®⇠| ƒ ¡ t‰. NormalProbability@ xs@ ys| ⇠XXîp \ weights–⌧ ò( ✓D Ù‡ à‰. Ã} ¥⌘ ÑÏ t0ƒ ®x¸ ‰m⇠¥| \‰. ‹ÑÏ–⌧ ò( ✓¸ ‹ÑÏ| 0x‰t, p ¯º ??t ⌅¥ ¡ ú›¸ TॠÃ≠(ч0⌅t 36¸ t¡)– \ ∞¸| ÙÏ ‰. P · ®P …‡ ¸ò–⌧ ® ¸ ‰m⇠‡ ,¨–⌧ (t ú‰. • 4p¥ Dt ® t !\ ÉÙ‰ T 4Ň, • º¥ Dtî T Õ‰. Ë¿ Ã≠ Dtà ›t⌧, • – àî à|X| ⌅| ⇠ à‰. º¥ áá Dt| ⌧pXt ÑÏ DòΩ ,¨ ‹ÑÏ ® t …‡–⌧Ä0 á \ ∏( ¥–⌧ ÑÏ| ò 0 X¿Ã, ,¨ ĸ–⌧î D»|‡ o ¯ò⌅| µt⌧ L ⇠ à‰. ‰⌧ © – º»ò Äi ⇠î¿î © – Ï$à‰. 56 ⌧ 5 •. ÑÏ ® T (Modeling distributions) ¯º 5.7: ⌧4 ôƒ(å!)@ \¯ôƒ(∞!)\ ¯ 1x¥⌘– \¯ \ CDF. ‹ÑÏ (lognormal distribution) Ã} ✓D \¯ Ë\ —it ‹ÑÏ|t, t ✓@ \¯ ‹ÑÏ (lognormal distribution)‰. \¯ ‹ÑÏ CDFî x| log x\ XX\ ‹ÑÏ CDF@ Ÿ |X‰. CDFlognormal ( x ) = CDFnormal (log x ) \¯ ‹ÑÏ ®⇠î |⇠ <\ µ@ s\ \0\‰. X¿Ã, 0µ` É@ ®⇠ …‡¸ \ ∏(î D»‰; \¯ ‹ÑÏ …‡@ exp(µ + s2 /2)t‡, \ ∏( î p ı°\‰.(http://wikipedia.org/wiki/Log-normal_distribution | 8p\‰) Ã} \¯t ¸¨ <\ \¯ ‹ÑÏt‡ log-x ôƒ\ CDF oD ¯∞‰t, ‹ÑÏ π1X ¡D î‰. \¯t \¯ ‹ÑÏ ® ¸ º»ò ò i Xî¿ L§∏X0 ⌅t⌧, \¯✓– \¯| Ët⌧ ‹U`¯ºD ›1` ⇠ à‰. ⌧\ 1x ¥⌘ ÑÏ| ¥¥Ùîp ¸¨ <\ \¯ ‹Ñω.2 Ã1 »X ) ✏ t ùƒD ⌅\ mΩ <0 (National Center for Chronic Disease Prevention and Health Promotion)–⌧î ⟠⌅ÿ îx ⇣‹ ‹§\ (Behavioral Risk Factor Surveillance System, BRFSS)3 X |Ä8<\ ‰D p ¨| ‰‹\‰. 2008D 414,509 Qıê| ¡<\ x0à‡ xlµƒ, t , 2 http://mathworld.wolfram.com/LogNormalDistribution.html ¨t∏–⌧ ¸ (x ©∆t)<\ t •1– t⌧ ⌧Ù| X‰. ò⌘– \¯ ¿X¸ –xD ⌧HXî |8D ⌧¨à‰: Penman and Johnson, “The Changing Shape of the Body Mass Index Distribution Curve in the Population,” Preventing Chronic Disease, 2006 July; 3(3): A74. Online at http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1636707. 3 »—µ⌧ )<0(Centers for Disease Control and Prevention, CDC). ⟠⌅ÿ îx 5. † ÑÏ (Pareto distribution) ¯º 5.8: ôƒ(å!)@ \¯ôƒ(∞!)\ ¯ 1x¥⌘– 57 \ ‹U`¯º. t ⌅ÿ– t⌧ $8à‰. ⇠—\ pt0 ⌘– 398,484 Qıê ¨\¯®<\ \‹⌧ ¥⌘ Ù à‰. t ED ⌅\ •å– BRFSS– \ pt0| Ù‡ àî ‡ Ì D§§(ASCII) |, CDBRFS08.ASC.gz@ Tॠ|D }‡ pt0| Ñ Xî brfss.py |ƒ hÿ à‰. ¯º ?? (|∏)t ‹ÑÏ ® – ôƒ\ 1x ¥⌘ ÑÏ| ò¿∏‰. ¯ º ?? ($x∏)t \¯ ‹ÑÏ ® <\ \¯ ôƒ\ Ÿ|\ ÑÏ| ò¿∏‰. \¯ ‹ ® t T ò@ it¿Ã pt0| t@ ⇡t \⌅Xî Ét (t⇣ D πƒà x¡ <\ É¿î ª\‰. ¯º ??t 1x ¥⌘ w– \ ‹U`¯º¸ \¯ ¿X\ ¥⌘ log10 w– \ ‹U`¯ºD ÙÏ ‰. t⌧ pt0 ‹ÑÏ ® –⌧ ¡˘à óDú Ét ÖUX‰. ‰x \∏<\ \¯ ‹® @ pt0– \ ã@ ‰mD ÙÏ ‰. ⌧5 † ÑÏ (Pareto distribution) † ÑÏ (Pareto distribution)î Ω⌧Yê L⌅ ƒ †(Vilfredo Pareto) tÑ–⌧ òTîp, tÉD ¨©t⌧ Ä( http://wikipedia.org/ wiki/Pareto_distribution 8p)X ÑÏ| 0 à‰. ¯ƒ, ƒ‹@ »D l0, ⇣‹ ‹§\ p¨ êÃ(Behavioral Risk Factor Surveillance System Survey Data). Atlanta, Georgia: ¯m Ùt ı¿Ä (U.S. Department of Health and Human Services), »—µ⌧ ) <0 (Centers for Disease Control and Prevention), 2008. 58 ⌧ 5 •. ÑÏ ® T (Modeling distributions) ¯º 5.9: ‰x ®⇠| † ÑÏ CDF. î ®ò Öê@ ¥ , ∞ภ¿ƒD Ïh\ ê¸Y¸ ¨å¸Y ⌅¡D 0 Xî p ¨©⇠»‰. †Ñ CDFî ‰L¸ ⇡‰. CDF ( x ) = 1 ✓ x xm ◆ a ®⇠ xm @ at ÑÏ ⌅X@ ¡D ∞ \‰. xm t •\ \å✓t‰. ¯º ??– xm = 0.5@ ‰ë\ a ✓<\ \⌅\ † ÑÏ CDF à‰. Ωÿ ÑÏ † ÑÏ– i1D ò¿¥î ⌅Ë\ ‹ L§∏ log-log ôƒ–⌧ CCDFî ¡ <\ Ùx‰. \ ¯¿ ¥¥Ùê. Ã} ôƒ–⌧ † ÑÏ–⌧ ò( \¯ CCDF| L¸ ⇡@ h⇠ 0 ⌧‰. ✓ ◆ a x y⇡ xm à‰: o<\ ¯∞‰t, ‰ ë¿– \¯| ËXt ‰L¸ ⇡‰. log y ⇡ ¯ò⌧ Ã} log x– log y| ¡ ò¸ ÙÏ|à \‰. a(log x log xm ) o<\ ¯¨t, 0∏0 a¸ ∏ a log xm D ƒ ⌧\, ƒ‹@ »D l0| ¥¥Ùê. ¯m xl p¨m (U.S. Census Bureau) –⌧ ¯m– àî ®‡ ƒ‹@ »D xl Ù| å‹\‰. ˘¨t∏ http://www.census.gov/popest/data/cities/totals/ 6. ú⇠ ›1X0 (Generating random numbers) 59 ¯º 5.10: \¯-\¯ ôƒ\ ƒ‹ xl CCDFs. 2012/SUB-EST2012-3.html–⌧ pt0| ‰¥\‹à‰; E PEP_2012_PEPANNRES_with_ann.csv | tÑ<\ ⇠¥à‰. populations.py tl ⌅\¯®t ॠ|D }‡ xl ÑÏ| ¯∞‰. •å– •å– o<\ ¯º ??– log-log ôƒ\ xl CCDF à‰. 10 2 Dò • p 1% ƒ‹@ » Dt ¡ D 0| Dò| •\‰. áá lê@ », ¿\ ÑÏ ,¨ † ® – iX‰‡ ∞`D ¥¥ ⇠ à‰. ‰x \∏<\ \¯ ‹Ñσ ⇣\ pt0| ò ® T\‰. ¯º ??– xl CDFX \¯ ‹ÑÏ ® (|Ω), ‹U`¯º($xΩ)t à‰. P o ¯º ®P pt0@ ® ¨t ã@ iD ÙÏ ‰. ® ¥ê Ƀ DΩX¿ J‰. † ® @ Ë¿ • p 1% ƒ‹–à © ⇠¿Ã ÑÏX ¯ π ÄÑ– T it ò ⌧‰. \¯ ‹ ® @ 99% ‰x ÄÑ– T it ò ⌧‰. ¥ê ® t \ î ÑÏ ¥ê ÄÑ– (t à î¿– Ï$ à‰. ⌧6 ú⇠ ›1X0 (Generating random numbers) t CDF(analytic CDF)| ¨©t⌧ ¸¥ƒ ÑÏh⇠ p = CDF( x )\ ú⇠| ›1\‰. Ì CDF| ƒ∞Xî ®( x )›t à‰t, 0¸ 1 ¨t ‡ÒÑÏ–⌧ p| ›X‡ ò⌧ x = ICDF ( p)| ›h<\h \ ÑÏ ú⇠| ›1` ⇠ à‰. 60 ⌧ 5 •. ÑÏ ® T (Modeling distributions) ¯º 5.11: \¯-\¯ ôƒ(å!)\ ¯ ƒ‹xl CDF, \¯¿X xl(∞ï)X ‹U`¯º. | ‰¥ ¿⇠ÑÏ CDFî ‰L¸ ⇡‰. p=1 x– e lx t Äå⇠t ‰Lt ⌧‰. x= ¯ò⌧ log(1 p)/l tl T‹\ ‰L¸ ⇡t ë1` ⇠ à‰. def expovariate(lam): p = random.random() x = -math.log(1-p) / lam return x h⇠ expovariateî lamD xê\ | ⇠X\‰. D ®⇠ lamx ¿⇠ÑÏ–⌧ ›1⌧ ú⇠ tl T‹ l⌅– P ¿ ¸X⇣t à‰: lambda tl }¥(keyword) Ï⌧ ®⇠| lam<\ à‰. ⇣\ log 0 X⇠¥ à¿ J0 L8–, }⌅ T ¸ Xt| \‰. random.random l⌅T‹î 0D ⇠X` ⇠ à¿Ã 1@ ` ⇠ ∆‰. ¯ò⌧, 1 p@ 1t ⇠î à¿Ã 0@ ⇠ ∆¥⌧ log(1-p)@ m¡ X⌧‰. 7. \ ® x ? ⌧7 61 \® x ? t •X ‹ë–⌧ Œ@ ⌅‰ 8ƒ ⌅¡t t ÑÏ(analytic distribution)<\ ® T ⇠ à‰‡ –à‰. “¯ò⌧,” “P?” |‡ <D ⇠ƒ à‰. ®‡ ® ò¸, t ÑÏî î¡T‰. X¯Xî @ (∆‰‡ ⇣Ë⇠î 8Ä x ¨mD ›µ\‰î Ét‰. | ‰¥, 0⌧ ÑÏ–î \¯ π X ! $Xò ƒú ⇣t Ïh ⇠ à‰; t ® @ tÏ\ ƒú ⇣D ‰HXå …\\‰. t ® @ ⇣\ |ÖX pt0 Uït‰. ® t Lt0K– ò ®⇠ —i<\ …X pt0| î}` ⇠ à‰. i L, @ LL\, ê⌅¡–⌧ ò( pt0 t ÑÏ– ò i⇠î ÉD Ùt 8 Äç »‰. X¿Ã, t⇡@ 0t <¨ ‹§\– \ µ0(insight)D ⌧ı\‰. L L\ !⌧ ÑÏ \ πƒ\ ‹| î¿ $Ö` ⇠ à‰. | ‰¥, † ÑÏî <‹1D ›1Xî ¸ (generative process)X ∞¸‰ (å⌅ 8 ∞ ¸ (preferential attachment processes): http://wikipedia.org/ wiki/Preferential_attachment ¨t∏| 8p.) ⇣\, ?? •–⌧ ¥¥ÙÔt t ÑÏ ⇠Y Ñ <\ tH‰. X¿Ã, ®‡ ® t D⌅X¿ J‰î ÉD 0µXî Ét ⌘îX‰. ⌅‰ 8ƒ –⌧ ò( pt0î ∞T DΩXå t ÑÏ– i⇠¿ Jî‰. ÖÖ ¨å‰t pt0 ® –⌧ ›1⌧ Éò¸ –D \‰; | ‰¥, ¨å ‡•ÑÏ ‹ ÑÏ–⌧ òT‰pò å› ÑÏ \¯ ‹ÑÏ–⌧ òT‰‡ –\‰. 8ê ¯ \ D‰tt, tÏ\ ¸•@ ƒ‰t D»‰; m¡ ⌅‰ 8ƒ@ ⇠Y ® ¨t–î (t à‰. ⌅‰ 8ƒX ⌘î\ !tD Ï)X‡ àDî\ 8ĨmD 0⌧Xt ® @ ©X‰. X¿Ã, “⌘îXpò(relevant)” “àDî\(unneeded)” É@ ® D ¨ ©t⌧ 4«D ƒç⌘x – Ï$à‰. ⌧8 µ8⌧ Dò µ8⌧– t⌧, chap05ex.ipynb chap05soln.ipynb |– ò@ à‰. |\ ‹ë` ⇠ à‰. ê tı@ Exercise 5.1 BRFSS(?? 8p)–⌧, ‡• ÑÏX Ω∞ ®êî µ = 178 cm, s = 7.7 cm Ïêî µ = 163 cm, s = 7.3 cmD ®⇠\ î ‹Ñω. Ë Ë ¯˘(Blue Man Group)– ÖX0 ⌅t⌧î 5’10” –⌧ 6’1” ¨t ® êÏ| \‰(http://bluemancasting.com 8p). ¯m ®1 xlX ¥ê ƒ D(t t î⌅– àî ? å∏: scipy.stats.norm.cdfD ¨©\‰. 62 ⌧ 5 •. ÑÏ ® T (Modeling distributions) Exercise 5.2 † ÑÏ– \ ⇣ D 0 ⌅t⌧, Ã} ¨å ‡•X ÑÏ †|t 8¡t º»ò Ï|¿î¿ ¥¥Ùê. xm = 1 m, a = 1.7 ®⇠\, |¨àî \å✓ 1 m, ⌘⌅⇠ 1.5 m | î ÑÏ ⌧‰. ¡0 ÑÏ| ƒ›TX8î. † 8¡–⌧ …‡ ¨å ‡•@ º»x ? xl X º»ò …‡Ù‰ T @ ? Ã} † 8¡– 70µ ¨åt à‰t, º»ò Œ@ ¨å‰t 1 km Ù‰ T t É<\ ¡Xî ? • ë@ ¨å@ ‡•t º»ò É<\ ¡Xî ? Exercise 5.3 @tà ÑÏ(Weibull distribution)î ‡• Ñ –⌧ ò$î ¿⇠Ñ Ï| |⇠T\ Ét‰ (http://wikipedia.org/wiki/Weibull_distribution 8p). CDFî ‰L¸ ⇡‰. CDF ( x ) = 1 e ( x/l)k @t ÑÏ| ¡ ò¸ Ùtå Xî ¿XD >D ⇠ àDLî? ¡ X 0∏0@ ∏@ 4«D ò¿¥î ? random.weibullvariateD ¨©t⌧ @t ÑÏ–⌧ \¯D ›1X‹$. ¯ ¨‡ t| ¨©t⌧ ÑÏ| L§∏X‹$. Exercise 5.4 nX @ ✓<\, UXå t ÑÏ– i⇠î ΩÿÑÏ| 0 X¿ ª\‰. i à»D … Xî \ )ït t ÑÏ\Ä0 \¯D ›1X ‡ pt0@ º»ò ò ‰m⇠î¿ ¥¥Ùî Ét‰. | ‰¥, ?? –⌧, ú›¨t ‹⌅ ÑÏ| ƒ›Tà‡ ¸¨ <\ ¿⇠ÑÏ| î ÉD ÙX‰. X¿Ã, ÑÏî Ë¿ pt0 44– à¸X‰. pt0 ¿⇠Ñ Ï–⌧ òTî¿ ¥¥Ù0 ⌅t⌧, ú›¨t } 33Ñx, pt0@ Ÿ|\ …‡D î ¿⇠ÑÏ–⌧ pt0| 44⌧ ›1\‰. ÑX U` \¯X ÑÏ| ƒ›TX‡, ‰⌧ random.expovariate D ¨©t⌧ ✓D ›1\‰. ÑÏ@ DP\‰. Exercise 5.5 tED ⌅\ •å–⌧, mystery0.dat, mystery1.dat, Ò<\ à ¨î pt0 |D >D ⇠ à‰. t ÑÏ–⌧ ò( ú⇠ÙD |t Ù‡ à‰. test_models.py |ƒ >D ⇠ àîp, t |@ |–⌧ pt0| }‡ ‰ ë\ ¿X<\ CDF| ƒ›T\‰. ‰L¸ ⇡t ‰â` ⇠ à‰: $ python test_models.py mystery0.dat ƒ›T⌧ ∞¸– 0⇠t⌧, ¥§ X ÑÏ |D ›1àî¿ î`` ⇠ à¥| \‰. Ã} …å‰t, mystery.py |D ¥¥Ùîp, |D ›1\ T‹ Ù®à‰. 9. ©¥ ¨⌅ 63 Exercise 5.6 Ä@ å›X ÑÏ| ÖÖ \¯ ‹ÑÏ@ † ÑÏ\ ® T\ ‰. ¥ê Ét T ò@¿ LD¥0 ⌅t⌧, pt0| ‰Ï‰ Ùê. xlŸ•p¨(Current Population Survey, CPS)î xŸµƒm(Bureau of Labor Statistics)¸ xlp¨m(Census Bureau)X ıŸë≈<\ 囸 (⌧ ¿⇠| l\‰. 2013D– ⇠—⌧ pt0î http://www.census.gov/hhes/ www/cpstables/032013/hhinc/toc.htm–⌧ ‰¥\‹ D ⇠ à‰. êî lå› Ù| î —@ | hinc06.xls D ‰¥\‹ D⌧, tEX •å –⌧ >D ⇠ àî CSV | hinc06.csv\ ¿Xà‰. t CSV |D àÏ}î hinc.py |ƒ hÿ à‰. t pt0K–⌧ å›ÑÏ| îúX|. tà •–⌧ Yµ\ ¥§ t ÑÏ p t0– t ã@ ® t ⇠î ? t µ8⌧– \ tı@ hinc_soln.py |– ò@ à‰. ⌧9 • Ωÿ • t ©¥ ¨⌅ ÑÏ (empirical distribution): \¯ ✓X ÑÏ ÑÏ (analytic distribution): CDF • ® (model): ©\ Ë⌧T. t \ ã@ ® t‰. t h⇠x ÑÏ. ÑÏî ÖÖ Œt ı°\ Ωÿ ÑÏ– • ƒ)⌅©‹⌅ (interarrival time): P ¨t ¨t Ω¸ ‹⌅. • ÙD CDF (complementary CDF): ✓ x–⌧ x| ⇠î ✓ D(\ ‰mXî h⇠, 1 CDF( x ). • \ î • ‹ÑÏ (standard normal distribution): …‡ 0¸ \ ∏( 1D ‹ÑÏ. ‹U`¯º (normal probability plot): \¯✓¸ \ ( ú⇠| DXÏ oXÏ ¯∞ ¯º. ‹ÑÏ–⌧ ò 64 ⌧ 5 •. ÑÏ ® T (Modeling distributions) ⌧6• U` ƒh⇠ tà •–⌧ ¨©⇠î T‹î density.py– à‰. T‹| ‰¥\‹X‡ ë≈X î É– \ Ùî ??D 8p\‰. ⌧1 PDF CDF ¯ÑD U` ƒh⇠ (probability density function), PDF|‡ \‰. | ‰¥, ¿⇠ÑÏ PDFî ‰L¸ ⇡‰. PDFexpo ( x ) = le lx ‹ÑÏ PDFî ‰L¸ ⇡‰. 1 PDFnormal ( x ) = p exp s 2p " 1 2 x π \ ✓– \ PDF| ƒ∞Xî Ét ¥\ t D»0 L8t‰; U` ƒ (density)‰. ✓ x µ s ◆2 # ©X¿î J‰. ∞¸ U` <¨Y–⌧ ƒî Ë⌅ ¥ ˘ »…t‰; »…D ƒ∞X$t, ¥ D ÒXpò 9@ Ã} ƒ ¡⇠ D»|t ¥ – t Ñt| \‰. », ¿\, U` ƒ (probability density)î Ë⌅ x˘ U`D ! \‰. U` »…D ƒ∞X$t, x– t⌧ Ñt| \‰. thinkstats2î Pdf|î tò§\ U` ƒh⇠| ò¿∏‰. ®‡ Pdf ‰L Tÿ‹| ⌧ı\‰: ¥î 66 ⌧ 6 •. U` ƒh⇠ • Density, x| xê\ D x–⌧ ÑÏ • Renderî t∞ —i✓ ⌧ xs¸ ¡QXî U` • MakePmf, t∞ —i✓– T⌧ Pmf| ⇠X\‰. ƒ| ⇠X\‰. t ƒ| … X‡ ‹ § ›D ⇠X\‰: ƒds. , t Density| … X‡ Pdf– ¯¨Xî ‹ • GetLinspace, Render@ MakePmf–⌧ ¨©⇠î 0¯$ D ⇠X\‰. —i ⇣(point) Pdfî î¡T⌧ Ä® tò§\ X¯Xî É@ x§4§TXt H⌧‰; â, Pdf ¥| ›1` ⇠ ∆‰. ‡– Pdf| ¡ç D Density¸ GetLinspace XX î ê› tò§| Xt| \‰. Pdfî Render¸ MakePmfD ⌧ı\‰. | ‰¥, thinkstats2î ò§| ⌧ı\‰. ‹ ƒh⇠| … Xî NormalPdf|î tÑX t class NormalPdf(Pdf): def __init__(self, mu=0, sigma=1, label=''): self.mu = mu self.sigma = sigma self.label = label def Density(self, xs): return scipy.stats.norm.pdf(xs, self.mu, self.sigma) def GetLinspace(self): low, high = self.mu-3*self.sigma, self.mu+3*self.sigma return np.linspace(low, high, 101) NormalPdf ¥î ®⇠ mu¸ sigmaD Ù‡ à‰. Densityî scipy.stats.normD ¨©Xîp ‹ÑÏ| \⌅\‡, ‰x Tÿ‹@ Tॠcdf@ pdf| ⌧ı\‰.( ?? 8p). ‰L ⌧î BRFSS– àî 1xÏ1‡•(cm Ë⌅) …‡¸ Ñ∞<\ NormalPdf| ›1\‰( ?? 8p). ¯¨‡ ò⌧, …‡–⌧ 1 \ ∏( ¿⇣– ÑÏ ƒ| ƒ∞\‰. >>> mean, var = 163, 52.8 >>> std = math.sqrt(var) >>> pdf = thinkstats2.NormalPdf(mean, std) >>> pdf.Density(mean + std) 0.0333001 2. u ƒî (Kernel density estimation) ¯º 6.1: ¯m 1x Ï1 ‡•D ® TXî u ƒî . 67 ‹ PDF, ¯¨‡ n = 500 \¯<\ ∞¸î cm ˘ U`»… Ë⌅\ } 0.03t‰. \àT, U` ƒî ¯ ê¥\ X¯ î ∆‰. X¿Ã, Pdf| o<\ ¯∞‰t, ÑÏ ¡D ¸ ⇠ à‰. >>> thinkplot.Pdf(pdf, label='normal') >>> thinkplot.Show() thinkplot.Pdf@ …\ h⇠(smooth function)\ Pdf oD ¯∞‰. ƒËh ⇠\ PmfD ¯¨î thinkplot.Pmf@ p⌧‰. ¯º ??– ∞¸ à‰. ‰L –⌧ ¥¥¸ \¯–⌧ î \ PDF\ hÿ o⇠¥ ¯$8 à‰. Pdf| ¸¨Xîp MakePmf| ¨©` ⇠ƒ à‰. >>> pmf = pdf.MakePmf() 0¯$ <\, mu - 3*sigma–⌧ mu + 3*sigma ¨t– Ÿ| ⌅©D ¿Ã 101 ⇣t Pmf– à‰. ›¨ë<\ MakePmf@ Renderî §Ã‹ xê\ low, high, nD î‰. ⌧2 u ƒî (Kernel density estimation) u ƒî (Kernel density estimation,KDE)@ \¯D D pt0– iX î \ …\ PDF| >î L‡¨òt‰. http://en.wikipedia.org/wiki/ Kernel_density_estimation ˘¨t∏–⌧ ÄT ê8\ Ù| ªD ⇠ à‰. scipy– KDE l⌅⌧ Ét à‡, thinkstats2î t| ¨©t⌧ EstimatedPdf |î tò§| ⌧ı\‰. class EstimatedPdf(Pdf): def __init__(self, sample): 68 ⌧ 6 •. U` ƒh⇠ self.kde = scipy.stats.gaussian_kde(sample) def Density(self, xs): return self.kde.evaluate(xs) __init__t \¯D xê\ D u ƒî ✓D gaussian_kde ¥‡ evaluate Tÿ‹| ⌧ı\‰. ƒ∞\‰. ∞¸î Density ✓ 9@ ‹ §| xê\ D gaussian_kde.evaluateD 8úX ‡ ∞¸ ƒ| ⇠X\‰. Ë¥ “ ∞§ (Gaussian)” ò$îp t î KDE| …\Xîp ∞§ ÑÏ– 0⇠\ D0| ¨©X0 L8t‰. ‰L– ‹ÑÏ–⌧ \¯D ›1X‡ \¯– iX0 ⌅t⌧ EstimatedPdf | Ëî ⌧ à‰. >>> sample = [random.gauss(mean, std) for i in range(500)] >>> sample_pdf = thinkstats2.EstimatedPdf(sample) >>> thinkplot.Pdf(sample_pdf, label='sample KDE') sample@ 4ë⌅ ‡• 500⌧ ¨§∏‰. sample_pdfî Pdf ¥\ î ⌧ KDE \¯ Ù| Ù‡ à‰. Ÿ| ⌅© ✓X ‹ §–⌧ ƒ| … h<\h pmfî Pmf ¥\ Pdf| ¸¨\‰. ¯º ??– ‹ ƒh⇠@ 4ë⌅ ‡• 500⌧ \¯– 0⇠\ KDE ✓t –ÑÏ– ã@ ‰mt‰. KDE\ ƒh⇠| î Xî É@ á ¿ © <\ à‰. î ©\‰. • ‹ T (Visualization): ⌅\ ∏ –…˃–⌧, CDF ¥\ ÑÏ| • ò ‹ T\‰. CDF| ¥¥¯ ƒ–, î PDF ÑÏ– \ \ ® x¿ ∞ ` ⇠ à‰. Ã} ¯⌥‰t, CDF– u⇡X¿ J@ ƒ–å ÑÏ| ⌧‹Xîp T ã@ ›¿ ⇠ à‰. • Ù⌅ (Interpolation): î PDFî \¯–⌧ ®—Ë ® <\ î \ )ï t‰. Ã} ®—Ë ÑÏ ‰D˝‰‡ ˇD t à‰t, KDE| ¨©t ⌧ \¯– ∆î ✓– t ƒ| Ù⌅\‰. • ®X‰ÿ (Simulation): ®X‰ÿ@ ÖÖ \¯ ÑÏ– 0⇠\‰. Ã} \ ¯l0 ë‰t, KDE| ¨©t⌧ \¯ÑÏ| …\Xî Ét X‰. !⇣D ⌘ıX0 Ù‰ KDE ®X‰ÿD µt⌧ ÄT •\ ∞¸✓D –…Xƒ] \‰. ⌧3 ÑÏ ⌅ ÑÃl (distribution framework) ⌅¨L¿ PMF, CDF, PDF| ¥¥$‰; †‹ ıµ ‹⌅D h⇠ ¥ªå ⌧\ ⇠î¿ ò¿ò à‰. 8¯‰. ¯º ??– 4. Hist l⌅ 69 ¯º 6.2: ÑÏh⇠ \⌅D ∞Xî º⌧(framework). PMF\ ‹ëàîp, PMFî t∞ —i ✓– \ U`D ò¿∏‰. PMF–⌧ CDF| ª0 ⌅t⌧î, U` »…D Tt⌧ ⌅ U`D ªî‰. CDF–⌧ PMF \ ÃD 0 ⌅t⌧î, ⌅ U` (t| ƒ∞\‰. ‰L á – x– t@ ⇡@ ∞D ¥ªå l⌅àî¿ ¥¥¸ Ét‰. PDFî ç CDF ¯Ñt‰; 9@, ŸÒXå CDFî PDFX Ñt‰. PDFî ✓D U` ƒ\ ‰Q\‰î ÉD 0µX|; U`✓D ª0 ⌅t⌧, Ñt| \‰. t∞ –⌧ ç ÑÏ| ª0 ⌅t⌧, ‰ë\ …\(smoothing) ë≈D ⇠â` ⇠ à‰. …\X \ ‹î pt0 (¿⇠ 9@ ‹ ÑÏò¸) t ç ÑÏ (analytic continuous distribution)–⌧ T‰‡ Xî Ét‰. ⇣ ‰x › 5X@ u ƒî (kernel density estimation)t‰. …\X ⇠ t∞T (discretizing), 9@ ëêT(quantizing)‰. Ã} t∞ ⇣ –⌧ PDF| … \‰t, PDF– ¸¨Xî PMF| ›1` ⇠ à‰. ⇠X Ñ(numerical integration)D ¨©t⌧ ÄT ò ¸¨` ⇠ƒ à‰. çCDF@ t∞CDF| lƒX0 ⌅t⌧, t∞CDFî “⌅ »… h⇠ (cumulative mass function)” ⇠î Ét ãD¿ƒ ®x‰. X¿Ã, ê L‡ àî \î, ⌅lƒ ¯ ©¥| ¨©X¿ Jî‰. ⌧4 Hist l⌅ thinkstats2–⌧ ⌧ı⇠î 0¯ 0• ¨©ïD LD| \‰: Hist, Pmf, Cdf, and Pdf. ‰L –î l⌅⌧ )›– \ ¡8\ Ù ò@à‰. Yµ P¨ ÄT ®( <\ t‰ tò§| ¨©Xî¿ ƒ¿D ⌅ ⇠ à¿Ã, ƒ©à –t⌧ ⇠Ôt DîX¿î J‰. 70 ⌧ 6 •. U` ƒh⇠ Hist@ Pmfî _DictWrapper|î Ä® tò§| ¡ç î‰. tò§ ^ ⌘⌅@ tò§ “¥Ä(internal)”|î ÉD ò¿∏‰; â, ‰x ®»– T‹\ ¨©⇠t J⌧‰. Ömt 4«x¿ ò¿∏‰: T ¨ ©|(dictionary wrapper). ¸î ç1@ d\, ✓D Hƒ\ ‰QXî T ¨‰. ✓@ ÑX tl (hashable type)t ÑX +ê ƒ ⇠ à‰. ⇠ à‰. Hƒî ⇠ t¥| X¿Ã, _DictWrapperî Hist@ Pmf– \ \ Tÿ‹| Ù‡ àîp, __init__, Values, Items, Render Ïh⌧‰. Set, Incr, Mult, Remove ¿Ω Tÿ‹ƒ ⌧ ı\‰. ®‡ Tÿ‹î T ¨ ∞<\ l⌅⇠»‰. | ‰¥, # class _DictWrapper def Incr(self, x, term=1): self.d[x] = self.d.get(x, 0) + term def Mult(self, x, factor): self.d[x] = self.d.get(x, 0) * factor def Remove(self, x): del self.d[x] Histî ⇣\ FreqD ⌧ıXîp ¸¥ƒ ✓– \ Hƒ| >î‰. Hist ∞ê@ Tÿ‹î T ¨– 0⇠X‡ à¥⌧, t‰ Tÿ‹î ¡⇠ ‹⌅ ∞t‰; â, Hist ⇣⇣ ‰–– 0| ‰â‹⌅t ù X¿ Jî‰. ⌧5 Pmf l⌅ Pmf ⇠ Hƒ ‡– ✓D ÄŸå⇠⇣ U`– ‰QXî ÉD ⌧xX‡, Pmf @ Histî pX Ÿ|X‰. U`D ‰ T\ iƒ 1 t|t, Pmfî ‹T⇠»‰. Pmfî Normalize h⇠| ⌧ıXîp, U`D iD ƒ∞X‡ /⇠\ ò ‰. # class Pmf def Normalize(self, fraction=1.0): total = self.Total() if total == 0.0: raise ValueError('Total probability is zero.') factor = float(fraction) / total 6. Cdf l⌅ 71 for x in self.d: self.d[x] *= factor return total fractiont ‹T\ ƒ– U` iƒ| LD∏‰; 0¯ $ ✓@ 1 t‰. Ã} ⌅¥ U`t 0 t|t, Pmfî ‹T ⇠ ∆¥⌧, Normalizeî ValueError $X| |<®‰. Hist@ Pmfî Ÿ|\ ›1ê| ⇣‰§ ‹¨à, (✓, Hƒ) ¨§∏ ‡ à‰. xê\ dict, Hist, Pmf 9@ Cdf, , 9@ ✓ ‹ §| D ⇠ à‰. Ã} Pmf| x§4§T \‰t, ∞¸î ‹T⌧‰. Ã} Hist| x§4§T \ ‰t, ∞¸î ‹T⇠¿ Jî‰. ‹T⇠¿ J@ Pmf| ›1X0 ⌅t⌧, H Pmf| ›1t⌧ ¿Ω` ⇠ à‰. Pmf ¿Ωêî Pmf| ‰‹ ‹TX¿ Jî‰. ⌧6 Cdf l⌅ CDF ✓D ⌅ U`\ ‰Qt⌧ Cdf| _DictWrapper\ l⌅` ⇠ à‰. X ¿Ã CDF– àî ✓@ ,⇠¥ à‡ _DictWrapper– àî ✓@ ,⇠¥ à¿ J‰. ⇣\, Ì CDF| ƒ∞Xî É@ ©X‰; â, ⌅ U`–⌧ ✓<\ ‰Q. ¯ò⌧, ê ›\ l⌅ )ï@ P ,⌧ ¨§∏‰. t )›<\ tƒÄ …D ¨©t⌧ \¯ ‹⌅– ^<\ 9@ Ì<\ på` ⇠ à‰. Cdf ›1êî xê\ ✓ ‹ § 9@ ⇣‰§ ‹¨à, ✓–⌧ U`\ ‰QXî T ¨, (✓, U`) ‹ § , Hist, Pmf, 9@ CDF| î‰. 9@ Ã} x ê P⌧ ¸¥ƒ‰t, P xê| ,⌧ ✓ ‹ §@ ¡QXî ⌅ U` ‹ §\ ò¨\‰. ‹ §, ⇣‰§ ‹ §, 9@ T ¨ ¸¥¿t, ›1ê ¨‡ ò⌧ Hist| ¨©t⌧ ç1D 0T\‰. Hist| lj. ¯ self.xs, freqs = zip(*sorted(dw.Items())) self.ps = np.cumsum(freqs, dtype=np.float) self.ps /= self.ps[-1] xsî ,⌧ ¨§∏ ✓t‰; freqsî ¡QXî Hƒ ¨§∏‰. np.cumsumt ⌅ Hƒ iƒ| ƒ∞\‰. ⌅¥ Hƒ\ ò⌅t ⌅ U`t ⌧‰. n⌧ ✓– t⌧, Cdf| ›1Xî ‹⌅@ n log n– D@\‰. ‰L– Prob l⌅\ T‹ à‰. ✓D # class Cdf def Prob(self, x): if x < self.xs[0]: D⌅ U`D ⇠X\‰. 72 ⌧ 6 •. U` ƒh⇠ return 0.0 index = bisect.bisect(self.xs, x) p = self.ps[index - 1] return p bisect ®»@ tƒ Ä… l⌅D ⌧ı\‰. ¯¨‡, Value| l⌅àîp ⌅ U`D D ¡QXî ✓D ⇠X\‰. # class Cdf def Value(self, p): if p < 0 or p > 1: raise ValueError('p must be in range [0, 1]') index = bisect.bisect_left(self.ps, p) return self.xs[index] Cdf ¸¥¿t, ç ⌅ U` (consecutive cumulative probabilities) ¨t (t| ƒ∞t⌧ Pmf| ƒ∞` ⇠ à‰. Cdf ›1ê| 8úX‡ Pmf| ⌅Ï\ ‰t, Cdf.Items| 8út⌧ (t| ƒ∞\‰. # class Cdf def Items(self): a = self.ps b = np.roll(a, 1) b[0] = 0 return zip(self.xs, a-b) np.rollî a îå| $xΩ<\ tŸX‡, »¿…D òL<\ “Ã∞‰(roll)” b ´ îå| 0<\ ∏‡ ò⌧ a-b (t| ƒ∞\‰. ∞¸î ⇠ t U` 0Ùt ‰. Cdfî Shift@ Scale| ⌧ı\‰. Cdf– ✓D ¿ΩX¿Ã, U`@ à¿ (immutable)<\ ò¨⇠¥| \‰. ⌧7 ` (Moments) ¥ê L‡ \¯D ª‡ XòX +ê\ ⌅| ⇠ à‰. ¯ +ê µƒ…(statistic) t‰. ¿ L¿ ¥¥¯ µƒ…@ …‡, Ñ∞, ⌘⌅⇠, ¯¨‡ ¨Ñ⌅⇠‰. – ` (raw moment)@ |ÖX µƒ…t‰. Ã} xi \¯ ✓t à‰t, k௠– `@ ‰L¸ ⇡‰. m0k = 9@, 1 xik n i tl \0ï<\ \⌅Xt, ‰L¸ ⇡‰. 8. \ƒ (Skewness) 73 def RawMoment(xs, k): return sum(x**k for x in xs) / len(xs) k = 1| L, ∞¸î \¯ …‡ x̄ ⌧‰. ‰x – `@ ¯ ê¥\ X¯ J‰. X¿Ã, ‰x ƒ∞– ¨©⌧‰. ⌘Ï `(central moments)t T mk = 9@ à¿ ©X‰. k௠⌘Ï `@ ‰L¸ ⇡‰. 1 ( xi n i x̄ )k tl<\ \⌅Xt ‰L¸ ⇡‰. def CentralMoment(xs, k): mean = RawMoment(xs, 1) return sum((x - mean)**k for x in xs) / len(xs) k = 2| L, ∞¸î P௠⌘Ï `\ Ñ∞<\ x¿X‡ àD Ét‰. Ñ∞X X \ tÏ\ µƒ…t `\ à¨î¿ å∏| ‰. ⌅X xi – ê| 0 | î| χ …‡ ¸⌅–⌧ ê| èt, å⌅îX 1 `@ ✓X Ñ∞t‰. Ã} 1 `– u⇡X¿ J‰t, http://en.wikipedia.org/wiki/Moment_ of_inertia ˘¨t∏| 8p\‰. `– 0⇠\ µƒ| Ù‡` L, Ë⌅(unit)– \ › t ⌘îX‰. | ‰¥, ✓ xi cm t|t, ´ – `@ ⇣\ cmt‰. X¿Ã, P௠`@ cm2 t‡, 8௠`@ cm3 ... ÒÒt ⌧‰. tÏ\ Ë⌅ L8–, `@ ¯ ê¥\ t X0 ¥5‰. P௠`– t⌧ Ñ∞– ⌧Ò¸D Ë\ \ ∏(| î Ét tÏ\ t ‰. ¯Ït xi @ Ë⌅ ⇡Dƒ‰. ⌧8 \ƒ (Skewness) \ƒ (Skewness)î ÑÏ ‹| 0 Xî ç1t‰. Ã} ÑÏ ⌘Ï Ω•1 ¸¿–⌧ mt|t, 0∏¥¿¿ JX‰. Ã} ✓‰t $xΩ<\ ÄT ◊¥8 à‰t, “$xΩ<\ 0∏¥8 (right skewed)” à‡, Ã} ✓‰t |Ω<\ X ∞– à‰t, “|Ω<\ 0∏¥8 (left skewed”à‰. “0∏¥– (skewed)”D ¨©Xî ɉî Ét “∏X(biased)”| hïX¿î J î‰. Ë¿ \ƒî ÑÏ ‹ÃD 0 \‰; \¯ îú¸ – ∏X àî¿– t ¥§ Ƀ ò¿¥¿ Jî‰. Tà áá µƒ…t ÑÏ \ƒ| ƒ…TXîp ¨©⌧‰. ¸¥ƒ ✓ ‹ § ¸¥LD L, \¯ \ƒ (sample skewness) g1 @ ‰L¸ ⇡t ƒ∞⌧‰. xi 74 ⌧ 6 •. U` ƒh⇠ def StandardizedMoment(xs, k): var = CentralMoment(xs, 2) std = math.sqrt(var) return CentralMoment(xs, k) / std**k def Skewness(xs): return StandardizedMoment(xs, 3) g1 @ ⌧3 \ `\ ‹T⇠»‰î É<\ Ë⌅ ∆‰. L⇠ \ƒî ÑÏ |Ω<\ 0∏¥–; ë⇠ \ƒî ÑÏ $xΩ<\ 0∏¥ –D ò¿∏‰. g1 X ‹®î \ƒ ƒ| ò¿¥¿Ã, ¯ ê¥\ t X0î }¿ J‰. ‰4–⌧, \¯ \ƒ| ƒ∞Xî Ét å ã@ › t ⇠¿î ªX‰. Ã} ¥§ πt⇣(outlier)t à‰t, g1 – t⌧ ‡ t fi¿ Jî ®¸| ¯\‰. ÑÏ D mD … Xî ⇣ ‰x )ï@ …‡¸ ⌘⌅⇠ ¨t ƒ| ¥¥Ùî Ét‰. ˘Ë✓(extreme value)t ⌘⌅⇠Ù‰ …‡– ¯Xî ®¸ T l‰. ¯ò⌧ |Ω<\ 0∏¥ƒ ÑÏ–⌧ …‡@ ⌘⌅⇠Ù‰ƒ T ë‰. $xΩ<\ 0∏¥ƒ ÑÏ–⌧ …‡@ T l‰. <¥® ⌘⌅⇠ \ƒ ƒ⇠ (Pearson’s median skewness coefficient)î \¯ … ‡¸ ⌘⌅⇠ (t– 0⇠\ \ƒ !ƒ‰. g p = 3( x̄ m)/S x̄î \¯ …‡, m@ ⌘⌅⇠, Sî \ ∏(‰. 9@ h⇠î ‰L¸ ⇡‰. def Median(xs): cdf = thinkstats2.Cdf(xs) return cdf.Value(0.5) tl–⌧ T‹\ ë1\ def PearsonMedianSkewness(xs): median = Median(xs) mean = RawMoment(xs, 1) var = CentralMoment(xs, 2) std = math.sqrt(var) gp = 3 * (mean - median) / std return gp t µƒ…@ t(robust)t⌧ X¯Xî î πt⇣ L8– }å ⇠X¨¿ J î‰î Ét‰. ⌧\ NSFG ч pt0– àî ú› ¥⌘ \ƒ| ¥¥Ùê. ‰L– PDF| î X‡ o<\ ¯¨î T‹ à‰. 8. \ƒ (Skewness) 75 ¯º 6.3: NSFG–⌧ ò( ú›¥⌘ pt0X î PDF. ¯º 6.4: BRFSS–⌧ ò( 1x¥⌘ pt0X î PDF. live, firsts, others = first.MakeFrames() data = live.totalwgt_lb.dropna() pdf = thinkstats2.EstimatedPdf(data) thinkplot.Pdf(pdf, label='birth weight') ¯º ??– ∞¸ à‰. |Ω ,¨ $xΩ ,¨Ù‰ T 8¥ Ùx‰. ¯ò⌧ ÑÏ |Ω<\ 0∏¥ƒ É<\ î!t ¸ ⇠ à‰. …‡@ 7.27 lbs <\ ⌘⌅ ⇠ 7.38 lbs Ù‰ ‰å ëD⌧ |Ω<\ 0∏¥ƒ ɸ | 1t à‰. ¯¨‡ P \ƒ ƒ⇠ ®P L⇠‰: \¯ \ƒî -0.59; <¥® ⌘⌅⇠ \ƒî -0.23. t⌧ ú› ¥⌘ ÑÏ– tl T‹ à‰. t BRFSS– àî 1x ¥⌘ ÑÏ@ DPt Ùê. ‰L– df = brfss.ReadBrfss(nrows=None) data = df.wtkg2.dropna() pdf = thinkstats2.EstimatedPdf(data) thinkplot.Pdf(pdf, label='adult weight') 76 ⌧ 6 •. U` ƒh⇠ ¯º ??– ∞¸ à‰. ÑÏ $xΩ<\ 0∏¥ƒ É<\ Ùx‰. –` Ƀ ∆t, …‡t 79.0<\ ⌘⌅⇠ 77.3 Ù‰ T l‰. \¯ \ƒ 1.1t‡ <¥® ⌘⌅⇠ \ƒî 0.26t‰. \ƒ ƒ⇠ Ä8î ÑÏ |Ω 9@ $xΩ<\ 0∏¥ƒ ÉD ò¿¥¿Ã, ¯ ÉD ⌧xX‡ t X0î ¥5‰. \¯ \ƒî \ tX‰; â, πt⇣– T å ∞⌧‰. ∞¸\⌧ \ ˇLt îp, 0∏¥ƒ ÑÏ– © L, UXå • ( L ¯⌥‰. <¥® ⌘⌅⇠ \ƒî ƒ∞⌧ …‡¸ Ñ∞– 0⇠\‰. ¯ò⌧ πt⇣– ⇠X¨ 0 }¿Ã ⌧3 `– XtX¿ J0 L8– ÄT tX‰. ⌧9 µ8⌧ t µ8⌧ tı@ chap06soln.py– ò@à‰. Exercise 6.1 å› ÑÏî ÖXåƒ ∞!<\ 0∏¥8 à‰. tà µ8⌧– ⌧, t X∞ht º»ò \¿ ! ` Ét‰. xlŸ•p¨(Current Population Survey, CPS)î xŸµƒm(Bureau of Labor Statistics)¸ xlp¨m(Census Bureau)X ıŸë≈<\ 囸 (⌧ ¿⇠| l\‰. 2013D– ⇠—⌧ pt0î http://www.census.gov/hhes/ www/cpstables/032013/hhinc/toc.htm–⌧ ‰¥\‹ D ⇠ à‰. êî lå› Ù| î —@ | hinc06.xls D ‰¥\‹ D⌧, tEX •å –⌧ >D ⇠ àî CSV | hinc06.csv\ ¿Xà‰. t CSV |D àÏ}î hinc.py |ƒ hÿ à‰. pt0K@ å›l⌅¸ t˘ l⌅– çXî Qıê⇠X ‹\ ⇠¥à‰. • Æ@ l⌅@ “$5000 tX” tX ⌅å›D ‡‡\ Qıê Ïh⌧‰. • í @ l⌅@ “$250,000 t¡” 奉x Qıê Ïh⌧‰. t pt0–⌧ …‡¸ ‰x µƒ…D î Xîp, X\¸ ¡\– t⌧, ¯¨‡ l⌅– ✓‰t ¥ªå ÑÏ⇠»î¿– t D t|\‰. hinc2.py | – InterpolateSamplet ⌧ı⇠îp, pt0| ® TXî \ )ïD Ùϸ ‡ à‰. l⌅– \ ¡\D Ù‡ àî income |¸¸ l⌅– Qıê⇠| Ù‡ àî freq |¸D î pt0⌅ ÑD x⇠\ î‰. log_upperƒ x⇠\ îp, log10 ÏÏ\ \⌅⇠î • å›t í@ l⌅X ¡\t‰. 0¯$ ✓ log_upper=6.0 xp Qıê ¥p– • í@ å›t 106 , â 1Ãàt|î D ò¿∏‰. InterpolateSampleî ¨\¯D ›1\‰; â, l⌅–⌧ ‰⌧ pt0@ ⇡ @ Qıê⇠| ∞út¥î lå› \¯t‰. l⌅ å›t log10 ôƒ\ ‡ ÒÑ`(D \‰. 10. ©¥ ¨⌅ 77 ∞¸\ ò( \¯– t ⌘⌅⇠, …‡, 0∏¥–, <¥® 0∏¥–D ƒ∞X‹ $. …‡tX 8 D ‰8 ⇠ àî å›t àî l D(@ º»x ? ∞¸ \ ¡\– º»ò XtXî ? ⌧ 10 ©¥ ¨⌅ • U` ƒh⇠ (Probability density function, PDF): ç CDF ¯Ñ<\ ✓D U` ƒ– ‰QXî h⇠. • U` ƒ (Probability density): U`D É0 ⌅t⌧ î⌅ ✓– t Ñ` ⇠ àî ë. | ‰¥, Ã} ✓ Ë⌅ cmt|t, U` ƒî cm ˘ U` Ë⌅ ⌧‰. • u ƒî (Kernel density estimation, KDE): \¯– 0⇠t⌧ PDF| î Xî L‡¨ò. • t∞T (discretize): çh⇠ 9@ t∞ h⇠| (smoothing)X ⇠ . ƒ ÑÏ| ¸¨h. …\ • – ` (raw moment): pÌ ⌧Ò⇠î pt0 iƒ– 0⇠\ µƒ… • ⌘Ï ` (central moment): …‡–⌧ ∏( pÌ⌧Ò– 0⇠\ µƒ…. • \ ` (standardized moment): Ë⌅ • \ƒ (skewness): ÑÏ ∆î ` D(. º»ò D mx¿ ò¿¥î !ƒ. • \¯ \ƒ (sample skewness): ÑÏ \ƒ| 0⇠ µƒ…. …TXîp ¨©⇠î ` • <¥® ⌘⌅⇠ \ƒ ƒ⇠ (Pearson’s median skewness coefficient): ⌘⌅ ⇠, …‡, \ ∏(– 0⇠\ ÑÏ \ƒ| …TXîp ¨©⇠î µƒ…. • t1 (robust): πt⇣– ¡ …@ tX‰. <\ tÌ⇠¥ ⇠X¨¿ Jî‰t µƒ 78 ⌧ 6 •. U` ƒh⇠ ⌧7• ¿⇠⌅ ƒ ¿ L¿ \à– \ ¿⇠à ¥¥$‰. tà•–⌧ ¿⇠⌅ ƒ| ¥¥¯‰. ¿⇠ Xò| L‡ àî Ét ‰x ¿⇠– \ Ù| ‰t, P ¿⇠î ƒ à ‰. | ‰¥, ‡•¸ ¥⌘@ ƒ à‰; § T p ¨åt ¥⌘t T ò î Ω•t à‰. <`, DΩ\ ƒî D»‰: § ë‡ ±±\ ¨å¸ § l‡ »x ¨ åt à‰. X¿Ã, ‰x ¨åX ¥⌘D î!X$‡ \‰t, ‡• Ù| ®tî ÉÙ‰ § Ù| L‡ àî Ét ÄT UXå î Xîp ƒ¿t ⌧‰. tà •–⌧ ¨©⇠î T‹î scatter.py– à‰. T‹| ‰¥\‹X‡ ë≈X î É– \ Ùî ??D 8p\‰. ⌧1 ∞⇣ƒ (Scatter plots) ƒ(relationship)D UxXî • ⌅Ë\ )ït ∞⇣ƒ (scatter plot)‰. X¿ Ã, ã@ ∞⇣ƒ| Ëî Ét m¡ l¥ É@ D»‰. ⌧\, BRFSS Qıê– \ ‡•¸ ¥⌘ oD ¯¥ Ét‰. ( ?? 8p) pt0 |D }¥⌧ ‡•¸ ¥⌘ Ù| îúXî T‹ ‰L– à‰. df = brfss.ReadBrfss(nrows=None) sample = thinkstats2.SampleRows(df, 5000) heights, weights = sample.htm3, sample.wtkg2 SampleRows h⇠î pt0–⌧ |Ä| Ñ<\ Ë|∏‰. def SampleRows(df, nrows, replace=False): indices = np.random.choice(df.index, nrows, replace=replace) sample = df.loc[indices] return sample 80 ⌧ 7 •. ¿⇠⌅ ƒ ¯º 7.1: ¿0⇠¿ J@(å!), ¿0⌧(∞!) ∞⇣ƒ\ BRFSS–⌧ Qıê ‡• ¸ ¥⌘D ƒ›T. dfî pt0⌅ Ñt‡, nrowsî ›` âX /⇠ ⇠‡, replaceî ı– î úD t| Xî¿ ò¿¥î Ä∏(boolean) \›t‰; ‰x –\, Ÿ|\ ât \ à t¡ ›⇠¥ îú⇠î¿ ò¿∏‰. thinkplot–î Scatter Tÿ‹ àîp, ∞⇣ƒ| ¯∞‰. thinkplot.Scatter(heights, weights) thinkplot.Show(xlabel='Height (cm)', ylabel='Weight (kg)', axis=[140, 210, 20, 200]) ¯º ?? (|Ω)– ƒ ‹| Ùϸî ∞¸ p ¨åt T ¥⌘t ò î Ω•t à‰. à‰. ¡àX Éò¸, T § X¿Ã, ¡0 ¯ºt pt0| • ò \⌅Xî É@ D»‰. t î pt0 Ù – º¿¥ ∞$à‰. 8⌧î ‡•t • L¥ xX(inch) Ë⌅\ ⇠,º⇠‡, <¯0\ ¿XX‡ ò⌧, ‰‹ ⇠,ºà‰. ¿X ¸ –⌧ Ù ‰⇠»‰. ‰⌧ Ù| ‰‹ ⇠Ã¥ ⇠î ∆¿Ã, pt0| ¿0¡(jittering)1 t⌧ ∞⇣ ƒ– ®¸| \åT` ⇠ à‰. ⇠,º ®¸| ⇠èƒ] U` °L(random noise)| î \‰î X¯‰. ! ✓t • ¸¨\ xX(inch) Ù\ ⇠,º⇠ ¥ à¥⌧, 0.5 xX â, 1.3 <¯0L¿ (t ›8 ⇠ƒ à‰. », ¿\, ¥⌘@ 0.5 kgL¿ (t ›8 ⇠ à‰. 1 jittering, ¿0\ àÌD àîp µƒ ¨⌅–î Ò]t ⇠¥à¿ J‡ |⇠ ¨⌅–î “p ¿¡t‰”|‡ ò@à‰. ) 1. ∞⇣ƒ (Scatter plots) 81 ¯º 7.2: ¿0⇠¿ J@(å!), ¿0⌧(∞!) ∞⇣ƒ\ BRFSS–⌧ Qıê ‡• ¸ ¥⌘D ƒ›T. heights = thinkstats2.Jitter(heights, 1.3) weights = thinkstats2.Jitter(weights, 0.5) Jitter h⇠| l⌅\ Ét ‰L– à‰. def Jitter(values, jitter=0.5): n = len(values) return np.random.uniform(-jitter, +jitter, n) + values ✓@ ÑX ‹ § ⇠ à‰; ∞¸î ⇠ t(NumPy) 0Ùt‰. ¯º ?? ($x∏)– ∞¸ à‰. ¿0¡(jittering)D µt⌧ ⇠,º<\ x\ ‹ ®¸| ⌅t‡, ƒ ‹| ÄT ÖUà \‰. X¿Ã, |⇠ <\ ‹ T © <\à pt0| ¿0¡t| X‡, Ñ D ⌅t⌧ ¿0¡⌧ pt0 ¨©@ <t| \‰. ¿0¡ p(ƒ pt0| \⌅Xî • \ X )ït ⇠¿î ª\‰. ⌘ı⇠î ⇣t ŒD⌧ ¯º–⌧ p \ ÄÑ– àî pt0| (0‡, ‡ t fi¿ Jå πt⇣D p\‰. t@ ⇡@ ®¸| ÏT (saturation)|‡ Äx‰. t 8⌧| alpha ®⇠\ t∞` ⇠ àîp, ⇠âXî Ì`@ ⇣‰D ÄÑ < \ ,ÖXå \‰. thinkplot.Scatter(heights, weights, alpha=0.2) ¯º ?? (|∏)– ∞¸ à‰. π–¿î pt0 ⇣‰t T ¥Pà ÙÏ⌧ …t Ÿ Lt ƒ@ D@XÏ ‡ D fiò‰. t Ñ<<\ ¯∞ oD ¥¥Ùt, ^–⌧ ÖUX¿ J@ P ¿ ê8\ ¨mD ¸ ⇠ à‰; 90 kg â, 200 ¥‹ ¸ò– 82 ⌧ 7 •. ¿⇠⌅ ƒ ⇠… ¸ ápp ‡•–⌧ ⇠¡ p—t Ùx‰. pt0 ¥‹ Ë⌅\ ê0 Q ı– 0⇠X0 L8–, • ¯ÙÔ\ $Ö@ Qıê ⇠,º\ ✓<\ Ù‡| \ Ét‰. ,Ö1D ¨©t⌧ ⌘⌅ ƒ l0 pt0K| ò¨à‰. X¿Ã, ¯º@ Ë¿ BRFSS êà 414 509 ⌘–⌧ ´ 5000 T‹Ã ÙÏ ‰. T ‰‰Ä pt0KD ò¨X0 ⌅\, ⇣ ‰x ›¿ ! h o (hexbin plot)t ⌧‰. ¯ò⌅| ! µ(hexagonal bin)<\ ò⌅‡ µD º»ò Œ@ pt0 ‰¥àî¿– 0| …D `\‰. thinkplot– HexBinTÿ‹ à‰. thinkplot.HexBin(heights, weights) ¯º ?? ($x∏)– ∞¸ à‰. ! h(hexbin)X •⇣@ î Ét‡, p pt0K– t⌧ƒ ‹⌅¸ | l0– X Ë⇣@ πt⇣t Ùt¿ Jî‰î Ét‰. ƒ ‹ƒ ÙÏ ‰ ⇣–⌧ ®( t‰. t ¨@| µt⌧ pX‡ê Xî É@ $t| àÏ |<§î ∞ú< ∆t ƒ| ÖUXå Ùϸî ∞⇣ƒ| o<\ ¯¨î Ét l¥ É@ D»|î ⇣ t‰. ⌧2 ƒ| π’”0 ∞⇣ƒî ¿⇠ ¨t– ƒ– \ |⇠ x x¡D ⌧ı\‰. X¿Ã, ƒ ¯» – \ T Œ@ µ0D ¸î ‰x ‹ T)ït à‰. \ ›¿î ¿⇠| l⌅T (binning)X‡ ‰x ¿⇠ 1Ñ⌅⇠| o<\ ¯¨î Ét‰. ⇠ t(NumPy)@ ⇣‰§ pt0| l⌅TXî h⇠| ⌧ı\‰. df = df.dropna(subset=['htm3', 'wtkg2']) bins = np.arange(135, 210, 5) indices = np.digitize(df.htm3, bins) groups = df.groupby(indices) dropna Tÿ‹î 8Ö⌧ |¸(Ù)–⌧ nan àî âD ⌧p\‰. arange Tÿ ‹î 135Ä0 210L¿ (210@ ÏhX¿ J‡) 5Ã| ù Xî l⌅D ƒ ⇠ t 0ÙD ›1\‰. digitize Tÿ‹î df.htm3– àî ✓D Ù‡ àî l⌅ xM§| ƒ∞\‰. ∞¸î ⇠ xM§ ⇠ t(NumPy) 0Ùt‰. • X⌅ l⌅– çXî ✓@ xq§ 0– ‰Q⌧‰. • ¡⌅ l⌅– çXî ✓@ len(bins)– ‰Q⌧‰. groupbyî GroupBy ¥| ⇠XXî pt0⌅ Ñ Tÿ‹‰; for Ë⌅– ¨© ⇠‡, groups@ ¯˘ tѸ ¯˘D ò¿¥î pt0⌅ ÑD ⇠ıÃ∞‰. 3. ¡ (Correlation) 83 ¯º 7.3: ‡• l⌅ î⌅– \ ¥⌘ 1Ñ⌅⇠. for i, group in groups: print(i, len(group)) t⌧ ¯˘– t⌧, …‡ ‡•¸ ¥⌘ CDF| ƒ∞` ⇠ à‰. heights = [group.htm3.mean() for i, group in groups] cdfs = [thinkstats2.Cdf(group.wtkg2) for i, group in groups] »¿…<\, ‡•¸ ¥⌘– \ 1Ñ⌅⇠| o<\ ¯¥ ⇠ à‰. for percent in [75, 50, 25]: weights = [cdf.Percentile(percent) for cdf in cdfs] label = '%dth' % percent thinkplot.Plot(heights, weights, label=label) ¯º ??– ∞¸ ò@ à‰. 140<¯0–⌧ 200<¯0 ¨t P ¿⇠ ⌅X ƒî µ t‰. t î⌅– 99%t¡ pt0 ∞$à‰. ¯ò⌧, ˘Ë✓– t⌧ 4 q ` Dîî ∆‰. ⌧3 ¡ ¡ (Correlation) (correlation)@ P ¿⇠ ⌅ ƒ ƒ| …TXîp ¨©⇠î µƒ…t‰. ¡ D ! Xîp xºÃ@ DPX$î ¿⇠ Ÿ|\ Ë⌅\ \⌅⇠¿ Jî ‰. ¯¨‡ $¨ Ë⌅ Ÿ|X‰‡ XT|ƒ, ‰x ÑÏ–⌧ P ¿⇠ òT‰. ¡0 8⌧– \ P ¿ |⇠ x t∞Et à‰. 84 ⌧ 7 •. ¿⇠⌅ ƒ 1. ✓D …‡–⌧ ®¥ƒ \ ∏( +êx \ ⇣⇠ (standard scores) \ ¿X\‰. tÏ\ ¿X@ “<¥® Ò ` ¡ ƒ⇠ (Pearson productmoment correlation coefficient)” ⌧‰. 2. ✓D ,⌧ ¨§∏ ✓ xq§x ⌧⌅ (rank)\ ¿X\‰. tÏ\ ¿X @ “§<¥Ã ⌧⌅ ¡ ƒ⇠ (Spearman rank correlation coefficient)” ⌧‰. Ã} X |( n⌧ ✓, xi |t, …‡D |‡ \ ∏(\ ò⌅¥⌧ \ ⇣⇠\ ⌅X\‰. zi = ( xi µ)/s. Ñ® ∏(‰; …‡–⌧ ®¥ƒ (t. s\ ò⌅t ∏(| \ T(standardizes) \‰. ¯ò⌧ Z ✓@ (–t ∆‰(Ë⌅ ∆L). ¯¨‡ ÑÏî …‡ 0, Ñ∞ 1t ⌧‰. Ã} X ‹ ÑÏ|t, Zƒ ¯⌥‰. X¿Ã, Ã} X 0∏¥¿pò t¡⇣t à‰t, Zƒ ¯⌥‰; t@ ⇡@ Ω∞, 1Ñ⌅ ⌧⌅| ¨©Xî Ét ÄT tX ‰. Ã} »\¥ ¿⇠, RD ƒ∞\‰t, ri î xi X ⌧⌅ ⇠‡, X 4® Ñχ¿ ƒ∆t, R ÑÏî 1–⌧ nL¿ ‡ÒÑω. ⌧4 ıÑ∞ (Covariance) ıÑ∞ (Covariance)@ hÿ ¿TXî P ¿⇠X Ω•1 !ƒ‰. Ã} P ¿⇠ ƒÙ X and Y à‰t, …‡– \ ∏êî ‰L¸ ⇡‰. dxi = xi x̄ dyi = yi ȳ x̄ XX \¯ …‡t‡, ȳt YX \¯ …‡t‰. Ã} X@ Y ∏(î Ÿ| 08| î Ω•t à‰. hÿ ¿\‰t, P ¿⇠| hÿ Ò\‰t, Òt ë⇠ Lî ∏( Ÿ|\ Ä8| D L‡, L⇠ Lî ⇠ Ä8| D L‰. ¯ò⌧, ÒD iXå ⇠t hÿ ¿TXî Ω•1 !ƒ ⌧‰. ıÑ∞@ t‰ ÒX …‡t‰. 1 dx dy n i i n@ P ƒÙ ¿⇠X 8t‰. (P ƒÙ ¿⇠î 8t Ÿ|t| \‰.) Cov( X, Y ) = Ã} ⇠YD ıÄt0t, Cov 8t\ ò ∏(X ¥ (dot product)t ‰. ¯ò⌧ Ã} P °0 Ÿ|X‰t ıÑ∞@ ˘ T⇠‡, ¡P(orthogonal) 5. <¥® ¡ (Pearson’s correlation) Xt 0, ⇠ )•<\ ⌅XXt Ä8 L⇠ ¨©t⌧ Cov| ®¸ <\ l⌅\‰. 85 ⌧‰. thinkstats2î np.dotD def Cov(xs, ys, meanx=None, meany=None): xs = np.asarray(xs) ys = np.asarray(ys) if meanx is meanx = if meany is meany = None: np.mean(xs) None: np.mean(ys) cov = np.dot(xs-meanx, ys-meany) / len(xs) return cov 0 $ ✓<\ Cov \¯ …‡–⌧ ∏(| ƒ∞Xpò t¯ ƒ∞⌧ …‡ ✓D xê\ ⇠8 ⇠ à‰. Ã}, xs@ yst tl ‹ §|t, np.asarray ⇠ t(NumPy) 0Ù\ ⌅X\‰. Ã} t¯ ⇠ t(NumPy) 0Ùt|t, np.asarrayî D4 Ƀ X¿ Jî‰. ıÑ∞ l⌅t $Ö © <\ ⌅ËXå l⌅⇠»‰. ⇠ t(NumPy)@ ⇣‰§ – ıÑ∞ l⌅⇠¥ 0•D ⌧ı\‰. X¿Ã, X‰ Ï0⌧ ‰Ë¥¿¿ Jî ë@ \¯ l0– \ Ù 0•D ⌧ı\‰. ¯¨‡, np.covî ıÑ∞ â,D ⇠XX îp, ıÑ∞ â,@ ¿ ˘• Dî\ É t¡t‰. ⌧5 <¥® ¡ (Pearson’s correlation) ıÑ∞t áá ∞–⌧î ©X¿Ã, î} µƒ…<\î ∞T Ù‡⇠¥¿¿ Jîp t î t X00 ¥50 L8t‰. ‰x 8⌧⇣ ⌘–⌧, Ë⌅ X@ Y Ë⌅X Òt‰. | ‰¥, tÉt 4«D X¯X‡¿, BRFSS pt0K–⌧ ¥⌘¸ ‡• ıÑ∞@ 113 ¨\¯º-<¯0 ⌧‰. t 8⌧– \ t∞E@ \ ∏(\ ∏(| ò⌅‡, \ t‰. pi = ⇣⇠ ÒD ƒ∞Xî É ( xi x̄ ) (yi ȳ) SX SY SX @ SY @ X@ YX \ ∏(‰. t‰ ÒX …‡@ ‰L¸ ⇡‰. r= 1 p n i 86 ⌧ 7 •. ¿⇠⌅ ƒ 9@ SX @ SY D |¥⌧ r| ‰‹ ë1` ⇠ à‰. r= Cov( X, Y ) SX SY t ✓D =0 •% àî µƒYê | <¥®(Karl Pearson)D 0| <¥® ¡ (Pearson’s correlation)t|‡ Äx‰. ƒ∞X0 }‡ t X0ƒ }‰. \ ⇣⇠î (–t ∆¥⌧ r‰. thinkstats2–⌧ l⌅\ T‹ ‰L– à‰. def Corr(xs, ys): xs = np.asarray(xs) ys = np.asarray(ys) meanx, varx = MeanVar(xs) meany, vary = MeanVar(ys) corr = Cov(xs, ys, meanx, meany) / math.sqrt(varx * vary) return corr ƒƒ\ np.mean@ np.varD 8úX0 Ù‰ ‰å T ®( <\ MeanVar@ … ‡¸ Ñ∞D ƒ∞\‰. <¥® ¡ @ m¡ -1¸ 1 ¨t‰. (1,-1D Ïh\‰.) Ã}, r ë⇠|t, ¡ t ë(positive)<\ \ ¿⇠✓t í<t, ‰x ¿⇠✓ƒ í@ Ω•t à‰î X¯‰. r Ä(negative)tt, \ ¿⇠ ✓t í<t, ‰x ¿⇠ ✓@ Æ@ Ω•t à‰î X¯‰. r l0î ¡ ƒ| ò¿∏‰. Ã} r 1 9@ -1 tt, ¿⇠î DΩXå ¡ ⇠¥ à‰î X¯\, Ã} ¿⇠ Xò| L‡ à‰t ‰x Xò– t⌧ DΩ\ !t •X‰î X¯‰. ⌅‰ 8ƒ–⌧ ÄÑX ¡ @ DΩX¿ J¿Ã, Ï⌅à ©X‰. ‡•¸ ¥⌘ ¡ @ 0.51\ D∑\ ¨å¸ (⌧ ¿⇠@ DPXÏ ¸ L \ ¡ t‰. ⌧6 D ƒ (Nonlinear relationships) Ã} <¥® ¡ t pX 0t|t, ¿⇠ ¨t– ƒ ∆‰‡ Ë X‡ ˆD É t‰. X¿Ã, ¯Ï\ ∞`@ ¿˘X¿ J‰. <¥® ¡ @ Ë¿ (linear) ƒÃD ! \‰. Ã} D ƒ à‰t, rî D ƒ| ¸å… X å ⌧‰. 7. §<¥Ã ⌧⌅ ¡ (Spearman’s rank correlation) ¯º 7.4: ‰ë\ î⌅X ¡ D î 87 ⌧ pt0K. ¯º ??@ http://wikipedia.org/wiki/Correlation_and_dependence ⌅§ <D ¨t∏–⌧ 8T‰. ¯º–⌧ Xƒ <\ ›1⌧ pt0K– \ ∞ ⇣ƒ@ ¡ ƒ⇠ Ùσ‰. ¡Ë ⌅–î ‰ë\ ¡ ƒ⇠| ƒ ƒ| ÙÏ ‰; ¡Ë â–⌧ ‰ë\ r ✓t ¥§ êåx¿ ⇣D ªD ⇠ à‰. P௠ât ‰ë\ 0∏0| ƒ D⌅ ¡ X à‰. ¡ t 0∏0@ (t ∆‰î ÉD ÙÏ ‰ (Á 0∏0| î Xî É– t ∏ ` Ét‰.) 8௠â@ ÖUXå (t àî ¿⇠| ÙÏ ‰. X¿Ã, ƒ D t|, ¡ ƒ⇠î 0t‰. ¡0 t|0X P»@ ¡ ƒ⇠| ˘© <\ ƒ∞X0 ⌅– pt0| ∞⇣ƒ| ¯$⌧ m¡ ¥¥⇣| \‰î Ét‰. ⌧7 §<¥Ã ⌧⌅ ¡ lation) (Spearman’s rank corre- <¥® ¡ @ ¿⇠ ¨tX ƒ t‡, ¿⇠ µ ‹ÑÏ| 0x ‰t ò Ÿë\‰. X¿Ã, t¡✓t t¨Xî Ω∞–î tX¿ ªX‰. §<¥Ã ⌧⌅ ¡ t H<\ t¡✓¸ 0∏¥ƒ ÑÏ– \ ®¸| DT\‰. §< ¥Ã ¡ D ƒ∞X0 ⌅t⌧ ✓X ⌧⌅ (rank)| ƒ∞Xîp ,⌧ \¯– xq§– t˘\‰. | ‰¥, \¯ [1, 2, 5, 7]–⌧ ✓ 5– \ ⌧⌅î 3t ‰. \–Xt ,⌧ ¨§∏–⌧ 3௠ҕX0 L8t‰. ¯¨‡ ò⌧ <¥® ⌧⌅ ¡ D ƒ∞\‰. thinkstats2î §<¥Ã ⌧⌅ ¡ D ƒ∞Xî h⇠ à‰. 88 ⌧ 7 •. ¿⇠⌅ ƒ def SpearmanCorr(xs, ys): xranks = pandas.Series(xs).rank() yranks = pandas.Series(ys).rank() return Corr(xranks, yranks) xê| ⇣‰§ ‹¨à ¥\ ⌅Xt⌧, ✓– \ ⌧⌅| ƒ∞X‡ ‹¨à| ⇠XXî ⌧⌅ (rank) Tÿ‹| ¨©` ⇠ à‰. ¯¨‡ ò⌧ CorrD ¨©t⌧ ⌧⌅ ¡ D ƒ∞\‰. ¡⌘ <\ Series.corrD ¨©t⌧ §<¥Ã Tÿ‹| Ö8` ⇠ƒ à‰. def SpearmanCorr(xs, ys): xs = pandas.Series(xs) ys = pandas.Series(ys) return xs.corr(ys, method='spearman') BRFSS pt0– \ §<¥Ã ⌧⌅ ¡ ƒ⇠î 0.54\ <¥® ¡ ƒ⇠ 0.51 Ù‰ }⌅ T í‰. (t– \ •\ t á ¿ à‰: • Ã} ƒ t à‰. D tt, <¥® ¡ @ ƒX ƒ| ¸åî Xî Ω• • Ã} P ¿⇠ ÑÏ⌘ Xò 0∏pò(skewed) t¡⇣D ÏhXå ⇠t, <¥® ¡ t (¥ê )•t‡¿) •D D ⇠ à‰. §<¥Ã ¡ ƒ⇠ ÄT tX‰. BRFSS ⌧–⌧, ¥⌘ ÑÏ µ \¯ ‹ÑÏ|î ÉD L‡ à‰; \¯ ¿ XD µt⌧ ‹ ÑÏ\ ¸¨t⌧, 0∏¥–t ∆‰. 0∏¥– ®¸| ⌧pXî ⇣‰x )ï@ \¯ Ë\ ¥⌘¸ ‡• ¨t <¥® ¡ D ƒ∞Xî Ét‰. thinkstats2.Corr(df.htm3, np.log(df.wtkg2))) ∞¸î 0.53<\ ⌧⌅ ¡ ƒ⇠ 0.54– ]‰. ¯ò⌧ tÉt X¯Xî î ¥ ⌘ ÑÏX 0∏¥–t <¥®¸ §¯¥Ã ¡ ¨t ÄÑ (t| $Ö\‰. ⌧8 ¡ ¸ x¸ (Correlation and causation) Ã} ¿⇠ A@ B ¡ ⇠»‰t, 8 ¿ $Öt •X‰: A BX ⌧› –x, B AX ⌧› –x, 9@ ‰x îå A@ BX ⌧› –x. t@ ⇡@ $ÖD “x¸ ƒ (causal relationships)”|‡ Äx‰. ¡ ¯ ê¥\î •\ $Öt ¥ê Éx¿ lƒX¿î ª\‰. ¯ò⌧, ¥ê Ét ¨‰x¿ ÏÏÑ–å L$¸¿î ª\‰. t –Y@ ÖÖ ‰L ¡©l\ 9. µ 8⌧ 89 \⌅⌧‰. “¡ @ –xD hïX¿ Jî‰. (Correlation does not imply causation)”. ` Xåƒ ê¥ ⌅§<D òt¿ƒ à‰. http://wikipedia.org/ wiki/Correlation_does_not_imply_causation. x¸ ùp| ⌧ıX$t 4«D ` ⇠ àDLî? 1. ‹⌅D ¨©\‰. Ã} A B⌅– (‰t, A B| ⌧›‹§î –x t¿ Ã, ‰tåî D»‰. ( ¥ƒ x¸– \ ¡› x tt– 0tt) ¨t ⌧⌧î x¸ )•D î`Xîp ƒ¿t ⌧‰. X¿Ã, ‰x 4∏ A@ B | ⌧›‹§î –xt ⌧‰î •1D 0⌧X¿ ª\‰. 2. U`(randomness)D ¨©\‰. Ã} p \¯D ÑX\ P —Ë<\ ò⌅‡ pX ®‡ ¿⇠X …‡D ƒ∞\‰t, (tî ëD É<\ 0 \‰. Ã} \ ¿⇠| ⌧xX‡ ®‡ ¿⇠–⌧ —Ët Ÿ|X‰t, »⌅ ƒ (spurious relationship)D ⌧p` ⇠ à‰. $¨ ( ¿⇠ 4«x¿ ®x‰‡ XT|ƒ t )›@ Ÿë\‰. X¿ Ã, ( ¿⇠| L‡ à‰t T ò ŸëXîp t î —Ët Ÿ|X‰î ÉD Ux` ⇠ à0 L8t‰. t@ ⇡@ Dt¥ 4ë⌅ pp ‹ÿ (randomized controlled trial)X Ÿ 0 ⌧‰. ‹ÿ ¡t ÑX\ P (9@ ¯ t¡) —Ë– 0ç⌧‰: ò¨p (treatment group)@ ‡} ⇡@ |ÖX ⌧ÖD ‡, pp (control group)@ ⌧Ö D ¿ Jpò ®¸ L$ƒ ⇣‰x ò¨| î‰. 4ë⌅ pp ‹ÿ@ x¸ ƒ| ‹Xî • ‡∞1 àî )ït ‡, ¸Y-0⇠ XYX t‰. (http://wikipedia.org/wiki/Randomized_ controlled_trial 8p). àâXåƒ pp ‹ÿ@ ‰ÿ‰ ¸Y, XY, ¯¨‡ áá Y8Ñ|–⌧à • X‰. ¨å ¸Y–⌧, pp ‰ÿt ‹8p t î à •Xpò D$¨ t0 L8t‰. ⇣ ‰x H@ ê ‰ÿ (natural experiment)D ¥¥Ùî Éxp, ‰x ò¨ (treatment) ¨\ —Ë– ©⌧‰. ê ‰ÿX \ ¿ ⌅ÿ1@ ÖUX¿ Jî )›<\ —Ët ‰|¿ƒ ®x‰î Ét‰. t ¸⌧– t⌧ ˘¨t∏| 8p\‰. http://wikipedia.org/wiki/Natural_experiment. áá Ω∞–, å¿ Ñ (regression analysis)D ¨©t⌧ x¸ ⇠ à‰. ??•–⌧ ‰ Ét‰. ⌧9 µ 8⌧ t µ8⌧ tı@ chap07soln.py– ò@à‰.. ƒ| î`` 90 ⌧ 7 •. ¿⇠⌅ ƒ Exercise 7.1 NSFG –⌧ ò( pt0| ¨©t⌧, ú›¥⌘¸ ∞®9 ∞⇣ ƒ| ¯¨‹$. ú›¥⌘¸ ∞®9 1Ñ⌅⇠| ƒ›TX‹$. <¥® ¡ ¸ §<¥Ã ¡ D ƒ∞X‹$. P à⇠ ¨t ƒ| ¥ªå π’ <\ ⇠¨` ⇠ àDL? ⌧ 10 ©¥ ¨⌅ • ∞⇣ƒ (scatter plot): P ¿⇠ ¨t ÙÑ<\h ‹ T. ƒ| pt0 ⻉ ⇣D ¥ • ¿0 (jitter): ‹ T © <\ pt0– î ⇠î U` °L. • ÏT (saturation): ‰⇠X ⇣t π–¿å ⇠¥⌧ ⌧›Xî • ¡ (correlation): P ¿⇠ ¨t ƒ Ù ê‰. ƒ| ! Xî µƒ…. • \ T(standardize): ¿⇠ —i ✓D ¿Xt⌧ …‡ 0, Ñ∞ 1\ ÃÊ. • \ ⇣⇠ (standard score): \ T⌧ ✓<\, …‡–⌧ ®¥ƒ \ ∏( \ \⌅. • ıÑ∞ (covariance): hÿ ¿TXî P ¿⇠ Ω•1 !ƒ. • ⌧⌅ (rank): xq§\, ,⌧ ©]– îå ò¿òî ⌧⌧. • 4ë⌅ pp ‹ÿ: ‰ÿƒç (experimental design)<\ ¡t 4ë⌅ —Ë<\ ò ¿‡, ‰x —Ë– ‰x ò¨(treatment) ¸¥ƒ‰. • ò¨p —Ë (treatment group): tion)D î —Ë. • pp ‹ÿ–⌧ |ÖX ⌧Ö(interven- pp —Ë (control group): pp ‹ÿ–⌧ ò¨| ®¸ L$ƒ ò¨| î —Ë. ¿ Jpò t¯ • ê ‰ÿ (natural experiment): ¡t —Ë<\ ê lÑ⇠î ⌅¡D t©Xî ‰ÿƒç. Ï0⌧ —Ë@ \å\ ¸¨ <\ 4ë⌅ ⌧‰. ⌧8• î (Estimation) tà •–⌧ ¨©⇠î T‹î estimation.py– à‰. T‹| ‰¥\‹X‡ ë ≈Xî É– \ Ùî ??D 8p\‰. ⌧1 î åÑ åÑ \⇣i‹‰. êî › Xî ÑÏ à‡, ÏÏÑ@ ¯ ÑÏ 4«x¿ fi ∞| \‰. å∏| P⌧ ‰: ‹ÑÏt‡, ‹ÑÏ–⌧ ò( \¯t ‰L¸ ⇡‰. [-0.441, 1.774, -0.101, -1.138, 2.975, -2.138] ¡0 ÑÏX …‡ ®⇠, µ 4ºLî? \ ¿ ›@ µ î ✓(estimate)<\ \¯ …‡ x̄D ¨©\‰. ¡0 ⌧` ⌧ x̄ 0.155 <\, µ = 0.155 î Xî É@ i¨ t‰. tÏ\ ¸ D î (estimation)t|‡ Äx‰. ¨©\ µƒ… (\¯ …‡)@ î …(estimator)t |‡ Äx‰. µ| î Xîp \¯ …‡D ¨©Xî Ét 4 ÖUt⌧ i¨ x ‰x HD ¡¡X0î ¥5‰. X¿Ã, t¡✓D ƒÖt⌧ åÑD ∏î ÉD Xê. ê ‡∞ › Xî ÑÏ à‰. ‹ÑÏt‡, òª⌧ ꨖ ÖÖ å⇠⇣D #î ¿ Jî p¨–t ⇠—\ \¯t ‰L– à‰. [-0.441, 1.774, -0.101, -1.138, 2.975, -213.8] t⌧ µ î ✓@ 4«t Lî? Ã} \¯ …‡D ¨©\‰t, î Xî -35.12 ⌧‰. tÉt \ X ›|Lî? Ht 4«t Lî? 92 ⌧ 8 •. î \ ¿ ›¿î t¡⇣D ›ƒX‡ Ѩ‡ ò⌧, ò8¿| ƒ∞\‰. ‰x ›¿î ⌘⌅⇠| î …<\ ¨©\‰. (Estimation) ¿‡ \¯ …‡D ¥ê î …t • ã@ î ¡i– 0| Ï|¿‡( | ‰¥, t¡✓t àê –), © t 4«t–– Ï$à‰. $X| \åTX$‡ Xî¿ 9@ ıD ªî •1D ˘ TX$‡ Xî¿. Ã} t¡✓t ∆‰t, \¯ …‡@ ⌅ …‡⌧Ò$( (mean squared error), MSE| \åT\‰. â, Ã} åÑD ÏÏàX‡, ‰à $( x̄ µ| ƒ∞Xt, \¯ …‡@ ‰LD \åT \‰. 1 ( x̄ µ)2  m m@ î åÑD ⇠â\ ü⇠‰. x̄| ƒ∞Xîp ¨©⌧ \¯ l0x n@ <Ÿ Xt H⌧‰. MSE = ‰L– h⇠ àîp î åÑD ®¨XÏ MSE ⌧Ò¸x, ⌅ …‡⌧Ò$( X ⌧Ò¸(root mean squared error, RMSE)D ƒ∞\‰. def Estimate1(n=7, m=1000): mu = 0 sigma = 1 means = [] medians = [] for _ in range(m): xs = [random.gauss(mu, sigma) for i in range(n)] xbar = np.mean(xs) median = np.median(xs) means.append(xbar) medians.append(median) print('rmse xbar', RMSE(means, mu)) print('rmse median', RMSE(medians, mu)) ‰‹ \à, n@ \¯ l0‰. m@ åÑD ‰â\ ü⇠‰. means@ x̄– 0⇠\ î ✓ ¨§∏‰. medians@ ⌘⌅⇠ ¨§∏‰. ‰L– RMSE| ƒ∞Xî h⇠ à‰. def RMSE(estimates, actual): e2 = [(estimate-actual)**2 for estimate in estimates] mse = np.mean(e2) return math.sqrt(mse) 2. Ñ∞ î 93 estimatesî î ✓ ¨§∏‰; actual@ î ⇠î ‰⌧ ✓t‰. ‰4–⌧î < ` actualD ®x‰; Ã} L‡ à‰t, î ` Dî ∆D Ét‰. ‰ÿ © @ P î … 1•D DPXî Ét‰. T‹| ‰âXt, \¯ …‡ RMSE 0.41\ X¯Xî î Ã} n = 7 \¯– 0⇠XÏ x̄| ¨©t⌧ ÑÏ …‡D î \‰t, …‡ 0.41Ã| ®¥L‰‡ ! ⌧‰. ⌘⌅⇠| ¨©XÏ …‡D î Xt RMSE 0.53D ∞úXîp ¥ƒ t ¨@–⌧ x̄ T Æ@ RMSE| QD∏‰‡ Uxt ‰. MSE \åTî ã@ π1t‰. X¿Ã, m¡ \ X ⌅µ@ ⇠¿ ª\‰. | ‰¥, p å–⌧ å çƒ ÑÏ| î \‰‡ X‰. Ã} î ✓t 4 í<t, ‹$<D ¸ƒXå ”å⇠¥⌧ D©t ¡π\‰. X¿Ã, 4 Æå î \‰t, lp<t ï4` ⇠ƒ à‰. $X h⇠\ D©t å∞ mt D»0 L8–, MSE \åT m¡ ã@ ⌅µ@ D»‰. ‰x ⌧\, 6t ¸¨⌅ 8⌧| X8⌧ iƒ| !Xî ÉD Xê. UX å iƒ| fiò‰t, ¡D å ⌧‰; fiî¿ ªXt D4 Ƀ ∆‰. tΩ∞, MSE | \åTXî ✓@ 10.5 ⌧‰. X¿Ã, ã¿ ª\ î ✓t ⌧‰. \–Xt ¸ ¨⌅ 8⌧| X8 i@ ∞T 10.5 ⇠¿ ª\‰. t åÑ–⌧, fiú • í@ U `D ƒ î …t DîX‰. ¯É@ \ ∞ƒî … (maximum likelihood estimator, MLEt‰. Ã} 10 9@ 11| ›Xt, ∞π •1t 8ÑX 1t ⇠ ‡ ` ⇠ àî \ t ⌧‰. ⌧2 Ñ∞ î ê »L– P‡ àî ÑÏ à‰. ‹Ñχ, ‰L– (\⇡\) \¯t à‰. [-0.441, 1.774, -0.101, -1.138, 2.975, -2.138] ¡0 ÑÏX Ñ∞ s2 4«|Lî? ‰‹ \à, Ö1\ î …<\ ¨©Xî Ét‰. S2 = 1 (x n i ›@ \¯ Ñ∞, S2 | x̄ )2 \¯l0 p Ω∞, S2 \ î …t ⇠¿Ã, ë@ \¯– t⌧ 4 ë D¿î Ω•t à‰. t@ ⇡@ àâ\ 1»\ xt⌧, ∏X (biased) î …t| ‡ Äx‰. Ã} î D Œt ⇠ı\ §– 0 (9@ …‡) $X 0t|t, î …@ à∏X(unbiased)‰. ‰â§˝åƒ, s2 – \ à∏ î …x ⇣ ‰x ⌅Ë\ µƒ…t à‰. 94 ⌧ 8 •. î Sn2 1 = 1 n 1 ( xi (Estimation) x̄ )2 S2 \ ∏X à‡, Sn2 1 \ à∏ î …x¿– \ $Ö@ ˘¨t∏ http: //wikipedia.org/wiki/Bias_of_an_estimator 8p绉. t î …– \ • p 8⌧⇣@ Öm¸ 08 | ⇠¿ ªXå ¨©⌧‰î p à‰. “\¯ Ñ∞”t S2 9@ Sn2 1 , ¯¨‡ 08 S2 t \Ω 9@ ëΩ– ¨© ⇠ à‰. î åÑD ®X‹ÿX‡ S2 @ Sn2 1X 1•D ‹ÿXî h⇠ ‰L– à‰. def Estimate2(n=7, m=1000): mu = 0 sigma = 1 estimates1 = [] estimates2 = [] for _ in range(m): xs = [random.gauss(mu, sigma) for i in range(n)] biased = np.var(xs) unbiased = np.var(xs, ddof=1) estimates1.append(biased) estimates2.append(unbiased) print('mean error biased', MeanError(estimates1, sigma**2)) print('mean error unbiased', MeanError(estimates2, sigma**2)) \à T, n \¯ l0t‡, m@ åÑD ⇠â\ ü⇠‰. np.varî 0¯ $ <\ S2 D ƒ∞X‡, Ã} xê\ ddof=1D #<t Sn2 1 D ƒ∞\‰. ddof î “x¿ ê ƒ (delta degrees of freedom)”X ï}¥‰. ˘¨t∏–⌧ ê 8\ ¨m 8p\‰. http://en.wikipedia.org/wiki/Degrees_of_freedom_ (statistics) MeanErrorî î ✓¸ ‰⌧✓ ¨t …‡ (t| ƒ∞\‰. def MeanError(estimates, actual): errors = [estimate-actual for estimate in estimates] return np.mean(errors) T‹| ‰âXt, S2 – \ …‡ $(î -0.13t‰. 0 \ Éò¸, ∏X î … t 4 @ Ω•t à‰. Sn2 1 – t⌧, …‡ $(î 0.014\ 100 T ‰. m t ‰⇣– 0|, …‡ $( Sn2 1 0– ⇠4t⌅‰. 3. \— ÑÏ (Sampling distributions) 95 MSEò ∏X(bias) ⇡@ 1»@ Œ@ î åÑ– 0⇠\ •0 0 ⌧‰. t• –⌧@ ⇡@ ®X‹ÿD ⇠ât⌧, î …D DPX‡, å¡\ 1»D î¿ ⇣Ä` ⇠ à‰. X¿Ã, î …D ‰⌧ pt0– ©àD L, Ë¿ Xò î ✓à ªî‰. î ✓ t ∏X ∆‰‡ –Xî Ét X¯ ∆D ⇠ à‰; à∏(unbiased)X‰î É@ î …(estimator)X 1»t¿ î ✓(estimate)X 1»@ D»‰. \ 1»D î î …D ›X‡ î ✓D ›1X‡ òt, ‰L ˃î î ✓X àU‰D π1Tt| \‰. ‰L X ¸⌧‰. ⌧3 \— ÑÏ (Sampling distributions) |›Ÿ< Ù8lÌ–⌧ ‡¥|| lX‡ àî ¸Yê| tÙê. Ù8lÌ – ⌧›X‡ àî 1x T˜ ‡¥| …‡ ¥⌘D L‡ê \‰. ¥⌘D ! X$‡ \‰t, ‡¥|| ƒ ‹⌧| Xîp, ⌅ÿX‡, D©t Œt ‰p, D»ƒ ‡¥ | ꥃ t\∏ ⇠ à‰. X¿Ã, ¥⌘ Ù ⇠—t ⌘îX‰t, 9»¨ ‡¥|| \¯<\ ¥⌘D ! Xî É@ ©x ¿ ®x‰. Ù8lÌ ®—Ë@ L‡ à‰ ‡ Xê. ¯ò⌧ 1x T˜ \ \¯D ‡| ⇠ à‰. ¯¿X ®—Ë …‡ µ | î Xîp \¯ …‡ x̄| ¨©` ⇠ à‰. ‡¥| T˜ 9»¨ ¥⌘D ¨⌧, \¯…‡ x̄ = 90 kg¸ \¯ \ ∏( S = 7.5 kgD >X‰. \¯…‡@ µ– \ à∏ î …t‡, •0 <\ MSE| \å T\‰. ¯ò⌧ ∞¸| î}Xî Ë Xò î ✓D Ù‡\‰t, 90 kgD Ù‡` Ét‰. X¿Ã, t î ✓– t⌧ º»ò ‡∞| 8|`L? Ë, T p ®—Ë–⌧ Ë¿ n = 9 »¨ ‡¥|à ¥⌘D ! à‰t, ∞àƒ ¥t ã¿ ªX‰t • 4p¥ (9@ • º¥) ‡¥|à ‡| ⇠ à‰. U` ›(random selection) – Xt⌧ ⌧›⇠î î ✓X ¿ŸD \— $( (sampling error)|‡ \‰. \— $(| …TX0 ⌅t⌧, $(hypothetical) ✓ µ@ s| ¸ D ®X‹ÿX‡, x̄ º»ò ¿TXî¿ ¥¥¸ ⇠ à‰. î \¯îú ®—Ë µ@ s ‰⌧✓D ®t0 L8–, x̄@ SD î ✓<\ ¨©\‰. ¯ò⌧ ıD >‡ àî »8@ “Ã} µ@ sX ‰⌧✓t 90 kg@ 7.5 kgt‡, Ÿ|\ ‰ÿD Œt ⇠â\‰t, î ⌧ …‡ x̄ º»ò ¿T`Lî?” ‰L h⇠ »8– ıD \‰. def SimulateSample(mu=90, sigma=7.5, n=9, m=1000): means = [] for j in range(m): 96 ⌧ 8 •. î (Estimation) ¯º 8.1: ‡∞l⌅¸, x̄ \—ÑÏ. xs = np.random.normal(mu, sigma, n) xbar = np.mean(xs) means.append(xbar) cdf = thinkstats2.Cdf(means) ci = cdf.Percentile(5), cdf.Percentile(95) stderr = RMSE(means, mu) mu@ sigmaî ®⇠– \ $ (hypothetical) ✓t‰. nt \¯ l0\ ¥⌘D ! \ ‡¥| +ê‰. m@ ®X ‹ÿD ⇠â\ ü⇠‰. ‰à ⇠ı` L»‰, ¸¥ƒ ®⇠| ƒ ‹ÑÏ–⌧ n⌧ ✓D Ë| \¯ …‡ xbar| ƒ∞\‰. 1000à ®X‹ÿX‡ ò⌧, î ✓ ÑÏ cdf| ƒ∞\‰. ∞¸ ¯º ??– ò¿ò à‰. ÑÏ| î ✓X \— ÑÏ (sampling distribution) |‡ Äx‰. Ã} ⇠ıt⌧ ‰ÿD ƒç\‰t, î ✓t º»ò ¿TXî¿ Ù Ï ‰. \— ÑÏ …‡t ✓(hypothetical value) µ@ ‰∞ ]‰. 0|⌧, …‡ <\ ‰ÿt ıD ∞ú\‰î X¯‰. 1000å ⇠ı\ ƒ–î • @ ✓t 82 kg, • p ✓t 98 kgt‰. t î⌅ hXXî î î ✓t 8 kg Ã| (t àD ⇠ à‰î Ét‰. \— ÑÏ| î}Xî P ¿ T\ )ït à‰. • \ $( (Standard error SE)î …‡ <\ î ✓t º»ò (t à D¿ ! Xî !ƒ‰. ®X ‰ÿ»‰, $( x̄ µ| ƒ∞X‡ ò⌧ ⌅ …‡⌧Ò$(– ⌧Ò¸(root mean squared error, RMSE)D à ƒ∞ \‰. ¡0 ⌧–⌧î µ 2.5 kgt ⌧‰. 4. \— ∏X (Sampling bias) 97 • ‡∞ l⌅ (confidence interval, CI)@ \— ÑÏ| ¸¥ƒ D(\ Ïh ` î⌅ ⌧‰. | ‰¥, ‡∞ l⌅ 90%î 5à¯Ä0 95௠1Ñ⌅⇠ î⌅ ⌧‰. ¡0 ⌧–⌧, 90% CIî (86, 94) kg ⌧‰. \ $(@ ‡∞l⌅@ ⇣\ <ŸX –út0ƒ X‰. • ÖÖ \ $((standard error)@ \ ∏((standard deviation)| <Ÿ \‰. \ ∏(î ! …– ¥¨\ ¿Ÿ1D 0 \‰; ¡0 ⌧–⌧, ‡ ¥| ¥⌘X \ ∏(î 7.5 kgt‰. \ $(î î ✓– ¥¨\ ¿Ÿ1 D 0 \‰. ¡0 ⌧–⌧, \¯ 9 ! – 0⇠\ …‡X \ $(î 2.5 kg t‰. (t⇣D 0µXî )ï@, \¯ l0 ù h– 0|, \ T ëDƒ‰; \ ∏(î ¯⌥¿ J‰. $(î ⇣⇣ • 90% U`\ ‰⌧ ®⇠ µ 90% ‡∞l⌅ ¥– ç\‰‡ › X‰ \‰. ¨⌅åƒ, tÉ@ ¨‰t D»‰. t@ ⇡@ ¸•D X$‡ \‰t, †t à )ï(Bayesian method)D ¨©t| \‰.(– ëê E, Think BayesD 8p). \— ÑÏî ‰x »8– \ ıt‰; Ã} ‰ÿD ⇠ı\‰t, î ✓t º»ò ¿T` Éx¿ Ù| ⌧‹h<\h î ✓t º»ò ‡∞`Ã\ ¿ Ù| ⌧ı\‰. ‡∞ l⌅¸ \ $(î \— $(à …T\‰î ÉD 0µXî Ét ⌘î X‰; â, ®—Ë |Äà ! h<\h ›0î $(. \— ÑÏ ‰x $(| $ÖX¿î Jî‰. ‰x $(î \— ∏X(sampling bias)@ ! $( (measurement error) Ïh⇠‡ ‰L X ¸⌧‰. ⌧4 \— ∏X (Sampling bias) êÙ8lÌ– ‡¥| ¥⌘ ‡–, ƒ‹– p¸X‡ àî Ï1 …‡ ¥⌘D L‡ê \‰‡ Xê. Ï1 \ \¯D Ë| ¥⌘D ! Xî » †É ⇡¿î J‰. ⌅Ë\ H@ “⌅T \— (telephone sampling)”t Ét‰; â, ⌅Tà8Ä –⌧ ÑX à8| Ë|, ⌅TX‡, 1x Ï1¸ µTXÏ, ¥⌘t º»x¿ p¨ Xî Ét‰. ⌅T \—@ ÑÖ\ \ƒ à‰. | ‰¥, \¯t ⌅Tà8 ⌅Tà8Ä– Ò¨⌧ ¨å<\ m\⌧‰. ¯ò⌧ ⌅T ∆î ¨å(…‡Ù‰ T ú`¿ ® tî ¨å)¸ ⌅Tà8Ä– Ò¨⇠¿ J@ ¨å(Ë, T Äê| ⇠ àî ¨å)@ ⌧x⌧‰. ⇣\, Æ ‹⌅– —<\ ⌅T| xå ⇠t, ¡•D ƒ ¨åt \¯– 98 ⌧ 8 •. î (Estimation) àD •1@ ⌅¥‡‰. ¯¨‡ Ã} ⌅T– Qı\ ¨åà \¯<\ îú\‰ t, ⌅T| ı©<\ ¨©Xî ¨åD \¯<\ \ îú` É ⇡‰. ⇠Ö, ‰≈, l ‹® ⇡@ îxt ¥⌘¸ (t à‰t( (t àD ÔX‰.), p¨ ∞¸ ¥ªå‡¿ •D D ⇠ à‰. tÏ\ 8⌧| \— ∏X (sampling bias)|‡ Äx‰. \–Xt \—¸ (sampling process)X \ π1t0 L8t‰. tÏ\ \— ¸ @ ⇣\ ê0 ›(self-selection)– Ë}\p |ÖX \— ∏X ‰. |Ä ¨å@ »8– ıD pÄ\‰. ¯¨‡ Ã} pÄXî Ω•t ¥⌘¸ (⌧‰t, ∞¸–ƒ •D ⌅ ⇠ à‰. »¿…<\, ¥⌘D ! X0Ù‰, ¥⌘t º»x¿ $8\‰t, ∞¸ UX ¿ JD ⇠ƒ à‰. Ã} ‰⌧ ¯x ¥⌘– à∏X‰t, Ï¿¥ ƒ¿⇠î Qıê p(ƒ ¥⌘D ,¨pò ¥¥¿ƒ ®x‰. ¯¨‡ ®‡ Qıê ƒ¿t ⇠î É @ D»‰. t@ ⇡@ D U1t ! $( (measurement error) ¨@ ⌧‰. î …D Ù‡` L, \— $(| …TX0 ⌅t⌧ \ $( 9@ ‡∞l⌅, 9@ ®P Ù‡Xî Ét ©\‰. X¿Ã, \— $(î Ë¿ $(X Ë¿ Xò| –t‡, ÖÖ • p Ét D»|î ÉD 0µXî Ét ⌘îX‰. ⌧5 ¿⇠ÑÏ (Exponential distributions) \àT î åÑD ‹ƒtÙê. ê ¿⇠ÑÏ\, ‰L– \¯t à‰. »Lç– ÑÏ| Xò ¸P– P‡ à‰. [5.384, 4.493, 19.198, 2.790, 6.122, 12.844] ¡0 ÑÏ ®⇠ lî 4«t|‡ › Xòî? |⇠ <\ ¿⇠ÑÏ …‡@ 1/l‰. ¯ò⌧ Ì∞t⌧ ‰LD ›` ⇠ à‰. L = 1/ x̄ L@ lX î …t‰. ¯¨‡ Ùµ ‰x î …¸ ‰t‰; ⇣\ \∞î …(maximum likelihood estimator)t‰. (http://wikipedia.org/wiki/ Exponential_distribution#Maximum_likelihood 8p). ¯ò⌧, Ã} U Xå l î! U`D ˘ TX$‡ \‰t, Lt ò )•t ⌧‰. X¿Ã, x̄ t¡⇣t t¨Xî Ω∞ tX¿ J‰î ÉD L‡ à‰. ¯ò⌧, L ƒ Ÿ|\ 8⌧| ë‡ à‰‡ ¡\‰. 6. µ8⌧ 99 \¯ ⌘⌅⇠– 0⇠\ HD ›` ⇠ à‰. ¿⇠ ÑÏ ⌘⌅⇠î ln(2)/lt‰. ‰‹ Ì∞t⌧ ƒ∞Xt, î …D ‰L¸ ⇡t X\‰. Lm = ln(2)/m Ï0⌧, m@ \¯ ⌘⌅⇠‰. t‰ î … 1•D ‹ÿX0 ⌅t⌧, \— ¸ D ®X ‹ÿ` ⇠ à‰. def Estimate3(n=7, m=1000): lam = 2 means = [] medians = [] for _ in range(m): xs = np.random.exponential(1.0/lam, n) L = 1 / np.mean(xs) Lm = math.log(2) / thinkstats2.Median(xs) means.append(L) medians.append(Lm) print('rmse L', RMSE(means, lam)) print('rmse Lm', RMSE(medians, lam)) print('mean error L', MeanError(means, lam)) print('mean error Lm', MeanError(medians, lam)) l = 2\ ‰ÿD Xt, L RMSEî 1.1 t ⌧‰. ⌘⌅⇠ 0⇠ î … Lm , RMSE î 1.8 t ⌧‰. ‰ÿ<\Ä0 L t MSE| \åTàî¿ Ñ⌅` ⇠ ∆‰. X¿Ã ¥ƒ Lm Ù‰ T ã@ Ô X‰. ¨⌅åƒ P î … ®P ∏X à‰. L– t …‡ $(î 0.33; Lm – t … ‡ $(î 0.45 ‰. ¯¨‡ ¥ê Ƀ mt ù h– 0| 0 <\ ⇠4X¿ Jî‰. x̄î ÑÏ …‡X à∏ î … 1/lÑt D»‰. ⌧6 L‰. X¿Ã, L@ lX à∏ î …@ µ8⌧ ‰L µ8⌧– t⌧, estimation.pyD ı¨t⌧ ‹ë` ⇠ à‰. tı@ chap08soln.py |– ò@à‰. Exercise 8.1 tà •–⌧, µ| î Xîp x̄ @ ⌘⌅⇠| ¨©à‡, x̄ MSE X\D ∞úhD LD»‰. ⇣\, s| î Xîp S2 @ Sn2 1 D ¨©à‡, S2 @ ∏•⇠»‡, Sn2 1 @ à∏•ÑD LD»‰. 100 ⌧ 8 •. î (Estimation) ¨\ ‰ÿD ‰ât⌧, x̄@ ⌘⌅⇠ µX ∏•⌧ î ✓ÑD LD¥|. ⇣\, 9@ Sn2 1 MSE X\D ∞úXî¿ Ä¨X|. S2 Exercise 8.2 ®⇠ l = 2| î ¿⇠ÑÏ–⌧ \¯ n = 10 ⌧| îú\‰‡ Xê. ‰ÿD 1000à ®X‹ÿX‡ î ✓ LX \¯ ÑÏ| ƒ›T\‰. î ✓X \ $(@ 90% ‡∞l⌅D ƒ∞X|. ‰x n ✓D î ‰ÿD ⇠ıX‡, n ✓¸ \ $(| ƒ›T\‰. Exercise 8.3 X§@ ïl⇡@ §Ï åÑ–⌧ ›⇣ ¨t ‹⌅@ ¥\ ¿⇠ | 0x‰. ¯ò⌧ åÑ–⌧ \ t ›⇣\ ËD !h<\h ›⇣D î ` ⇠ à‰. t î ¸ @ ›⇣ ¨t ‹⌅D \—Xî ɸ }⌅ ‰t‰. ¯ò⌧ ëŸ)ïD ¥¥Ù‰. åÑ˘ Ë\ ›⇣` lamD xê\ ‡, ⌅¥ ‹⌅t 1 åÑ Ω¸` LL¿ ›⇣ ¨t ‹⌅D ›1h<\⌧ åÑD ®X‹ÿX‡ ò⌧, ›⇣\ ⇣⇠| ⇠XXî h⇠| ë1X|. Œ@ åÑD ®X‹ÿX‡, lam î ✓D ƒ∞Xî ⇣‰x h⇠| ë1X|. •X‡ ò⌧ …‡ $(@ RMSE| î ✓D t@ ⇡@ )›<\ Ëî Ét ∏•⇣DL? î ✓– \ \¯Ñ Ï@ 90% ‡∞l⌅D ƒ›TX‹$. \ $(î º»x ? lam ✓D låXt, \—$(– 4®|t ›8L? ⌧7 • î ©¥ ¨⌅ (estimation): \¯–⌧ ÑÏ ®⇠| î Xî ¸ . • î … (estimator): ®⇠| î Xîp ¨©⇠î µƒ…. • ⌅ …‡⌧Ò$( (mean squared error, MSE): î $( !ƒ. • ⌧Ò¸ …‡⌧Ò$( (root mean squared error, RMSE): MSE ⌧Ò¸< \ |⇠ x $( ‹®| ÄT X¯Xå \⌅. • \∞î … (maximum likelihood estimator, MLE): ⇣î ✓D ƒ∞Xî î …. • ,| É ⇡@ • (î …X) ∏X (bias of an estimator): ⇠ı⇠î ‰ÿD …‡º L, ‰⌧ ®⇠ ✓Ù‰ í@ 9@ Æ@ î …X Ω•1. • \— $( (sampling error): ∞– X\ ¿Ÿ¸ \ ⌧ \¯ l0 L8– î ✓– ›0î $(. 7. ©¥ ¨⌅ • \— ∏X (sampling bias): ®—ËD î ✓– ›0î $(. 101 \X¿ ªXî \— ¸ L8– • ! $( (measurement error): pt0| ⇠—X‡ 0]Xî Ä U1 L8– î ✓– ›0î $(. • \— ÑÏ (sampling distribution): Ã} ‰ÿD Œt ⇠ı\‰t ›0î µƒ… ÑÏ. • \¯ $( (standard error): î ✓X RMSE\ \— $( (X¿Ã ‰x $(î ⌧x) L8– ›0î ¿Ÿ1D …T\‰. • ‡∞l⌅ (confidence interval): Ã} ‰ÿD Œt ⇠ıXt î … î⌅| \⌅Xî l⌅. ¡ 102 ⌧ 8 •. î (Estimation) ⌧9• (Hypothesis testing) $Ä tà •–⌧ ¨©⇠î T‹î hypothesis.py– à‰. T‹| ‰¥\‹X‡ ë ≈Xî É– \ Ùî ??D 8p\‰. ⌧1 ⌅µ ing) $Ä (Classical hypothesis test- NSFG–⌧ pt0| –…Xt⌧, ´¯ Dt@ ´¯ Dà Dt‰ ⌅ (t| Ï ht⌧ á ¿ “x ®¸ (apparent effects)”| $‰. ¿ L¿ at ¯ \ tÏ\ ®¸| D‰ ‰; tà •–⌧ t| Ä \‰. ‰Ë‡ê Xî ¸¯ x »8@ \¯–⌧ ¯ ®¸ T p ®—Ë–⌧ ò¿† Éx ‰. | ‰¥, NSFG \¯–⌧ ´¯ Dt@ ´¯ Dt Dà Dt‰– \ …‡ ч 0⌅– (t| $‰. L‡ê Xî É@ t ®¸ ¯m Ï1– \ ƒ \ (t| ⇠ Xî¿ 9@, ∞à \¯–⌧ ›®ú Ét–‰. <T ¿4 $ Ä (Fisher null hypothesis testing), $tà <¥® X¨∞ t`(Neyman-Pearson decision theory), †tà î`(Bayesian inference)1 D Ïht⌧ »8D l1Xî )ït á ¿ à‰. Ï0 ⌧‹Xî É@ ÄÑX ¨ åt ‰4–⌧ ¨©Xî 8 ¿ )ïX |ÄÑ<\ ⌅µ $ Ä (classical hypothesis testing)t|‡ ê ëÖ\ Ét‰. ⌅µ $ Ä X © @ ‰L »8– ıXî Ét‰. “\¯¸ Ö1\ ®¸ ¸¥L‰t, ∞à ¯ ®¸| ©ƒXî U`t º»x ?” ‰L– »8– ı D Xî )ït à‰. 1 †tà î`– \ ÄT Œ@ Ùî ƒçt⌧ ú⌅⇠î Think Bayes| 8p\‰. 104 ⌧ 9 •. $Ä (Hypothesis testing) • ´à¯ ˃î Ä µƒ… (test statistic)D ›t⌧ x ®¸ l0| …T\‰. NSFG ⌧–⌧, Ö1\ ®¸î ´à¯ Dt@ ´¯ Dà Dt‰ ¨t– ч 0⌅– (t ⌧‰. ¯ò⌧, Ä µƒ…– \ ê §Ï¥ ›t P —Ë ¨t– …‡ (t ⌧‰. • Pà¯ Ëƒî ¿4 $ (null hypothesis)D XXî É<\, Ö1\ ®¸ ¨‰t D»|î – 0⇠\ ‹§\ ® t‰. NSFG ⌧–⌧, ¿4 $@ ´¯ Dt@ ´¯ Dà Dt‰ ¨t– (t ∆‰ ⌧‰; â, P —Ë Ñ‡ 0⌅@ Ÿ|\ Ñω. • 8௠˃î p-✓(p-value)D ƒ∞Xî É<\, Ã} ¿4 $t ¨‰t |t Ö1\ ®¸| ¸ U`✓t ⌧‰. NSFG ⌧–⌧, …‡– ‰⌧ (t | ƒ∞X‡ ò⌧, ¿4 $ Dò–⌧ (t| lå 9@ T lå ¸ U`D ƒ∞\‰. • »¿… ˃î ∞¸| t Xî Ét‰. Ã} p-✓t Ɖt, ®¸– µƒ X1 (statistically significant)t à‰‡ \‰. ∞à ⌧›` É ⇡ ¿ J‰î X¯ ⌧‰. t Ω∞ T p ®—Ë–⌧ ®¸ ò¿† É ⇡‰‡ î`\‰. t ¸ X \¡(logic)@ ®⌧(contradiction)– X\ ùÖ¸ ¨X‰. ⇠Y Ö⌧ (mathematical statement) A| ùÖX0 ⌅t, |‹ <\ A p”t|‡ \‰. Ã} t ®⌧D tLå ⇠t, A î ¨‰ 8t¥| \‰‡ ∞`∏‰. ¨Xå, “®¸ ¨‰ (This effect is real)” ⇡@ $D Ä X0 ⌅t⌧, | ‹ <\ ®¸ ∆‰‡ \‰. tÉt ¿4 $t‰. t – 0⇠t⌧, x ®¸ U`D ƒ∞\‰. tÉt p-✓t‰. Ã} p-✓t ë‰t, ¿4 $t ¨‰t D– É ⇡‰‡ ∞`∏‰. ⌧2 HypothesisTest thinkstats2–î ⌅µ à‰. ‰L– tò§ X $Ä lp| \⌅Xî HypothesisTest tò§ à‰. class HypothesisTest(object): def __init__(self, data): self.data = data self.MakeModel() self.actual = self.TestStatistic(data) 2. HypothesisTest 105 def PValue(self, iters=1000): self.test_stats = [self.TestStatistic(self.RunModel()) for _ in range(iters)] count = sum(1 for x in self.test_stats if x >= self.actual) return count / iters def TestStatistic(self, data): raise UnimplementedMethodException() def MakeModel(self): pass def RunModel(self): raise UnimplementedMethodException() HypothesisTestî î¡ Ä® tò§\ Tÿ‹ á⌧– \ D⌅\ X@ ‰x Tÿ‹| ⌅\ ꨰ0(place-keeper) 0• ⌧ı\‰. HypothesisTest– 0⇠ \ ê› tò§î __init__@ PValue D ¡ç ‡, TestStatistic, RunModel, ¯¨‡ ›5X<\ MakeModel Tÿ‹| ⌧ı\‰. __init__@ \ ¥§ ›X pt0ƒ D‰x‰. MakeModel 8út⌧ ¿ 4 $D \⌅D lïX‡ ò⌧, pt0| TestStatistic– ⌅ÏX‡ \¯ ® ¸ l0| ƒ∞\‰. PValueî ¿4 $ Dò–⌧ x ®¸ U`D ƒ∞\‰. ‰⌧ ¿⇠\ iters D îp ‰â` ®X ‹ÿ ü⇠‰. ´à¯ â@ ®X ‹ÿ pt0| ›1X‡, Ä µƒ…D ƒ∞X‡, test_stats– •\‰. ∞¸î !⌧ Ä µƒ… self.actual@ Ÿ|Xpò p test_stats – àî D(t‰. ⌅Ë\ ⌧2 \, 250à Ÿ⌅D X8⌧ ^t 140å, ∑t 110å òT‰‡ X ê. t ∞¸– 0 XÏ, Ÿ⌅– ∏X àî¿ XÏ`¿ƒ ®x‰; â, ÄT ^t t ò, É ⇡‰. t $D Ä X0 ⌅t⌧, U`D ƒ∞t⌧ Ã} Ÿ⌅t – ı X‰t, ¯ (t àî¿ ¥¥¯‰. class CoinTest(thinkstats2.HypothesisTest): def TestStatistic(self, data): heads, tails = data test_stat = abs(heads - tails) return test_stat def RunModel(self): 2 x© úò: MacKay, Information Theory, Inference, and Learning Algorithms, 2003. 106 ⌧ 9 •. $Ä (Hypothesis testing) heads, tails = self.data n = heads + tails sample = [random.choice('HT') for _ in range(n)] hist = thinkstats2.Hist(sample) data = hist['H'], hist['T'] return data ®⇠ dataî ⇠ ›t‰: ^t +ê, ∑t +ê. Ä (t‰. ¯ò⌧ self.actual@ 30 t‰. µƒ…@ X ¨t ✓ RunModel@ Ÿ⌅t – ı X‰‡ X‡ Ÿ⌅X¿0| ®X ‹ÿ\‰. 250 à Ÿ⌅X¿0 \¯D ›1X‡, Hist| ¨©t⌧ ^t¸ ∑t ü⇠| ƒ⇠X‡ ò⌧, ⇠ ›D ⇠X\‰. t⌧ t|` |@ CoinTest x§4§T X‡, PValue| 8ú\‰. ct = CoinTest((140, 110)) pvalue = ct.PValue() ∞¸î } 0.07 t ⌧‰. Ã} Ÿ⌅t ı X‰t, 30 Ã| (tî tà– } 7% U`\ 0 ` ⇠ à‰. tÏ\ ∞¸| ¥ªå t t| `Lî? µ¡ уX‰. Ã} p-✓t 5%Ù‰ ‰t, ®¸ J‰t, ⇠ \ › \‰. @\, 5% µƒ X1X X t|‡ › X‡; ¯⌥¿ X¿Ã, 5% ›@ ë⌅ t‡, (ò⌘– ¥¥Ù†¿Ã) p-✓@ Ä µƒ…¸ ¿4 $ ® – Xt1t à‰. ¯ò⌧, p-✓t \ ! <\ › X¿î –D| \‰. p-✓D t h– ॠê î⌅Xî É@ p-✓ l0– 0| ϨXî Ét‰: Ã} p-✓t 1%Ù‰ ë‰t ®¸ ∞– X\ É| É ⇡¿î J‰; Ã} p✓t 10%Ù‰ l‰t, ®¸î ∞<\ $Ö ⇠ àD É ⇡‰. p-✓t 1%¸ 10% ¨t|t, Ωƒ✓<\ › t|\‰. ¯ò⌧, ¡0 ¨@| µt⌧î Ÿ⌅– ∏X àî¿ ∆î¿ pt0 %\ ùp| ¸¿î ª\‰‡ ∞`∏‰. ⌧3 …‡ (t Ä means) (Testing a difference in Ä ` • |⇠ x ®¸⌘X Xò P ¯˘ ¨t …‡ (t‰. NSFG pt 0–⌧ ´à¯ Dt– \ …‡ ч0⌅t }⌅ T 8»‡, …‡ ú∞ ¥⌘@ }⌅ T »‰. t⌧ tÏ\ ®¸ µƒ <\ X x¿ ¥¥Ùê. t ⌧–⌧, ¿4 $@ P —Ë– \ ÑÏ Ÿ|X‰î Ét‰. ¿4 $ D ® TXî \ )ï@ ⌧Ù(permutation)– X\ Ét‰; â, ´à¯ Dt@ 3. …‡ (t Ä (Testing a difference in means) ´¯ Dà Dt‰– ò¨\‰. 107 \ ✓D QD⌧ § ¥⌧, P —ËD XòX p —Ë<\ class DiffMeansPermute(thinkstats2.HypothesisTest): def TestStatistic(self, data): group1, group2 = data test_stat = abs(group1.mean() - group2.mean()) return test_stat def MakeModel(self): group1, group2 = self.data self.n, self.m = len(group1), len(group2) self.pool = np.hstack((group1, group2)) def RunModel(self): np.random.shuffle(self.pool) data = self.pool[:self.n], self.pool[self.n:] return data dataî \ ‹ §\ ✓ (t‰. ‹ §î —Ët ⌧‰. Ä µƒ…@ …‡– ॠMakeModel@ —Ë l0 n¸ mD 0]X‡ —ËD ⇠ t(NumPy) 0Ù self.pool– ∞i\‰. RunModel@ iŸ✓(pooled value)D § ‡ P —Ë n¸ m<\ º⌧⌧ ¿4 $D ®X ‹ÿ\‰. m¡ ¯⌥¿Ã, RunModel–⌧ ⇠X⇠î ✓@ ! pt0@ Ÿ|\ ›t‰. ч 0⌅– (t| Ä X0 ⌅t⌧, ‰LD ‰â\‰. live, firsts, others = first.MakeFrames() data = firsts.prglngth.values, others.prglngth.values ht = DiffMeansPermute(data) pvalue = ht.PValue() MakeFramesî NSFG pt0| }‡, ®‡ ¡ú∞, ´¯ Dt, ´¯ Dà D t‰D \Xî pt0⌅ ÑD ⇠X\‰. ч 0⌅D ⇠ t(NumPy) 0Ù \ îúX‡, pt0\ DiffMeansPermute– ⌅ÏX‡, p-✓D ƒ∞\‰. ∞¸ î } 0.17\ X¯Xî î } 17% ƒ !⌧ ®¸– (t| ¡` ⇠ à‰. ¯ò⌧, ®¸ µƒ <\ XX¿ J‰. HypothesisTest–î PlotCdf àîp Ä µƒ… ÑÏ| o<\ ¯∞‰. ! ®¸ l0| ò¿¥î å… ¸ 108 ⌧ 9 •. $Ä (Hypothesis testing) ¯º 9.1: ¿4 $ Dò …‡Ñ‡0⌅ (t CDF. ht.PlotCdf() thinkplot.Show(xlabel='test statistic', ylabel='CDF') ¯º ??– ∞¸ 0.17t‰. à‰. CDFî 0.83–⌧ ! (t@ P(Xîp, p-✓X Ù⇠ shows the result. The CDF intersects the observed difference at 0.83, which is the complement of the p-value, 0.17. Ã} ú› ¥⌘<\ Ÿ|\ Ñ D ‰â\‰t, ƒ∞⌧ p-✓@ 0 t‰; 1000 à ‹ÿ ƒ–, ®X‹ÿ@ ∞T ! (t 0.12 lbs Ù‰ p ®¸| ∞úX¿ ª\ ‰. ¯ò⌧, p < 0.001 ò$‡, ú› ¥⌘– (tî µƒ <\ XX‰‡ ∞`∏‰. ⌧4 ‰x Ä µƒ… (ther test statistics) \ X Ä µƒ…D ‡tî É@ 4® »8D Xê–– Ï$ à‰. | ‰¥, Ã} (⌧ »8t ´à¯ Dt– t⌧ ч 0⌅t ‰x¿– \ Ét|t, ^ –⌧ ⇠âàX ɸ ⇡t, …‡– t (t ✓D Ä Xî Ét X¯ à‰. Ã} ´à¯ Dt ¶å ú›Xî Ω•t à‰‡ › ` t à‰t, (t✓ X ✓D ËX¿ Jî‰; ‡– ‰L Ä µƒ…D ¨©\‰. class DiffMeansOneSided(DiffMeansPermute): 5. ¡ Ä (Testing a correlation) 109 def TestStatistic(self, data): group1, group2 = data test_stat = group1.mean() - group2.mean() return test_stat DiffMeansOneSided@ DiffMeansPermute–⌧ MakeModel@ RunModelD ¡ ç î‰; |\ (tî TestStatistic (t– ✓D ËX¿ Jî‰î Ét‰. t X ÄùD Ë! (one-sided) Äùt|‡ \‰. \–Xt, (t ÑÏX Ë!tà ‡$X0 L8t‰. ^ Ä @ ëΩD ¨©X0 L8– ë! (two-sided) Äùt|‡ \‰. t Ñ< Ä – t⌧, p-✓@ 0.09 ‰. |⇠ <\ Ë! Ä – Ä – \ p-✓X } ⇠t‰. <` ÑÏ ®ë– Ï$à‰. \ p-✓@ ë! Ë! $, ´¯ Dt ¶å ‹¥ú‰î Ét ë! $Ù‰ ÄT l¥ t‰. ¯ò⌧ p-✓t T ë‰. X¿Ã, T \ – p(ƒ, (tî µƒ <\ X t¿ J‰. Ÿ|\ ⌅ ÑÃl(framework)| ¨©t⌧ \ ∏(– (tƒ Ä ` ⇠ à ‰. ?? –⌧ ´à¯ Dt ¶å 9@ h¨ ú∞` É⇡@ ùp| |Ä ÙX‰. ¯ò⌧, \ ∏( ÄT t Ét|î $D 8∏ ⇠ à‰. ‰L– t $D ‹ÿXî )ït à‰. class DiffStdPermute(DiffMeansPermute): def TestStatistic(self, data): group1, group2 = data test_stat = group1.std() - group2.std() return test_stat tÉ@ Ë! Ä xp t î $t ´à¯ Dt —Ë– \ \ ∏( Ë¿ ‰t‰î Ét D»| T í‰î Ét‰. p-✓t 0.09\, µƒ <\ X t¿ J‰. ⌧5 ¡ Ä (Testing a correlation) ¡0 ⌅ ÑÃl| ¨©t⌧ ¡ ƒ Ä ` ⇠ à‰. | ‰¥, NSFG pt0 K–⌧, ∞® òt@ ú› ¥⌘ ¨t ¡ ƒî } 0.07 t‰. òt Œ@ ∞® Dt T ¥⌘t ò î Éò¸ Ùx‰. X¿Ã t ®¸ ∞– X\ É|L î? Ä µƒ…<\, <¥® ¡ D ¨©à¿Ã, §<¥Ã ¡ ƒ Ÿ|Xå Ÿë\ ‰. Ã} ëX ¡ ƒ\ !Xî i¨ |p à‰t, Ë! Ä D ` ⇠ƒ 110 ⌧ 9 •. à‰. X¿Ã, ¯ t â\‰. ∆0 L8–, ¡ (Hypothesis testing) $Ä ✓D ¨©t⌧ ë!Ä D ⇠ ¿4 $@ ∞® 9¸ ú› ¥⌘ ¨t– ¡ ƒ ∆‰î Ét‰. !✓D § ¥⌧, ∞® 9¸ ú› ¥⌘ ÑÏ ⇡¿Ã ¿⇠ ¨t– (t ∆î 8¡D ®X ‹ÿ` ⇠ à‰. class CorrelationPermute(thinkstats2.HypothesisTest): def TestStatistic(self, data): xs, ys = data test_stat = abs(thinkstats2.Corr(xs, ys)) return test_stat def RunModel(self): xs, ys = self.data xs = np.random.permutation(xs) return xs, ys dataî \ ‹ §‰. TestStatistic <¥® ¡ RunModelt xs| § ‡ ®X‹ÿ\ pt0| ⇠X\‰. ‰L– pt0| }¥ ‰t‡, ‹ÿD ⇠âXî T‹ ✓D ƒ∞\‰. à‰. live, firsts, others = first.MakeFrames() live = live.dropna(subset=['agepreg', 'totalwgt_lb']) data = live.agepreg.values, live.totalwgt_lb.values ht = CorrelationPermute(data) pvalue = ht.PValue() subset xê\ dropna| ¨©t⌧ Dî\ ¿⇠ X ⌘–⌧ ∞!⌧ âD ĉ. ‰⌧ ¡ ƒ⇠î 0.07t‰. ƒ∞⌧ p-✓@ 0 t‰; 1000 à ⇠ı\ §–, • p ®X ‹ÿ ¡ ƒ⇠ p-✓@ 0.04‰. ¯ò⌧, !⌧ ¡ ƒ⇠ ëD¿|ƒ, µƒ X1t à‰. “µƒ X1 (statistically significant)”t m¡ ®¸ ⌘îXpò, ‰4–⌧ X t|î X¯î D»|î ÉD ¡0 ⌧ ¡0 ‹®‰. Ë¿ <\ ⌧›` É ⇡¿ Jî‰î X¯‰. ⌧6 D( Ä (Testing proportions) t¿x| ¥ \‰‡ i‹‰. ¯p ‡ \Öt D§¥ƒ ¸¨⌅| ¨© X‡ à‰‡ ©X ¡– ,$ìî‰; â, ‰x ΩÙ‰ \Ω tt T Œt ò$ƒ] 6. D( Ä (Testing proportions) 111 ¿ \ ¸¨⌅. ¸x•t ¸•Xî ¨0ºD ¥ÏX‡ ¸¨⌅| U⇠à‰. X¿ Ã, t⌧ ¸¨⌅ D§¥L‰î ÉD ¸x•t ùÖt| \‰. ¸¨⌅| 60à X8⌧ ‰L¸ ⇡@ ∞¸| ª»‰. Value 1 Frequency 8 2 9 3 4 19 5 5 6 8 11 …‡ <\ ¸¨⌅ ✓@ 10à) ò, É<\ ¡⌧‰. pt0K–⌧, ✓ 3 t 0 \ ÉÙ‰ T ê¸ ò$‡, ✓ 4î \ ò$î É ò¸ Ùx‰.X¿Ã, t (t µƒ <\ X |Lî? $D Ä X0 ⌅t⌧, ✓– \ 0 Hƒ, 0 Hƒ@ ! Hƒ (t, ⌅ ¥ ✓ (t| ƒ∞` ⇠ à‰. ¡0 ⌧–⌧, ¸¨⌅ t@ 60 å ⌘–⌧ 10 å ò, É<\ ¡⌧‰; t 0 ✓–⌧ ∏( -2, -1, 9, -5, -2, 1 t ⌧‰; ¯ò⌧ ⌅¥ ✓ (tî 20 t ⌧‰. ∞à tÏ\ (t| º»ò ê¸ ©ƒ`L? ‰L– ¡0 »8– ıXî HypothesisTest Ñ<t à‰. class DiceTest(thinkstats2.HypothesisTest): def TestStatistic(self, data): observed = data n = sum(observed) expected = np.ones(6) * n / 6 test_stat = sum(abs(observed - expected)) return test_stat def RunModel(self): n = sum(self.data) values = [1, 2, 3, 4, 5, 6] rolls = np.random.choice(values, n, replace=True) hist = thinkstats2.Hist(rolls) freqs = hist.Freqs(values) return freqs pt0î Hƒ ¨§∏\ \⌅⌧‰: !✓@ [8, 9, 19, 5, 8, 11]t ⇠‡ ; 0 Hƒî ®P 10 t‰. Ä µƒ…@ ✓ (tX it‰. ¿4 $@ ¸¨⌅ ı X‰î É<\ values –⌧ ú⇠ \¯D QD ®X ‹ÿ\‰. RunModel @ Hist| ¨©t⌧ ƒ∞X‡, Hƒ ¨§∏| ⇠X\‰. t pt0– \ p-✓@ 0.13<\ X¯Xî î Ã} ¸¨⌅ ı X‰t, ⌅ ¥ ! ∏(| } 13% •1<\ ¸ É<\ 0 ⌧‰. ¯ò⌧, Ö1\ ®¸î µƒ <\ XX¿ J‰. 112 ⌧ 9 •. ⌧7 $Ä (Hypothesis testing) (Chi-squared tests) tt⌧Ò Ä t⌅ –⌧ Ä µƒ…<\ ∏(| ¨©à‰. X¿Ã, D(D Ä Xîp, tt⌧Ò µƒ…D ¨©Xî Ét ÄT |⇠ t‰. 2 c =  i Ï0⌧, Oi î Ei )2 (Oi Ei !Hƒ, Ei î 0 Hƒ‰. ‰L– tl T‹ à‰. class DiceChiTest(DiceTest): def TestStatistic(self, data): observed = data n = sum(observed) expected = np.ones(6) * n / 6 test_stat = sum((observed - expected)**2 / expected) return test_stat ( ✓D ËX0 Ù‰)∏(| ⌧ÒXt p ∏(– T Œ@ ⌘X| ‰. expected\ ò⌅å ⇠t ∏(| \ T\‰. t Ω∞– 0 Hƒ ®P ⇡D⌧ ®¸ ∆‰. tt⌧Ò µƒ…D ¨©\ p-✓@ 0.04\ ∏(| ¨©t⌧ ª@ 0.13Ù‰ƒ Ë , ë‰. Ã} 5% у⇣D Ï Xå › \‰t, ®¸ µƒ <\ XX‰‡ ‡$` ⇠ à‰. X¿Ã, Ä P ¿| ®P ‡$t⌧, ∞¸î Ωƒ – à‰‡ –` ⇠ à‰. ¸¨⌅ ꧥL‰î •1D 0⌧X¿î J¿Ã, ‡⌧⌧ ¨0 º–å ƒ ⇣∞D X¿î JD Ét‰. ¡0 ⌧î ⌘î\ ⇣D ‹t ‰: p-✓t Ä µƒ…¸ ¿4 $ ® – Ï $à‰. ¯¨‡ LL\, tÏ\ ›– 0| ®¸ µƒ <\ X1D pò ¿ Jpò ∞ ⌧‰. ⌧8 ‰‹ ´¯ Dt t• ^–⌧ ´à¯ Dt@ ´¯ Dà Dt‰– \ ч 0⌅D ¥¥$‡, …‡¸ \ ∏(– Ö1\ (tî µƒ <\ X t¿ J‰‡ ∞`»‰. X ¿Ã, ?? –⌧ …‡ 0⌅ ÑÏ–⌧ Ö1\ (t| á ¿ $‰. πà, 35¸–⌧ 43¸( î⌅–⌧ ¯⌥‰. tÏ\ (t µƒ X1t àî¿ ¥¥Ù0 ⌅t ⌧, tt⌧Ò µƒ…– 0⇠\ Ä D ¨©` ⇠ à‰. ‰L T‹î ^ ⌧\Ä0 îå| ∞i\‰. 8. ‰‹ ´¯ Dt 113 class PregLengthTest(thinkstats2.HypothesisTest): def MakeModel(self): firsts, others = self.data self.n = len(firsts) self.pool = np.hstack((firsts, others)) pmf = thinkstats2.Pmf(self.pool) self.values = range(35, 44) self.expected_probs = np.array(pmf.Probs(self.values)) def RunModel(self): np.random.shuffle(self.pool) data = self.pool[:self.n], self.pool[self.n:] return data pt0î P⌧ ч 0⌅ ¨§∏\ \⌅⌧‰. ¿4 $@ \¯ ®P Ÿ|\ Ñ Ï–⌧ îú⇠»‰î Ét‰. MakeModel@ hstackD ¨©t⌧ P \¯D iŸ (pooling)t⌧ ÑÏ| ® T\‰. ¯¨‡ ò⌧, RunModel@ iŸ \¯D § ‡ tÉD P ÄÑ<\ º,<\h ®X ‰ÿ pt0| ›1\‰. MakeModel@ ⇣\ values| XXîp, ¨©` ¸( î⌅ ⇠‡, expected_probsî iŸ ÑÏ(pooled distribution)–⌧ ✓X U`t‰. ‰L– Ä µƒ…D ƒ∞Xî T‹ à‰. # class PregLengthTest: def TestStatistic(self, data): firsts, others = data stat = self.ChiSquared(firsts) + self.ChiSquared(others) return stat def ChiSquared(self, lengths): hist = thinkstats2.Hist(lengths) observed = np.array(hist.Freqs(self.values)) expected = self.expected_probs * len(lengths) stat = sum((observed - expected)**2 / expected) return stat TestStatistic@ ´¯ Dt@ ´¯ Dt …D ƒ∞X‡ T\‰. Dà Dt‰– \ tt⌧Ò µƒ ChiSquaredî ч 0⌅ ‹ D D, ৆¯®D ƒ∞X‡, observed| ƒ ∞Xîp, tî self.values– ¡QXî Hƒ ¨§∏‰. 0 Hƒ ¨§∏| ƒ 114 ⌧ 9 •. $Ä (Hypothesis testing) ∞X0 ⌅t⌧, \¯ l0– ¯¨ ƒ∞⌧ U` expected_probsD Ò\‰. ¯Ï t tt⌧Ò µƒ… statD ⇠X\‰. NSFG pt0– t⌧, ⌅¥ tt⌧Ò µƒ…@ 102\ ¯ ê¥\ Œ@ ÉD X ¯X¿î Jî‰. X¿Ã, 1000å ⇠ı ƒ–, ¿4 $ Dò–⌧ • p Ä µƒ…@ 32‰. ! tt⌧Ò µƒ…t ¿4 $ Dò–⌧ •` É ⇡¿ J‰ ‡ ∞`¥∞‰. ¯ò⌧, x ®¸î µƒ X1t à‰. tà ⌧î tt⌧Ò Ä \ƒ| ÙÏ ‰: P —Ë ¨t– (t à‰î ÉD ò¿¥¿Ã, (t 4«x¿– \ l¥ x ¥§ Ƀ –X¿î ª\‰. ⌧9 $X (Errors) ⌅µ x $ Ä –⌧ Ã} p-✓t π у⇣, Tà 5% Ù‰ Dò|t, µƒ t1t à‰‡ ¯‰. tÏ\ (î P ¿ »8D àÏ(‰. • Ã} ®¸ ‰⌧\ ∞<\ x\‰t, ®¸| òªt⌧ X <\ ‡$ ` U`@ º»ò L? t U`t p” ë1` (false positive rate)t‰. • Ã} ®¸ ƒ‰t|t, $ Ä t ‰(` U`t p” L1` (false negative rate)t‰. •1@ º»ò L? t p” ë1`@ ¡ <\ ƒ∞X0 }‰: Ã} у⇣t 5% tt, p” ë1` @ 5% ‰. ‰L– t à‰. • Ã} ‰⌧ ®¸ ∆‰t, ¿4 $@ ¨‰t‰. ¯ò⌧ ¿4 $D ®X ‹ÿh<\h, Ä µƒ… ÑÏ| ƒ∞` ⇠ à‰. t ÑÏ| CDFT |‡ Äx‰. • ‰ÿD ‰à ‰â` L»‰, Ä µƒ… t | ªîp, CDFT –⌧ QD∏ Ét‰. ¯¨‡ ò⌧, p-✓D ƒ∞Xîp, CDFT –⌧ ò( ú⇠ ✓t t| ¸Xî U`t‰. ¯ò⌧ 1 CDFT (t)t ⌧‰. • Ã} CDFT (t) 95%Ù‰ l‰t, p-✓t 5% Ù‰ ë‰; â, Ã} t 95 ௠1Ñ⌅⇠| ¸Xt ¯⌥‰. ¯¨‡, CDFT –⌧ ‡x ✓t 95௠1Ñ⌅⇠| º»ò ê¸ ¸`L? pX 5% ‰. ¯ò⌧, 5% у⇣D ¡⌧‰. ƒ $ Ä D ⇠â\‰t, p” ë1t 20à ⌘ 1à 10. Ä % (Power) ⌧ 10 115 Ä % (Power) p” L1`@ ƒ∞X0 T ¥5‰. \–Xt, ‰⌧ ®¸ l0– XtX‡ ¡ <\î ‰⌧ ®¸ l0| ®t0 L8t‰. \ ¿ ›5X@ ¡ ®¸l0 (hypothetical effect size) pt<\ p” L1`D ƒ∞Xî Ét‰. | ‰¥, Ã} P —Ë ¨t– ! (t UX‰t, ! \¯D ®—Ë ® <\ ¨©t⌧ ®X ‹ÿ pt0\ $ Ä D ‰â` ⇠ à‰. def FalseNegRate(data, num_runs=100): group1, group2 = data count = 0 for i in range(num_runs): sample1 = thinkstats2.Resample(group1) sample2 = thinkstats2.Resample(group2) ht = DiffMeansPermute((sample1, sample2)) pvalue = ht.PValue(iters=101) if pvalue > 0.05: count += 1 return count / num_runs FalseNegRateî —Ë»‰ Xò) P ‹ § ‹\ pt0| î‰. Ë⌅| ‰à à L»‰, —Ë–⌧ ú⇠ \¯D QD⌧ $ Ä D ‰âh <\h ‰ÿD ®X ‹ÿ\‰. ¯¨‡ ò⌧ ∞¸| UxX‡ p” L1 /⇠| ƒ⇠\‰. Resample@ ‹ §| D ı– îú\ Ÿ| 8t| ƒ \¯D Qî‰. def Resample(xs): return np.random.choice(xs, len(xs), replace=True) ‰L– ч 0⌅D Ä Xî T‹ à‰. live, firsts, others = first.MakeFrames() data = firsts.prglngth.values, others.prglngth.values neg_rate = FalseNegRate(data) ∞¸ } 70%\ X¯Xî î Ã} …‡ ч0⌅– ‰⌧ (t 0.078 ¸| t, t \¯ l0| ƒ ‰ÿ@ µ 70% L1 Ä D ∞ú` É<\ 0 ⌧‰. t ∞¸î ÖÖ ‰tå ⌧‹⌧‰: Ã} ‰⌧ (t 0.078 ¸|t, µ 30% à ë1 Ä D 0 t| \‰. t “ U\ ë1` (correct positive rate)”t Ä 116 ⌧ 9 •. $Ä (Hypothesis testing) Ä %(power)t|‡ Ät‡, ÖÖ “¸⇣ƒ (sensitivity)”|‡ \‰. ¸¥ƒ l 0 ®¸| –¿Xî Ä •%D ⇠ \‰. t ⌧–⌧, Ä @ Ë¿ 30% •1Ã<\ ë1 ∞¸| ∞ú\‰(‰‹, (t 0.078 ¸|î ÉD Xt). Ωÿ ïY<\, 80% Ä %t ©›` ⇠ àî ⇠ t‰. ¯ò⌧ t Ä @ “Ä % Äq (underpowered)”X‰‡ –` ⇠ à‰. |⇠ <\ L1 $ Ä t P —Ë ¨t– (t ∆‰î ÉD X¯Xî É@ D»‰; ‡– Ã} (t à‰t, 4 ëD⌧ \¯l0\ –¿` ⇠ ∆‰î ÉD ⌧‹\‰. ⌧ 11 ⇠ı (Replication) tà •–⌧ ‹\ D»‰. $Ä ¸ @ ƒ à –Xt ã@ @(good practice)î ´¯, ‰⌘ Ä (multiple tests)D ⇠âà‰. Ã} $ Ä Xò| ‰â\‰t, p”ë1(false positive) •1@ } 20à ⌘– \à<\ ⇠© •X‰. X¿Ã, 20à Ä D ⇠â\‰t, ÄÑ ¥ƒ \à@ p”ë1D ¡t|\‰. X¯, –…¸ Ä – Ÿ|\ pt0KD ¨©à‰. Ã} ©… pt0KD –… X‡, Ä|¥ ®¸| ⌧¨X‡ ò⌧, ®¸ X1t àî¿ Ä \‰t, p” ë1(false positive)D ›1` •1t à‰. ‰⌘ Ä D Ù¡X0 ⌅t⌧, p-✓ у⇣D p ` ⇠ à‰. (https://en. wikipedia.org/wiki/Holm-Bonferroni_method 8p). 9@, \ pt0K@ –…, ‰x pt0K@ Ä <\ pt0| Ñ`t⌧ P 8⌧| ‰ ⇠ à‰. áá Ñ|–⌧î tÏ\ @ îl⇠‡ àpò ¥ƒ •$\‰. X¿Ã, t Ï\ 8⌧| T5 <\ ú⇣⌧ ∞¸| ⇠ı(replication)Xt⌧ ‰Ëî Ƀ T X‰. ⌅ <\, »\¥ ∞¸| Ù‡Xî ´à¯ |8@ –… <\ ‡$⌧‰. »\¥ pt0\ ∞¸| ⇠ıXî t¥¿î |8@ Uù (confirmatory)<\ ‡$⌧‰. ıPmåƒ, t •–⌧ ∞¸| ⇠ı` 0å à‰. tE ´à¯ ⇣@ 2002D– ò( NSFG ¨tt 6– 0⇠à‰. 2011D 10‘ CDC 2006–2010– ‰‹\ x 0– 0⇠\ î pt0| ú‹à‰. nsfg2.py –î t pt0| }‡ ⌧\ T‹ Ïh⇠¥ à‰. »\¥ pt0K<\ Ñ \ ∞¸î ‰L¸ ⇡‰. • …‡ ч 0⌅– (tî 0.16 ¸‰. p < 0.001 <\ µƒ (–¯ pt0K 0.078¸@ DP⌧‰.) X1t à‰. 12. µ 8⌧ 117 • ú› ¥⌘– (tî 0.17 lbs@ DP⌧‰.) ¥‹\ p < 0.001 t‰. (–¯ pt0K 0.12 • ú› ¥⌘¸ ∞® 9 ¨t ¡ ƒ⇠î 0.08 \ p < 0.001 t‰. (0.07¸ DP⌧‰.). • tt⌧ÒÄ @ p < 0.001 <\ µƒ pt0ƒ ¯⌥‰.). X1t à‰. p < 0.001 (–¯ î}Xt, –¯ pt0–⌧ µƒ X1t àî ®‡ ®¸ –⌧ƒ ⇠ı⇠»‰. ¯¨‡ ч0⌅– (tî –pt0–⌧ »\¥ pt0K–⌧î T ‰L‡ X1t à‰. ⌧ 12 t µ8⌧– »\¥ pt0K X1t ∆»<ò µ 8⌧ \ tı@ chap09soln.py |– ò@à‰. Exercise 9.1 \¯l0 ù h– 0|, $Ä %@ ù Xîp, ®¸ ‰ ⌧Xt ÄT ë1ÑD X¯\‰. ⇠ \, \¯l0 ⌅¥‰t, Ä %@ $¨ ®¸ ‰⌧\‰‡ XT|ƒ \ ë1| É ⇡‰. t ëŸ)›D p¨Xîp, NSFG pt0–⌧ ‰x |Ä pt0| î Ä D ‰‹\‰. thinkstats2.SampleRowsD ¨©t⌧, pt0⌅ Ñ– ÑX\ â|Ä| ›\‰. \¯l0 ⇣åh– 0| Ä p-✓–î 4® |t |¥òî ? ëX Ä D ∞úXî \å \¯l0î º»x ? Exercise 9.2 ?? –⌧, ⌧Ù\ ¿4 $D ®X‹ÿà‰; â, !⌧ ✓D »X ⌅¥ ®—ËD \Xî Éò¸ ‰Ë»‡, 4ë⌅\ ®—ËX l1–D P —Ë – 0 à‰. H@ \¯D ¨©t⌧ ®—Ë ÑÏ| î X‡ ò⌧, ÑÏ\Ä0 ÑX \¯D îúXî Ét‰. t ¸ D ¨\—(resampling)t|‡ Äx‰. ¨\—D l ⌅Xî á ¿ )›t à¿Ã, • Ë⌧\ É⌘ Xò ?? ò¸ !⌧ ✓–⌧ ı–)›<\ \¯D îúXî Ét‰. DiffMeansPermute–⌧ ¡ç ‡, ⌧ÙÙ‰ ¨\—D l⌅Xî RunModelD X X(override)Xî tò§ DiffMeansResampleD ë1X‹$. t ® D ¨©t⌧ ч0⌅¸ ú›¥⌘ ¨t (t| Ä X‹$. t ® t ∞¸– º»ò •D ¸î ? 118 ⌧ 9 •. ⌧ 13 • ©¥ ¨⌅ $ Ä (hypothesis testing): x X1t àî¿ ∞ Xî ¸ . • Ä (Hypothesis testing) $Ä ®¸(apparent effect) µƒ… (test statistic): ®¸ l0| • ¿4 $ (null hypothesis): x 0⇠\ ‹§\ ®x. • p-✓ (p-value): ®¸ µƒ …TXîp ¨©⇠î µƒ…. ®¸ ∞– X\ Ét|î – ∞– Xt⌧ ⌧›\ U`. • µƒ X1 (statistically significant): ∞– Xt⌧ ⌧›` É ⇡¿ J‰t, ®¸î µƒ X1t à‰. • ⌧Ù Ä (permutation test): ƒ∞Xî )ï. • ¨\¯ Ä (resampling test): t⌧ p-✓D ƒ∞Xî )ï. ! pt0K–⌧ ⌧ÙD ›1t⌧ p-✓D ! pt0K–⌧ ı–<\ \¯D ›1 • ë! Ä (two-sided test): “®¸ l0 ‰ º»ò p ?” | ;î Ä . ë<\ 9@ L<\ • Ë! Ä (one-sided test): “®¸ l0 ò p ?” | ;î Ä . Ÿ| Ä8\ • tt-⌧Ò Ä (chi-squared test): Ä ¨©Xî Ä . µƒ…<\ tt-⌧Ò µƒ…D ! ®¸Ù ! ®¸Ù‰ º» • p” ë1 (false positive): ¨‰t D– L, ®¸ ¨‰t|î ∞`. • p” L1 (false negative): ∞t D– L ®¸ ∞ L8t|î ∞`. • Ä % (power): Ω $t ¨‰| L, t| ¨‰\⌧ ∞ ` U`t‰. Ä %t 90%|‡ Xt, Ω $t ¨‰Ñ–ƒ àlX‡ ¿4 $D D ›` U`@ 10%t‰.3 3 http://ko.wikipedia.org/wiki/êšĂìăȚëăě 8p ⌧ 10 • \å⌧Ò (Linear least squares) tà •–⌧ ¨©⇠î T‹î linear.py– à‰. T‹| ‰¥\‹X‡ ë≈Xî É– \ Ùî ??D 8p\‰. ⌧1 \å⌧Ò i (Least squares fit) ¡ ƒ⇠î ƒ Ä8@ ƒ| ! X¿Ã 0∏0î ! X¿ Jî‰. 0∏0 | ! Xî )ït á ¿ à‰; • T\ )ït \å⌧Ò i (linear least squares fit)t‰. “ i(linear fit)”@ ¿⇠ ¨t ƒ| ® TXî (line)t‰. “\å⌧Ò (least squares)” i@ ¸ pt0 ¨t …‡⌧Ò$( (mean squared error, MSE)| \åTXî Ét‰. Xò ‹ § ys àîp, ⇣ ‰x ‹ § xs h⇠\ \⌅X‡ê \‰‡ ê. Ã} xs, ys@ ∏ inter, 0∏0 slope ¨t– ƒ à‰t, inter + slope * x[i]t É<\ ¡⌧‰. X y[i] X¿Ã, ¡ t DΩX¿ J‰t, !@ Ë¿ ¸¨(approximation) ⌧‰. –⌧ ⇠¡ ∏((vertical deviation), â î((residual)î ‰L¸ ⇡‰. res = ys - (inter + slope * xs) î(î ! $( ⇡@ U` îå(random factor), 9@ L¿ ªXî DÑX î å(non-random factor) L8|¿ ®x‰. | ‰¥, Ã} ¥⌘D ‡• h⇠\ !\‰t, ¯¿ îåî ›µ , ¥Ÿ, ‡¥ D Ïh` ⇠ à‰. Ã} ®⇠ inter@ slopet òª⇠t, î(î T ‰ƒ‰. ¯ò⌧ ®⇠î î(| \åT\‰î Ét ¡ <\ X¯ à‰. î( ✓, î( ⌧Ò, 9@ î( 8⌧Ò \åT| ‹ƒt¸Ã X‰; X¿Ã, • T\ ›@ ⌧Ò î( iD \åTXî Ét‰. sum(res**2)). 120 ⌧ 10 •. \å⌧Ò (Linear least squares) \ ¯ÙLî? 8 ¿ ã@ t @ \ ¿ \ ⌘î\ t à‰. • ⌧ÒXå ⇠t ë⇠ î(@ L⇠ î(| Ÿ|Xå ò¨Xî 0•t àîp, Ùµ –Xî Ét‰. • ⌧Ò@ p î(– T Œ@ ⌘X| ¸¿Ã, • p î( Ω∞–î ¯⌥å Œ@ ⌘X| ¸¿î Jî‰. m¡ ¸ƒ x • Ã} î( ¡ ƒ ∆‡ …‡¸ ¡⇠ (X¿Ã L$¿¿ J@ ¯¿) Ñ ∞D ƒ ‹ÑÏ|t, \å⌧Ò i@ ⇣\ inter@ slopeX \ ∞ ƒî …t‰. https://en.wikipedia.org/wiki/Linear_regression. • ⌧Ò î(| \åTXî inter@ slope ✓@ ®¸ <\ ƒ∞ ⇠ à‰. ƒ∞ ®(1(computational efficiency)t ˘t\ 8⌧– • i\ )ïD ›Xî ÉÙ‰ T ⌘î` L »¿… t X¯à‰. t⌧î T t¡ ¯Ù¿î J‰. ¯ò⌧, ⌧Ò î( \åTXî ,x Éx¿Ã ‡$\‰. | ‰¥, xsD ¨©t⌧ ys ✓D !X$‡ \‰t, ¸‰ î Xî Ét ¸å î Xî ÉÙ‰ T ãD ⇠ƒ (T ò` ⇠ƒ) à‰. t Ω∞, î(– \ D ©h⇠| ƒ∞X‡ ⌅¥ D©, sum(cost(res))D \åT\‰. X¿Ã, \å⌧Ò iD ƒ∞Xî Ét `t‡, }‡, ÖÖ ©Ñà Ãq§˝‰. ⌧2 l⌅ (Implementation) thinkstats2– \å⌧ÒD ‹Xî ⌅Ë\ h⇠ à‰. def LeastSquares(xs, ys): meanx, varx = MeanVar(xs) meany = Mean(ys) slope = Cov(xs, ys, meanx, meany) / varx inter = meany - slope * meanx return inter, slope LeastSquaresî ‹ § xs@ ysD xê\ ‡ î \ ®⇠ inter@ slopeD ⇠X\‰. Ÿë)ï– \ ê8\ ¨m@ ˘¨t∏ 8p. http://wikipedia. org/wiki/Numerical_methods_for_linear_least_squares. thinkstats2î FitLine| ⌧ıXîp, inter @ slopeD xê\ § xs– t⌧ i D ⇠X\‰. D⌧ ‹ 2. l⌅ (Implementation) ¯º 10.1: 121 i\ ∞®9¸ ú›¥⌘ ∞⇣ƒ. def FitLine(xs, inter, slope): fit_xs = np.sort(xs) fit_ys = inter + slope * fit_xs return fit_xs, fit_ys t h⇠| ¨©t⌧ ∞® 9 h⇠\ ú› ¥⌘– à‰. \ \å⌧ÒD ƒ∞` ⇠ live, firsts, others = first.MakeFrames() live = live.dropna(subset=['agepreg', 'totalwgt_lb']) ages = live.agepreg weights = live.totalwgt_lb inter, slope = thinkstats2.LeastSquares(ages, weights) fit_xs, fit_ys = thinkstats2.FitLine(ages, inter, slope) î \ ∏¸ 0∏0î D»‰ 6.8 lbs, 0.017 lbs t‰. tÏ ‹\ ✓D t X0î ¥5‰: ∏@ ∞® 9t 0 –⌧ ‡›D 0 ¥⌘xp, 8¡ X¯ ∆‡, 0∏0î 4 ëD⌧ }å tt ⇠¿ Jî‰. x = 0– ∏D ⌧‹Xî ‡–, ∏D …‡– ⌧‹Xî Ét ÖÖ ƒ¿t ⌧ ‰. t Ω∞–, …‡ òtî } 258t‡, 258 ∞®– \ …‡ Dt ¥⌘@ 7.3 ¥‹‰. 0∏0î D»‰ 0.27 (§(ounces) â, 10D»‰ 0.17 ¥‹ ⌧‰. ¯º ??– i ¸ hÿ ú› ¥⌘¸ 9D ∞⇣ƒ\ ÙÏ ‰. t@ ⇡t, ƒ x¿, i t ƒ| ò¿¥î ã@ ® x¿| … Xîp, ¯ºD ¯$Ùî É@ ã@ › t ⌧‰. 122 ⌧ 10 •. ¯º 10.2: ⌧3 \å⌧Ò (Linear least squares) i î(. î( (Residuals) ⇣‰x ©\ Ä @ î(| ƒ∞Xî h⇠ à‰. oXÏ ¯¨î Ét‰. thinkstats2–î î(| def Residuals(xs, ys, inter, slope): xs = np.asarray(xs) ys = np.asarray(ys) res = ys - (inter + slope * xs) return res Residualsî ‹ § xs@ ys, î \ inter@ slope| xê\ i ¨t (t| ⇠X\‰. î‰. ‰⌧✓¸ î(| ‹ TX0 ⌅t⌧, ?? –⌧ ¥¥¯ ɸ ⇡t, Qıê| 9<\ 6 ‡, —Ë– 1Ñ⌅⇠| ƒ∞\‰. ¯º ??– 9 —Ë– \ 25à¯, 50 à¯, 75௠1Ñ⌅⇠ à‰. ⌘⌅⇠î ¡\ Éò¸ pX 0t‡, ¨Ñ⌅⇠ î ⌅î } 2 ¥‹‰. ¯ò⌧, Ã} ∞® 9D L‡ à‰t, 1 ¥‹ ¥–⌧ µ 50% •1<\ Dt ¥⌘D î!` ⇠ à‰. t¡ <\ t‰ ¡ t ……t⌧ î( úd(random)ÑD ò¿¥‡, …ât ⌧ î( Ñ∞t ®‡ 9 —Ë– t⌧ Ÿ|X‰î ÉD ò¿¥| \‰. ¨‰, ¡ @ …â– ]Ã⌧ ã‰; X¿Ã, }⌅X ·`(curvature)t à¥⌧ ƒ D ÑD ò¿∏‰. ¯¸–ƒ àlX‡, i@ ⌅Ë\ ® <\ π © – D»ƒ ò Äi\‰. 4. î (Estimation) ⌧4 î 123 (Estimation) ®⇠ slope@ interî \¯– 0⇠\ î ✓t‰; ‰x î ✓ò¸, \— ∏X, ! $(, \— $(– ⇠X¨0 }‰. ?? •–⌧ |X\ Éò¸, \— ∏Xî D \ \—(non-representative sampling)– Xt⌧, ! $(î pt0 ⇠— ¸ 0] $X– Xt⌧, \— $(î ⌅¥ ®—ËÙ‰ \¯D ! Xî ∞¸\ ⌧›\‰. \— $(| … X0 ⌅t⌧, “Ã} t ‰ÿD ‰‹ ‰â\‰t, î ✓– º »ò ¿Ÿ1t ¡ L?” tÏ\ »8– ®X‹ÿ ‰ÿD ƒâX‡, î ✓– \ \— ÑÏ| ƒ∞h<\h ı` ⇠ à‰. pt0| ¨\¯îú(resampling)X<\h ‰ÿD ®X‹ÿ` ⇠ à‰; â, !⌧ чD »X ⌅¥ ®—Ëx Éò¸ ò¨t⌧ !⌧ \¯–⌧ ı– îú )›<\ \¯D îú\‰. def SamplingDistributions(live, iters=101): t = [] for _ in range(iters): sample = thinkstats2.ResampleRows(live) ages = sample.agepreg weights = sample.totalwgt_lb estimates = thinkstats2.LeastSquares(ages, weights) t.append(estimates) inters, slopes = zip(*t) return inters, slopes SamplingDistributions h⇠î xê\ ¡ ú∞»‰ \ ⌅(row)\ ⌧ pt 0⌅ Ѹ ®X ‹ÿ ‰ÿ ü⇠, iters| xê\ î‰. ResampleRowsD ¨ ©t⌧ ! чD ¨\¯îú\‰. t¯ SampleRows| ¥¥$îp, pt0⌅ Ñ–⌧ 4ë⌅(random) âD ›\‰. thinkstats2î ⇣\ ResampleRows 0•ƒ ⌧ıXîp, –¯¸ Ÿ|\ l0 \¯D ⇠X\‰. def ResampleRows(df): return SampleRows(df, len(df), replace=True) ¨\¯îú ƒ–, ®X ‹ÿ \¯D ¨©t⌧ ®⇠| î \‰. ∞¸î ‹ § P⌧‰: î ∏¸, î 0∏0. \ $(@ ‡∞l⌅D ú%t⌧ \— ÑÏ| î}\‰. def Summarize(estimates, actual=None): mean = thinkstats2.Mean(estimates) stderr = thinkstats2.Std(estimates, mu=actual) cdf = thinkstats2.Cdf(estimates) 124 ⌧ 10 •. \å⌧Ò (Linear least squares) ci = cdf.ConfidenceInterval(90) print('mean, SE, CI', mean, stderr, ci) Summarizeî î ✓¸ ‰⌧✓ ‹ D xê\ î‰. î ✓ …‡, \ ¯¨‡, 90% ‡∞l⌅D ú%\‰. $(, ∏– t⌧, …‡ î ✓@ 6.83, \ $((SE)î 0.07, 90% ‡∞l⌅(CI) (6.71, 6.94)t‰. ÄT ⌅µ\ ›<\, î ∏ 0.0174, SE 0.0028, CI (0.0126, 0.0220) ⌧‰. t ‡∞l⌅ X\¸ ¡\ ¨t– pX P0 (tú‰. ¯ò⌧, ⌧µ x î ✓<\ ⇣|\‰. î ✓X \— $(| ‹ TX0 ⌅t⌧, i D ®P o<\ ¯¨‡, X å DÃ⌧ 9– t⌧ 90% ‡∞l⌅D o<\ ¯∞‰. ‰L– T‹ à‰. def PlotConfidenceIntervals(xs, inters, slopes, percent=90, **options): fys_seq = [] for inter, slope in zip(inters, slopes): fxs, fys = thinkstats2.FitLine(xs, inter, slope) fys_seq.append(fys) p = (100 - percent) / 2 percents = p, 100 - p low, high = thinkstats2.PercentileRows(fys_seq, percents) thinkplot.FillBetween(fxs, low, high, **options) xsî ∞® 9 ‹ §‰. inters@ slopesî SamplingDistributions–⌧ › 1⌧ î ®⇠‰. percent xêî oD º»X ‡∞l⌅<\ ¯¥ Éx¿ ò ¿∏‰. PlotConfidenceIntervalsî inter@ slope ›– t i D ›1X‡, ∞ ¸| ‹ § fys_seq– •\‰. ¯¨‡ ò⌧, PercentileRowsD ¨©t⌧ x ✓– t⌧ y ¡\¸ X\ 1Ñ⌅⇠| ›\‰. 90% ‡∞l⌅– t⌧, 5à ¯@ 95௠1Ñ⌅⇠| ›\‰. FillBetween@ P ¡ ¨t ı⌅D D∞î ‰ D ¯∞‰. ¯º ??–î ∞® 9– \ h⇠\ ú› ¥⌘– i⌧ · – \ 50% @ 90% ‡∞l⌅t à‰. lÌX ⇠¡Ì(vertical width)t \— $(– \ ®¸ | \⌅\‰; ®¸ …‡ ¸¿ ✓– t T ë‡, ˘Ë✓– t T l‰. ⌧5 iƒ (Goodness of fit) ® à», â iƒ (goodness of fit)| ! Xî )ït á ¿ à‰. • ⌅Ë\ )ï@ î(X \ ∏(‰. 5. iƒ (Goodness of fit) ¯º 10.3: inter @ slope \—$( L8–, l⌅ 50% @ 90%. 125 i – ¿Ÿ1D ò¿¥î ‡∞ Ã} !D ⌅t ® D ¨©\‰t, Std(res)î !X ⌧Ò¸ …‡⌧Ò $((root mean squared error, RMSE)‰. | ‰¥, Ã} ú› ¥⌘D î!X îp ∞® 9D ¨©\‰t, î! RMSEî 1.40 lbs ⌧‰. Ã} ∞® òt| ®x ¡‹–⌧ ú› ¥⌘D î!\‰t, î! RMSEî Std(ys)\, 1.41 lbs‰. ¯ò⌧, t ⌧–⌧ ∞® 9D L‡ àî É@ ¯‰ ¿ !%D •¡‹§¿ ª\‰. iƒ| ! Xî ⇣ ‰x )›@ R2 \ \0X‡, “R-⌧Ò(R-squared)”|‡ Ätî ∞ ƒ⇠ (coefficient of determination)‰. def CoefDetermination(ys, res): return 1 - Var(res) / Var(ys) Var(res)î ® D ¨©\ î! MSE t‡, Var(ys)î ® ∆î MSE ‰. ¯ ò⌧, D(t Ã} ® D ¨©\‰t ®å⇠î MSE ÄÑt‰. R2 î ® t ⌧pXî MSE ÄÑt ⌧‰. ú∞ ¥⌘¸ ∞® òt– t, R2 ✓@ 0.0047 <\, ∞® òt àî Ñ∞ } 0.5%à !\‰î X¯ ⌧‰. ∞ ƒ⇠@ <¥® ¡ ƒ⇠ ¨t– ⌅Ë\ ƒ Ã} r 0.8 9@ -0.8 t|t, R2 = 0.64 ⌧‰. ú› ¥⌘– à‰: R2 = r2 . | ‰¥, r@ R2 ÖÖ ƒ ƒ| …TXîp ¨© ¿|ƒ, !%(predictive power)– t⌧ t X0î }¿ J‰. ê ¨t\î, Std(res) ! à» D • ò \⌅\‰‡ ¯‰. πà, Ã} Std(ys)@ ⇠¥ \⌅⇠t ¯⌥‰. | ‰¥, SAT(¯m Y ÖY‹ÿ– ¨©⇠î \ m ‹ÿ) ¿˘1– t ⌧ ò0` L, ÖÖ ¨å‰@ SAT ⇣⇠@ ‰x ¿•(IQ) ! ✓ ¨t– ¡ D 126 ⌧ 10 •. \å⌧Ò (Linear least squares) ò0\‰. \ l– XXt, SAT ⇣⇠@ IQ ⇣⇠ ¨t– <¥® ¡ @ r = 0.72 <\, \ ¡ ò¸ Ùx‰. X¿Ã, R2 = r2 = 0.52 tÏ⌧ SAT ⇣⇠î IQ Ñ∞X Ë¿ 52%à $Ö\‰. IQ ⇣⇠î Std(ys) = 15 \ ‹T⌧‰. ¯ò⌧, >>> var_ys = 15**2 >>> rho = 0.72 >>> r2 = rho**2 >>> var_res = (1 - r2) * var_ys >>> std_res = math.sqrt(var_res) 10.4096 IQ !Xîp SAT ⇣⇠| ¨©Xî É@ RMSE| 15 ⇣–⌧ 10.4 ⇣<\ ⌅x ‰. ¡ ƒ⇠ 0.72 î RMSE | ⌅tîp Ë¿ 31% 0Ï\‰. Ã} ¡ ƒ⇠ RMSE ïå ⌧6 ⇣Ö <\ Ùx‰t, R2 t MSE ïå– T ò@ ¿\ !%– \ T ò@ ¿\‰. ® Ä ⇠‡, (Testing a linear model) ú› ¥⌘– \ ∞® 9 ®¸ ë‡, pX !%t ∆‰. ¯ò⌧, x ƒ (apparent relationship) – Xt⌧ •\ Éx ? i ∞¸| Ä Xî )ït á⌧ à‰. \ ›5X@ MSE– x ïå(apparent reduction) ∞– X\ Éx¿ Ä Xî Ét‰. t Ω∞– Ä µƒ…@ R2 t‡, ¿4 $@ ¿⇠ ⌅ ƒ ∆‰ ⌧‰. ?? –⌧ ∞® 9¸ ú› ¥⌘ ⌅ ¡ D Ä àD ò¸, ¿4 $D ⌧Ù(permutation)D µt⌧ ®X ‹ÿ` ⇠ à‰. ¨‰, R2 = r2 , t0 L8–, R2 Ë! Ä @ r ë! Ä ¸ ¡Q\‰. t¯ t Ä D ⇠âà‡, p < 0.001 |î ÉD ⌧¨à‰. ¯ò⌧, ∞® 9¸ ú› ¥⌘ ⌅ x ƒî µƒ X1t à‰‡ ∞`∏‰. ⇣ ‰x ⌘¸ï@ x 0∏0(apparent slope) ∞– X\ Éx¿ Ä Xî Ét‰. ¿4 $@ 0∏0 ‰⌧\ 0 t‰î Ét‰; t Ω∞–, ú› ¥⌘D … ‡ ¸ò– U`¿Ÿ(random variation)<\ ® T` ⇠ à‰. ‰L– t ® – \ HypothesisTest à‰. class SlopeTest(thinkstats2.HypothesisTest): def TestStatistic(self, data): ages, weights = data 6. ® Ä (Testing a linear model) 127 _, slope = thinkstats2.LeastSquares(ages, weights) return slope def MakeModel(self): _, weights = self.data self.ybar = weights.mean() self.res = weights - self.ybar def RunModel(self): ages, _ = self.data weights = self.ybar + np.random.permutation(self.res) return ages, weights pt0î 9¸ ¥⌘ ‹ §\ \⌅⌧‰. Ä µƒ…@ LeastSquares\ î ⌧ 0∏0‰. ¿4 $ ® @ ®‡ D0‰X …‡ ¥⌘¸ …‡– \ ∏(\ \⌅⌧‰. ®X ‹ÿ pt0| ›1X0 ⌅t⌧, ∏(| ⌧Ù\ 0XX‡, …‡– T\‰. ‰L– $ Ä D ⇠âXî T‹ à‰. live, firsts, others = first.MakeFrames() live = live.dropna(subset=['agepreg', 'totalwgt_lb']) ht = SlopeTest((live.agepreg, live.totalwgt_lb)) pvalue = ht.PValue() p-✓t 0.001 Ù‰ ë‰, ¯ò⌧ $¨ î ⌧ 0∏0 ⇡¿î J‰. ë¿Ã, ∞– X\ É ¿4 $D ®X ‹ÿh<\h p-✓D î Xî Ét ƒ©Xåî fi‰. X¿Ã, T ⌅Ë\ Ht à‰. t¯ ?? –⌧ 0∏0 \— ÑÏ| ƒ∞\ ÉD 0µ X|. t| ⌅t⌧, !⌧ 0∏0 fi‰‡ X‡ ¨\¯îú(resampling) <\ ‰ÿD ®X ‹ÿà‰. ¯º ??–î ?? ¸ ¿4 $ Dò–⌧ ›1⌧ 0∏0 ÑÏ–⌧ ò( 0∏0 \ — ÑÏ à‰. \— ÑÏ î ⌧ 0∏0 } 0.017 lbs/DD ⌘Ï<\ à‡, ¿4 $ Dò 0∏0 } 0 D ⌘Ï<\ à‰; X¿Ã, ¯ÉD ⌧xX‡ ÑÏî Ÿ|\‰. ÑÏî ⇣\ ?? –⌧ ¥¥Ùå t \ mt‰. ¯ò⌧, p-✓D P )›<\ î ` ⇠ à‰: • ¿4 $ Dò⌧ 0∏0 ! 0∏0| ¸` U`D ƒ∞\‰. • \—ÑÏ–⌧ 0∏0 0 tXx U`D ƒ∞\‰. (Ã} î 0∏0 L⇠|t, \— ÑÏ–⌧ 0∏0 0D ¸Xî U`D ƒ∞` Ét‰.) 128 ⌧ 10 •. \å⌧Ò (Linear least squares) ¯º 10.4: ¿4 $Dò ›1⌧ 0∏0 ÑÏ@ î ⇠¡ @ 0¸ ! 0∏0î 0.017 ¥‹/D. 0∏0– \ \— ÑÏ. P௠›5X@ T l¥p t î ¥ª‡ ¡ <\ ®⇠X \— ÑÏ| ƒ ∞X‡ê X0 L8t‰. ¯¨‡ \¯ l0 ë¿ J‡, ¯¨‡ î( ÑÏ 0 ∏¿ JX‰t ã@ ¸¨(approximation) ⌧‰. ¯Lp(ƒ, p-✓t P` Dî ∆0 L8–, ¥\ Ãq§˝‰. ‰L– \—ÑÏ| ¨©t⌧ 0∏0 p-✓D î Xî T‹ à‰. inters, slopes = SamplingDistributions(live, iters=1001) slope_cdf = thinkstats2.Cdf(slopes) pvalue = slope_cdf[0] ‰‹\à, p < 0.001t ò(‰. ⌧7 ⌘ ¨\¯îú (Weighted resampling) ¿ L¿ NSFG pt0| »X \ \¯x Éò¸ ‰Ë»‰. X¿Ã, ?? –⌧ ∏ \ É ⇡t, \ \¯@ D»‰. Xƒ <\ p¨î áá —ËD $Ñÿ ¡(oversampling) Xîp t î µƒ <\ X x ∞¸| ƒú` U`D ít0 ⌅t⌧‰; â, t‰ —Ë– t⌧ Ä %D •¡X0 ⌅t⌧‰. p¨$ƒ Œ@ © – t⌧ ©X¿Ã, \— ¸ D ‡$X¿ J‡, |⇠ ® —Ë– \ ✓D î Xîp \¯D ¨©` ⇠ à‰î ÉD X¯X¿î Jî‰. Qıê– t⌧, NSFG pt0î finalwgt ¿⇠ àîp, Qıê \X î |⇠ ®—Ë– ç\ ¨å +ê‰. t ✓@ \— ⌘X (sampling weight, â “ ⌘X (weight)”|‡ à∞‰. 7. ⌘ ¨\¯îú (Weighted resampling) 129 ⌧\, Ã} 3µ xl| ƒ ò|–⌧ 100,000 ÖD p¨\‰t, Qıêî 3,000 ÖD \\‰. Ã} \ —ËD 20 $Ñÿ ¡\‰t, $Ñÿ ¡⌧ —Ë – ¨å@ T @ ⌘X(} 1500) ⌧‰. $Ñÿ ¡D Ù X0 ⌅t⌧, ¨\¯îú(resampling)D ¨©` ⇠ à‰; â, \— ⌘X– D@Xî U`D ¨©t⌧ p¨êÖ⌧ \¯D îú\‰. ¯¨‡ ò⌧, î X$‡ Xî ÑX … Ù– t⌧ \— ÑÏ, \¯ $(, ‡∞l⌅ D ›1` ⇠ à‰. ⌧\, …‡ ú› ¥⌘D \¯ ⌘X| P‡, HP‡ î ` Ét‰. ?? –⌧, ResampleRows| ¥¥$‰. Ÿ|\ U`D â– P‡ pt0⌅ Ñ–⌧ âD îú\‰. t⌧ Ÿ|\ ÉD \— ⌘X– D@\ U`D ¨©t⌧ ⇠â` Dî à‰. ResampleRowsWeightedî pt0⌅ ÑD xê\ ‡, finalwgt– àî ⌘X– 0| âD ¨\¯ îúX‡, ¨\¯îú⌧ âD Ïh Xî pt0⌅ ÑD ⇠X\‰. def ResampleRowsWeighted(df, column='finalwgt'): weights = df[column] cdf = Cdf(dict(weights)) indices = cdf.Sample(len(weights)) sample = df.loc[indices] return sample weightsî ‹¨à‰; ‹¨à| T ¨\ ⌅XXî É@ xq§| ‰Q\‰. cdf–⌧ ✓@ xq§‡, U`@ ⌘X– D@\‰. ⌘X\ indicesî âxq§ ‹ §‰; sample@ ›⌧ âD Ù‡ àî pt0⌅ Ñ t‰. ı– \¯ îúD à0 L8–, Ÿ|\ ât \àt¡ ò, ⇠ à‰. t⌧, ⌘X| P‡, P¿ J‡ ¨\¯îú ®¸| DP` ⇠ à‰. P¿ J‡, ‰L¸ ⇡t \—ÑÏ| ›1\‰. ⌘X| estimates = [ResampleRows(live).totalwgt_lb.mean() for _ in range(iters)] ⌘X| Pt, ‰L¸ ⇡‰. estimates = [ResampleRowsWeighted(live).totalwgt_lb.mean() for _ in range(iters)] ‰L \– î}∞¸ ò@à‰. mean birth standard 90% CI weight (lbs) error Unweighted 7.27 0.014 (7.24, 7.29) Weighted 7.35 0.014 (7.32, 7.37) ⌧`⌧, ⌘X| T ®¸î ¿Ã 4‹`ÃX¿î J‰. J‡ î ⌧ …‡– (tî } 0.08 ¥‹, 1.3 (§‰. (t ⌘X| P‡, P¿ î ✓ \ $( 130 ⌧ 10 •. \å⌧Ò (Linear least squares) (0.014 ¥‹)Ù‰ ‰» <\ T l‰. hïXî î (tî ∞ X\ É@ D»|î Ét‰. ⌧8 îå– µ8⌧ t µ8⌧– \ tı@ chap10soln.ipynb |– ò@à‰. Exercise 10.1 BRFSS–⌧ ò( pt0| ¨©t⌧, log(¥⌘) D ‡•– \ \åêπ iD ƒ∞X|. ¿⇠⌘ Xò \¯ ¿X⌧ t@ ⇡@ ® – t⌧ î ⌧ ®⇠| ò¿¥î • ã@ )›@ ¥ªå Lî? Ã} ⌅p X ¥⌘D î!X$‡ \‰t, ‡•D Dî Ét º»ò ƒ¿t L? NSFG@ », ¿\, BRFSSî |Ä —ËD ¸‰\—(oversampling)X‡ Q ıê– t⌧ \— ⌘X Ù| ⌧ı\‰. BRFSS pt0–⌧, t˘ ⌘X– \ ¿⇠Ö@ totalwt‰. ⌘X| î, ¿ Jî ¨\—D ¨©t⌧, BRFSS – ò( …‡ Qıê ‡•, …‡– \ \ $(, 90% ‡∞l⌅D î X‹$. Ù ⌘X î ✓– º»ò •D ¸î ? ⌧9 • ©¥ ¨⌅ i (linear fit): ¿⇠ ¨t ƒ| ® TX$î ¡ . • \å⌧Ò i (least squares fit): î(⌧ÒiD \åTXî pt0K ® . • î( (residual): ‰⌧✓¸ ® ✓ ∏(. • iƒ (goodness of fit): ® t pt0– º»ò ò ôƒ. • ∞ ƒ⇠ (coefficient of determination): iXî¿– \ iƒ| ƒ…TX$î µƒ…. • \— ⌘X (sampling weight): \¯t ®—Ë ¥ê ÄÑD ò¿¥îp \¯ !¸ ⌧ ✓. \Xî¿ ⌧ 11 • å¿ (Regression) ^•–⌧ \å i@ å¿ (regression)X \ ¨@‰. å¿î ¥§ ÖXX p t0| ¥§ ÖXX ® –ƒ iXî T |⇠ x 8⌧‰. “å¿ (regression)” ©¥ ¨©@ ̨ ∞t‰; Ë¥X ¯ò X¯@î ⌅⌘ <\ ⌧‰. å¿Ñ X © @ Öç¿⇠ (dependent variables)|‡ à¨î ¿⇠—i¸ $ Ö¿⇠ (explanatory variables)|‡ à¨î ⇣ ‰x —i¿⇠ ¨t ƒ| 0 Xî Ét‰. ^•–⌧ Öç¿⇠\ ú› ¥⌘D !Xîp $Ö¿⇠\ ∞® 9D ¨©à ‰. Ë¿ Öç¿⇠ Xò $Ö¿⇠ƒ Xò|t, Ë⌧å¿(simple regression) ⌧‰. tà •–⌧î Xò t¡ $Ö¿⇠| î ‰⌘å¿(multiple regression)\ .®⌅‰. Ã} Öç¿⇠ Xòt¡t|t, ‰¿…å¿(multivariate regression)t ⌧‰. Ã} Öç¿⇠@ $Ö¿⇠ ⌅ ƒ tt, å¿ (linear regression) ⌧‰. | ‰¥, Öç¿⇠ yt‡, $Ö¿⇠ x1 ¸ x2 |t, ‰L¸ ⇡t å¿® D ë1` ⇠ à‰. y = b 0 + b 1 x1 + b 2 x2 + # Ï0⌧ b 0 î ∏, b 1 @ x1 ¸ ⌧ ®⇠, b 2 î x2 @ ⌧ ®⇠, ¯¨‡ #î U`¿Ÿ 9@ ‰x ¯¿ îx<\ x\ î(‰. y– \ ‹ § ✓¸ x1 ¸ x2 – \ ‹ § ✓t ¸¥¿t, #2 iD \åT Xî b 0 , b 1 , b 2 ®⇠| >D ⇠ à‰. t ¸ D Ùµ\å⌧Ò(ordinary least squares)t|‡ Äx‰. ∞@ thinkstats2.LeastSquare@ ¨X¿Ã, X ò t¡X $Ö¿⇠| ‰Ëƒ] |⇠T⇠»‰. ê8\ Ùî ˘¨t∏| 8p \‰. https://en.wikipedia.org/wiki/Ordinary_least_squares 132 ⌧ 11 •. å¿ (Regression) tà •–⌧ ¨©⇠î T‹î regression.py– à‰. T‹| ‰¥\‹X‡ ë ≈Xî É– \ Ùî ??D 8p\‰. ⌧1 StatsModels ^•–⌧ ≈1t ã@ Ë⌧ å¿® D l⌅\ thinkstats2.LeastSquares| ⌧‹à‰. ‰⌘å¿– t⌧ StatsModels\ ⌅X\‰. tl )§¿\ á ¿ ‹ å¿Ñ @ ‰x Ñ 0•D ⌧ı\‰. Ã} DòX‰(Anaconda)| ¨©X‡ à‰t, t¯ StatsModelst $X⇠¥ à‰; ¯⌥¿ J‰t, $Xt|`¿ ®x‰. ⌧\, StatModelsD ¿‡ ^• ® D ‰â\‰. import statsmodels.formula.api as smf live, firsts, others = first.MakeFrames() formula = 'totalwgt_lb ~ agepreg' model = smf.ols(formula, data=live) results = model.fit() statsmodels@ x0òt§(APIs) P⌧| ⌧ı\‰; “formula” APIî 8êÙ \ Öç¿T $Ö¿⇠| ›ƒ\‰. patsy|î l8(syntax)D ¨©\‰; ¡0 ⌧–⌧, ~ ∞ê |∏– Öç¿⇠@ $x∏– $Ö¿⇠| lƒ\‰. smf.olsî xê\ 8êÙ ı›¸ pt0⌅ Ñ live| ‡, ® D \⌅Xî OLS ¥| ⇠X\‰. ols î “ordinary least squares” }ê‰. fitTÿ‹î ® D pt0– sults| ⇠X\‰. iX‡ ∞¸| Ù‡ àî ¥ RegressionRe- ∞¸î ⇣\ ç1(attribute)<\ƒ ⌘¸ •X‰. params@ ‹¨à\ ¿⇠ÖD ®⇠– ‰Q\‰. ¯ò⌧, ‰L¸ ⇡@ ∏¸ 0∏0| ªD ⇠ à‰. inter = results.params['Intercept'] slope = results.params['agepreg'] î \ ®⇠î 6.83 @ 0.0175<\ LeastSquares\ î \ ɸ Ÿ|\‰. pvaluesî ‹¨à\ ¿⇠Ö¸ ⌧ p-✓D ‰Q\‰. ¯ò⌧ î \ 0∏0 µƒ <\ X\¿ ⇣Ä` ⇠ à‰. slope_pvalue = results.pvalues['agepreg'] agepreg@ ⌧ p-✓@ 5.7e-11 <\ ¡\ Éò¸ 0.001 Ù‰ ‰. results.rsquaredî R2 Ù| Ù‡ àîp 0.0047t‰. resultsî ⇣\ ⌅ ¥ ® ¸ ⌧ p-✓x f_pvalueƒ ⌧ıXîp R2 µƒ <\ X\ | ⇣ÄXî Ä ¸ ¨X‰. 2. ‰⌘å¿ (Multiple regression) 133 resultsî î( ‹ §x resid@ agepreg– ¡QXî fittedvaluesƒ ⌧ı\‰. results ¥î summary() Tÿ‹ƒ ⌧ıXîp, | \⌅\‰. i\ ✓ ‹ § ≈1t ã@ ›<\ ∞¸ print(results.summary()) X¿Ã (D¡) (⇠¿ƒ J@ Œ@ Ù| ú%\‰. ¯ò⌧ SummarizeResults\ à¨î T ⌅Ë\ h⇠| ¨©\‰. ‰L– ® ∞ ¸ à‰. Intercept agepreg R^2 0.004738 Std(ys) 1.408 Std(res) 1.405 6.83 0.0175 (0) (5.72e-11) Std(ys)î Ã} ¥§ $Ö¿⇠ ƒ¿∆t ú› ¥⌘D î!t| \‰t å Öç¿⇠ \ ∏( RMSE ⌧‰. Std(res)î Ã} î!– ∞® 9 Ù| H‰t å î( \ ∏( RMSE ⌧‰. t¯ ¥¥$Ôt, ∞® 9D Dî Ét ¯‰¿ !– •¡D 8$¿î Jî‰. ⌧2 ‰⌘å¿ (Multiple regression) ?? –⌧ ´¯ Dt ¥⌘t ´¯ Dà Dt‰ ¥⌘Ù‰ º¥ Ω•t à‡, ¯ ®¸ µƒ X 1t à‰î ÉD $‰. X¿Ã, t¡\ ∞¸\ t î ´ ௠Dt ¥⌘t T Õ‰‡ ` ⇠ àî ÑÖ\ T‰»ò(mechanism)@ ∆‰. ¯ò⌧ tÏ\ ƒ p”(spurious)x¿ Å X‰. ¨‰ t ®¸– \ •\ $Öt à0î X‰. ú› ¥⌘t ∞® 9– Xt \ ÉD $‰. ¯¨‡ ´¯ Dt ∞®î ´¯ Dà Dt ∞®Ù‰ T ¥¨‰î ÉD ¡` ⇠ à‰. ƒ∞ áà<\ ¡0 $Öt ¯ÙÔ\¿ ⇣Ä` ⇠ à‰. ¯¨‡ ò⌧, ‰⌘å¿| ¨©t⌧ ÄT ê8à p¨` Ét‰. < ¥⌘ (t º»ò p¿ ¥¥¯‰. diff_weight = firsts.totalwgt_lb.mean() - others.totalwgt_lb.mean() ´¯ Dtî 0.125 lbs, â 2 (§ Õ‰. ¯¨‡ 9 (tî ‰L¸ ⇡‰. diff_age = firsts.agepreg.mean() - others.agepreg.mean() ´¯ Dt ∞® òt 3.59 D T ⌦‰. ‰‹ \ ú›¥⌘– ¿T✓| ªî‰. ® D èå ⇠t, 9 h⇠ results = smf.ols('totalwgt_lb ~ agepreg', data=live).fit() slope = results.params['agepreg'] 134 ⌧ 11 •. å¿ (Regression) 0∏0î D˘ 0.175 ¥‹‰. Ã} 0∏0| 9 (t@ ÒXå ⇠t, ∞® 9 L8– ´¯ Dt@ ´¯ Dà Dt‰– \ ú› ¥⌘ …‡ (t| ª å⌧‰. slope * diff_age ∞¸î 0.063 <\ ! (tX } ⇠t‰. ¯ò⌧ † <\ ú› ¥⌘– ! (tî ÄÑ <\ ∞® 9 (t\ $Ö ⇠ à‰‡ ∞`∏‰. ‰⌘ å¿| ¨©t⌧, ƒ| ÄT ¥ƒ <\ –…` ⇠ à‰. live['isfirst'] = live.birthord == 1 formula = 'totalwgt_lb ~ isfirst' results = smf.ols(formula, data=live).fit() ´à¯ â@ isfirst|î »\¥ |¸(Ù)D ›1\‰. ´à¯ Dtî 8(True), ´à¯ Dt D»t pÚ(False)‰. ¯¨‡ ò⌧, $Ö¿⇠\ isfirst| ¨© t⌧ ® – i\‰. ‰L– ∞¸ à‰. Intercept isfirst[T.True] R^2 0.00196 7.33 -0.125 (0) (2.55e-05) isfirstî Ä∏(boolean)t0 L8–, olsî t ¿⇠| î¸ ¿⇠ (categorical variable)\ ò¨\‰. X¯Xî î ✓t 8(true)¸ p”(false) ⇡@ î ¸– çX0 L8– +ê\ ò¨⇠t H⌧‰î Ét‰. î ⌧ ®⇠î isfirst 8|L ú› ¥⌘– \ ®¸‰. ¯ò⌧ ∞¸ -0.125 lbs î ´à¯ Dt@ ´¯ Dà Dt‰ ⌅– ú›¥⌘ (t‰. 0∏0@ ∏t µƒ X1t à‰. X¯Xî î ∞<\ ⌧›\ É ⇡¿ 2 î J‰. X¿Ã, ® R ✓t ë‰. X¯Xî î isfirst ú›¥⌘ ¿Ÿ ¡˘ÄÑD $ÖX¿î ª\‰î Ét‰. ∞¸î agepreg@ D∑X‰. Intercept agepreg R^2 0.004738 6.83 0.0175 ‰‹ \à, ®⇠î µƒ (0) (5.72e-11) X1t à<ò, R2 ✓@ Ɖ. ¡0 ® @ ¿ L¿ ¥¥¯ ∞¸| ‰‹ Uxt ‰. X¿Ã, t⌧ ¿⇠ P⌧| #¥⌧ ® D i` ⇠ à‰. l8 ı› totalwgt_lb ~ isfirst + agepreg D ÖXt, ‰LD ªî‰: Intercept 6.91 isfirst[T.True] -0.0698 agepreg 0.0154 R^2 0.005289 (0) (0.0253) (3.93e-08) 3. D ƒ (Nonlinear relationships) 135 pi ® –⌧, isfirst– \ ®⇠î } ⇠ ëDL‰. X¯Xî É @ isfirstX x ®¸ ¨‰ agepreg<\ $Öt ⌧‰î Ét‰. ¯¨‡ isfirst– \ p-✓@ } 2.5%\, µƒ X1 Ωƒ ¡– à‰. ® – R2 ✓t }⌅ T l‰. 0|⌧ ¿⇠ P⌧ <êÙ‰ ú∞ ¥⌘– ¿Ÿ1D T Œt (X¿Ã ¯‰¿ Œ¿î J‰) $ÖXî ÉD ò¿∏‰. ⌧3 ƒ (Nonlinear relationships) D agepreg ¿⇠ 0ÏÑt D |¿ ®x‰î ÉD 0µXt, t ƒ– T Œ@ ÉD °D¥0 ⌅t⌧ ¿⇠ î | › t¸ ⇠ à‰. \ ¿ ›5X@ 9 ⌧Ò ÙD Ù‡ àî agepreg2 |¸(Ù)D ›1Xî Ét‰. live['agepreg2'] = live.agepreg**2 formula = 'totalwgt_lb ~ isfirst + agepreg + agepreg2' t⌧ agepreg@ agepreg2– i\‰. \ ®⇠| î h<\h, ®¸ <\ Ï< – Intercept 5.69 isfirst[T.True] -0.0504 agepreg 0.112 agepreg2 -0.00185 R^2 0.007462 (1.38e-86) (0.109) (3.23e-07) (8.8e-06) agepreg2 ®⇠ L⇠|⌧, Ï< ®ë¸ | 1D î‰. · t DòΩ )•<\, ¯º ??– ò@àî agepreg t( ® t ú› ¥⌘– T Œ@ ¿Ÿ1D $Ö\‰; isfirst– ®⇠ t ® –⌧ T ëDL‡, Tt¡ µƒ X1@ ∆‰. \ agepreg2 ò¸ ƒ∞⌧ ¿⇠| ¨©Xî Ét pt0– ‰m›¸ ‰x h⇠| iXî T\ )›t‰. t ¸ @ Ï⌅à å¿\ ⌅¸⇠îp t î ¿⇠ ‰x ¿⇠X D h⇠ ⇠î¿– ƒ∆t, Öç ¿⇠ $Ö¿⇠X h⇠t ⇠0 L8t‰. ‰L \– î}⌧ å¿∞¸ Model 1 Model 2 Model 3 Model 4 à‰. isfirst agepreg agepreg2 R2 -0.125 * – – 0.002 – 0.0175 * – 0.0047 -0.0698 (0.025) 0.0154 * – 0.0053 -0.0504 (0.11) 0.112 * -0.00185 * 0.0075 ¡0 \– |¸(Ù)@ $Ö¿⇠ tѸ ∞ ƒ⇠ R2 ‰. m©@ î \ ®⇠@ p-✓t ⌅8– ‰¥à‡, 0.001Ù‰ ë@ p-✓D \0X0 ⌅\ ƒ\ à‰. 136 ⌧ 11 •. å¿ (Regression) ú› ¥⌘– x (tî ¥ƒ ÄÑ <\ ∞® 9X (t\ $Ö⌧‰‡ ∞ `∏‰. ® – ∞® 9D Ïh` L, isfirst ®¸î T ëD¿‡, ît®¸î |¿ƒ ®x‰. ¡0 ⌧–⌧, ∞® 9t ⌧¥¿⇠ (control variable)\ Ì`D \‰; ® – agepreg ¿⇠| ÏhXå ⇠t ´ ú∞ ∞®@ ¯⌥¿ J@ ∞® ⌅ 9 (t| “⌧¥\‰(controls for).” ¯ò⌧, (9‹ à‰t) isfirst ®¸| ©¨` ⇠ àå \‰. ⌧4 Data mining ¿ L¿ $ÖD ⌅t⌧ å¿® D ¨©à‰; | ‰¥, ^ –⌧ ú›¥⌘ x ®¸î ¨‰ ∞® 9 (t L8t|î ÉD »‰. X¿Ã, t ® X R2 ✓t ‰∞ ÆD⌧, X¯Xî É@ pX !%t ∆‰î Ét‰. tà –⌧ T òtÙ$‡ \‰. ŸÃ⌘ \Öt Á ú∞\‰‡ X‡, ‹¥† Dt ú› ¥⌘D fiîî ı› ıå ⇣‰å(betting pool) à‰‡ Xê. (Ã} Ïˇt ¥∏$ »D xîp \⇡ X¿ J‰t, ‰LD 8p \‰ https://en.wikipedia.org/wiki/Betting_ pool). t⌧ – ¥0–⌧ – t0‡ ˆ‰‡ Xê. ∞π •1D ít0 ⌅t⌧ 4«D ` ⇠ àDL? NSFG pt0K@ ч– t⌧ 244⌧ ¿⇠, Qıê – t⌧ î \ 308⌧ ¿⇠| ÏhX‡ à‰. D»ƒ, ¿⇠ ⌘ |Äî !%t à‰. ¥ê ¿⇠ • ©\¿ LD¥0 ⌅t⌧, ®‡ ¿⇠| ‹ƒtÙt H L? ч Lt(pregnancy table)– àî ¿⇠| Ä Xî É@ }‰. X¿Ã, Q ıê Lt(respondent table)– àî ¿⇠| ¨©X0 ⌅t⌧î, ч¸ Qıê| ‰mt| \‰. t` <\ ч Lt âD ⇠ı è‡, caseid| ¨©t⌧ t˘Xî Qıê| >D¥‡, t˘ Lt– àî ✓D ч Lt\ ı¨\‰. X¿Ã, ‹⌅t Œt x¨‡ ê¥É ⇡‰. T ã@ ›5X@ SQL¸ ‰x ƒ pt0†t§ ∏¥– X⌧ ∞i (join) ∞<\ t ¸ D x›Xî Ét‰. (https://en.wikipedia.org/ wiki/Join_(SQL)ìřÿìąř). ∞i(Join)t pt0⌅ Ñ Tÿ‹\ l⌅⇠¥ ॠ⌧, ‰L¸ ⇡t ∞D ⇠â\‰. live = live[live.prglngth>30] resp = chap01soln.ReadFemResp() resp.index = resp.caseid join = live.join(resp, on='caseid', rsuffix='_r') 4. Data mining ıå⇣‰å »⇣| Ḡ⌅– 8D ‰‡ 30 ¸( t¡⌧ T‹Ã ›\‰. 137 X‡, ´à¯ â@ ч 0⌅t ‰L â@ Qıê |D }î‰. ∞¸î ⇠ xq§| î pt0⌅ Ñt‰; Qıê| ®( <\ påX0 ⌅t⌧, resp.index | resp.caseid<\ P¥ à‰. “|∏(left)” Ltx live join Tÿ‹| 8úX‡, “$x∏(right)” Lt resp– ⌅Ï⌧‰. §Ã‹ xê ont P Lt–⌧ âD ‰mXîp ¨©⇠î ¿⇠| ¿m\‰. t ⌧–⌧, |¸(Ù) tÑ á⌧ ëΩ Lt– ò¿ú‰. ¯ò⌧, rsuffix| µt⌧, $x∏ Lt– ⌘ı⇠î |¸ Öm– î \‰. | ‰¥, ëΩ Lt ®P Qıê xÖD 08T\ race|î |¸t à‰. ∞i(Join) ∞¸–î race @ race_r t|î P |¸t àå ⌧‰. ⇣‰§ l⌅@ `t‰. NSFG LtD ∞i(Join)Xî É@ ÙµX p§l— ÙË0–⌧ 1 ƒ x¨¿ Jî‰. t⌧ ¿⇠ Ä D ‹ë` ⇠ à‰. t = [] for name in join.columns: try: if join[name].var() < 1e-7: continue formula = 'totalwgt_lb ~ agepreg + ' + name model = smf.ols(formula, data=join) if model.nobs < len(join)/2: continue results = model.fit() except (ValueError, TypeError): continue t.append((results.rsquared, name)) ® D lï\ ¿⇠– t⌧, R2 | ƒ∞X‡, ¨§∏– ∞¸✓D gôx‰. ®‡ ® @ agepreg ¿⇠| ÏhXîp, t¯ | ÄÑ !%t à‰î ÉD Uxà0 L8t‰. $Ö¿⇠– ¿Ÿ1t àî¿ ⇣Ä\‰; Ã} ¯⌥¿ J‰t, å¿ ∞¸î ‡ ∞1t ∆‰. ⇣\ ® – t⌧ !⇣ +êƒ ⇣Ä\‰. 4 Œ@ nan D Ïh\ ¿⇠î !– ã@ ƒÙî D»‰. ÄÑX ¿⇠– t⌧ ¥†\ ⌧(cleaning)ƒ ⇠âX¿ JX‰. ¿⇠ ⌘ | Äî å¿– ò ŸëX¿ Jî )›<\ Ä8T⇠¥ à‰. ∞¸\ Ã} 138 ⌧ 11 •. å¿ (Regression) Xå ¿⇠| ⌧5 ⌧X¿ Jî‰t, ©`¿ƒ ®x ¿⇠ á⌧| ⌅¸Xå ⌧‰. ! (Prediction) ‰L ˃î ∞¸| ‰. ,X‡ • í@ R2 ✓D ∞úXî ¿⇠| ›Xî Ét t.sort(reverse=True) for mse, name in t[:30]: print(name, mse) ¨§∏– ´ ¿⇠î totalwgt_lb‡, birthwgt_lb ¥⌘D ¨©t⌧, ú› ¥⌘D !` ⇠î ∆‰. ‰Lt‰. ÑÖXå, ú› D∑Xå prglngth ¿⇠ ©\ !%t à¿Ã, ıå⇣‰å– ⌅(¯¨‡ ⌧ ¿⇠)@ D¡ L$¿¿ JX‰‡ \‰. t ч0 ´à¯ ©\ !¿⇠î babysex<\ D0 1ƒt ®êx¿ Ïêx¿ ò¿∏ ‰. NSFG pt0K–⌧ ®ê } 0.3 lbs T 4ʼn. ¯ò⌧, Dt 1ƒD L‡ à‰‡ Xt, !– $Ö¿⇠\ ¨©` ⇠ à‰. ‰L@ xÖ (race)t‰. Qıê 1x, Qx, 9@ ‰x xÖx¿| ò¿∏‰. $Ö ¿⇠\⌧, xÖ@ 8⌧å¿ à‰. NSFG ⇡@ pt0K–⌧ xÖ@ Œ@ ‰x ¿⇠@ ¡ t àîp, å› ¯¨‡ ‰x ¨åΩ⌧ îxt Ïh⌧‰. å ¿® –⌧, xÖ@ ¨¿⇠ (proxy variable)\ Ÿë\‰. ¯ò⌧ xÖ¸ x ¡ t ¥ƒ ÄÑ <\ ‰x îx– Xt⌧ ÖÖ ⌧›⌧‰. ¨§∏– ‰L ¿⇠î nbrnaliv‰. чt ‰ex¿| ò¿∏‰. et@ 8 eî ‰x DtÙ‰ T ë@ Ω•t à‰. ¯ò⌧ Ã} ¡ ŸÃ et| 0 X‡ à‰î ÉD L‡ à‰t, ƒ¿t ⇠ à‰. ¨§∏– àî ‰L ¿⇠î paydu‰. Qıê —D ¿‡ àî¿| ò¿∏‰. 囸 (⌧ ¿⇠⌘X Xò\ !%t àî É<\ L‰. NSFG⇡@ p t0K–⌧, 囸 ¨∞@ pX ®‡ ɸ ¡ ƒ à‰. ¡0 ⌧–⌧, å ›@ ›Ë, t , t Ùÿ ¯¨‡ ú› ¥⌘– •D ⌅ É ⇡@ ‰x îx¸ (à‰. ¨§∏– àî ‰x ¿⇠⌘ |Äî Dt ® ⇠ \ ¸((week) Ù bfeedwks\ ò⌘L¿ƒ L⇠ ∆î ¿⇠‰. tÏ\ ¿⇠| !– ¨©` ⇠ ∆ ¿Ã, bfeedwks ¿⇠ ú› ¥⌘¸ ¡ ⇠ àî t | î!` Dî à‰. LL\, t`–⌧ ‹ët⌧ t`D Ä Xîp pt0| ¨©\‰. ‰tåî p t0\ ‹ët⌧ •\ t`D ¥¥Ùî )•<\ îƒ\‰. tà –⌧ ‹\ 5. ! (Prediction) 139 P௠⌘¸ïD pt0 »t› (data mining)t|‡ Äx‰. pt0 »t›X •⇣@ 0 X¿ J@ (4D ⌧¨` ⇠ à‰î Ét‰. ⌅ÿ1@ ⌧¨\ Œ@ (4t U` ¿Ÿ(random)tpò p”(spurious)t|î Ét‰. †¨1 àî $Ö¿⇠| ›ƒà0 L8– ® \‰. á⌧| Ä X‡ t⌘ Xò| formula = ('totalwgt_lb ~ agepreg + C(race) + babysex==1 + ' 'nbrnaliv>1 + paydu==1 + totincr') results = smf.ols(formula, data=join).fit() ¡0 ı›(formula)–î ¿ L¿ Ù¿ ª\ l8t à‰: C(race)@ Patsy ı › ⌧ (formula parser)– xÖ(race)¿⇠| +ê ›<\ Ä8T ⇠¥ à¿Ã, î¸ ¿⇠\ ò¨Xå \‰. babysex ¿⇠– \ Ä8Tî ®êî 1, Ïêî 2\ ⇠¥ à‰; babysex==1 tÉ@ +ê| Ä∏(boolean) ⌅Xt⌧ ®êî 8(true), Ïêî p”(false) ⌧‰. D∑Xå, nbrnaliv>1@ ‰et ú∞@ 8(true) \ Qıê 8(true) ⌧‰. ⇠‡, paydu==1î —D å totincr ¿⇠î +ê 1–14 \ Ä8T⇠¥ à¥, ⌅ å›<\ +ê Xò ù `L »‰ $5000D ò¿∏‰. ¯ò⌧ $5000 Ë⌅\ \⌅⌧ +ê ✓D ò¨` ⇠ à‰. ‰L– ® i ∞¸ Intercept C(race)[T.2] C(race)[T.3] babysex == 1[T.True] nbrnaliv > 1[T.True] paydu == 1[T.True] agepreg totincr à‰. 6.63 0.357 0.266 0.295 -1.38 0.12 0.00741 0.0122 (0) (5.43e-29) (2.33e-07) (5.39e-29) (5.1e-37) (0.000114) (0.0035) (0.00188) πà å› îxD ⌧¥àîp, xÖ– \ î ®⇠î ê ¡\ ÉÙ‰ T l‰. Qx@ 1, 1x@ 2, ò8¿ xÖ@ 3<\ Ä8Tà‰. Qx ∞® Dt 0.27–0.36 lbs Ã| ‰x xÖ DtÙ‰ T Õ‰. t¯ ¥¥¯ Éò¸, ®ê Dt lbs ƒ T Õ‰. } 0.3 lbs T 4ʼn; et@ ‰etî } 1.4 å›D ⌧¥àD L, ê0 —D å \ ¨å@ } 0.12 lbs ƒ T Dt 4ʼn. ∞® 9 ®⇠î ?? –⌧ ¥¥¯ ÉÙ‰ T ë‰. paydu@ totincrD ÏhX Ï ‰x ¿⇠ |Ä@ 9t ¡ (D ‹¨\‰. 140 ⌧ 11 •. å¿ (Regression) t‰ ¿⇠ ®P µƒ <\ XX‡ áá@ ‰∞ Æ@ p-✓D Ùx‰. X¿ Ã, R2 ✓@ ®∞ 0.06 <\ Ï⌅à ‰∞ ë‰. ® D ¨©X¿ J@ RMSEî 1.27 lbs; ® D ¨©Xt 1.23<\ ®¥ƒ‰. ¯ò⌧ ¥0–⌧ ∞π` •1@ ¡˘Xå ù X¿î Jî‰. ¯Hi»‰! ⌧6 \¿§Ò å¿ (Logistic regression) t⌅ ⌧–⌧, $Ö ¿⇠ á⌧î +ê t‡, (Ä∏D ÏhXÏ) á⌧î î¸ t‰. X¿Ã, Öç¿⇠ m¡ +ê t‰. å¿î ‰x Öç¿⇠| ò¨Xƒ] |⇠T ⇠ à‰. Ã} Öç¿⇠ Ä∏(boolean)t|t, |⇠T® @ \¿§Ò å¿(logistic regression)|‡ à∞‰. Ã} Öç¿⇠ ⇠ /⇠|t, ÏD° å¿ (Poisson regression)|‡ à∞‰.. \¿§Ò å¿ ¨@\, ıå⇣‰å ‹ò¨$ ¿ D › tÙê. ÏÏÑ \l⌘ \Öt чà‡, D0 ®êx¿ Ïêx¿ !\‰‡ Xê. NSFG pt 0| ¨©t⌧ @\ ®ê Dt ‹¥òî U`\ X⇠î “1D(sex ratio)” – •D ¸î îxD >D∏‰. | ‰¥ Ïê| 0, ®ê| 1\ Öç¿⇠| +ê <\ Ä8T\‰t, Ùµ\å ⌧Ò(ordinary least square) )ïD ©` ⇠ à¿Ã, 8⌧ à‰. ® @ ‰L¸ ⇡@ ‹‰. y = b 0 + b 1 x1 + b 2 x2 + # Ï0⌧ y î Öç¿⇠, x1 ¸ x2 î $Ö¿⇠‰. ¯¨‡ ò⌧ î(| \åTXî ®⇠| >î‰. ¡0 ⌘¸ï 8⌧î t X0 ¥$¥ !D ∞ú\‰î Ét‰. î ®⇠@ x1 @ x2 – \ ✓t ¸¥¿t, ® @ y = 0.5 <\ !` ⇠ à‰. X¿Ã y X X¯\ ✓@ 0¸ 1t‰. U`\ ∞¸| t X‡ê Xî 9t à‰; | ‰¥, x1 @ x2 X π ✓D ƒ Qıê ®ê Dt| » U`t 50%|‡ –X‡ ˆ‰. X¿Ã ® t y = 1.1 9 y = 0.1<\ !Xî Ƀ •X‰. X¿Ã ¿˘\ U`✓@ D»‰. \¿§Ò å¿î U`Ù‰î $à(odds) ©¥\ !D \⌅h<\h tÏ\ 8 ⌧| <t⌅‰. Ã} $à– \⇡X¿ J‰t, ¨t– \ “ 8 $à (odds in favor)”î |¥ò¿ JD U`– \ |¥† U` D(t‰. ¯ò⌧ Ã} ∞¨ π¨ •1t 75% |t, 8 $à π¨ •1t (0 •1Ù‰ 30 ⇠0 L8t‰. 3 1 xp, t î 7. ®⇠ î (Estimating parameters) $à@ U`@ Ÿ|\ $à| ƒ∞\‰. 141 Ù| ‰tå \⌅\‰. U`t ¸¥¿t, ‰L¸ ⇡t o = p / (1-p) 8 $à(odds in favor) ¸¥¿t, ‰L¸ ⇡t U`\ ⌅X\‰. p = o / (o+1) \¿§Ò å¿î ‰L ® – 0⇠\‰. log o = b 0 + b 1 x1 + b 2 x2 + # Ï0⌧, o î π à ⌧‰. ∞¸– \ 8 $à‰; ⌧–⌧ o î ®ê Dt| î$ ®⇠ b 0 , b 1 , b 2 | î \‰‡ Xê. (†‹ ƒ– î )ïD $Ö\‰) ¯¨ ‡, x1 @ x2 – ✓t ¸¥L‰. log o ! ✓D ƒ∞X‡ ò⌧ U`\ ⌅X\‰. o = np.exp(log_o) p = o / (o+1) ¯ò⌧ ıå⇣‰å ‹ò¨$–⌧ ®êDt| X¿Ã, ®⇠| ¥ªå î ` î? ⌧7 ®⇠ î î ! U`D ƒ∞` ⇠ à‰. (Estimating parameters) å¿@ Ϩ, \¿§Ò å¿î Îå › tı(closed form solution)t ∆ ‰. ¯ò⌧, 0 tı(solution)D î!X‡ ⇠ı <\ tı– ⌘¸t ⌅‰. µ¡ x ©\î \ ∞ƒî …(maximum-likelihood estimate, MLE)D > î É<\, pt0 ∞ƒ(likelihood)| \ TXî ®⇠ —it‰. | ‰¥, ‰ L pt0 à‰‡ Xê. >>> y = np.array([0, 1, 0, 1]) >>> x1 = np.array([0, 0, 0, 1]) >>> x2 = np.array([0, 1, 1, 1]) \ î!✓ b 0 = 1.5, b 1 = 2.8, b 2 = 1.1 –⌧ ú⌧\‰. >>> beta = [-1.5, 2.8, 1.1] ¯¨‡ ò⌧, â– t⌧ log_oD ƒ∞\‰: >>> log_o = beta[0] + beta[1] * x1 + beta[2] * x2 [-1.5 -0.4 -0.4 2.4] ¯¨‡ \¯ $à| U`\ ⌅X\‰. 142 ⌧ 11 •. å¿ (Regression) >>> o = np.exp(log_o) [ 0.223 0.670 0.670 >>> p = o / (o+1) [ 0.182 0.401 0.401 log_o 11.02 ] 0.916 ] 0 Ù‰ t L, oî 1 Ù‰ l‡ pî 0.5 Ù‰ l‰î ÉD ¸©\‰. ∞¸ ∞ƒî y==1| L p, y==0| L 1-p‰. | ‰¥, ®D ‹¥† U`t 0.8 t‡, ∞¸ ®D|‡ › \‰t, ∞ƒî 0.8t‰; Ã} ∞¸ ÏD|t, ∞ƒ î 0.2‰. ‰L¸ ⇡t ƒ∞` ⇠ à‰. >>> likes = y * p + (1-y) * (1-p) [ 0.817 0.401 0.598 0.916 ] pt0 ⌅¥ ∞ƒî likes Òt‰.: >>> like = np.prod(likes) 0.18 beta ✓– t, pt0 ∞ƒî 0.18t‰. \¿§Ò å¿ ©\î ∞ƒ| \ T Xî ®⇠| >D¥î Ét‰. t| ⌅t⌧, ÄÑX µƒ )§¿î t§ )ï (Newton’s Method) ⇡@ ⇠ı t∞¨(iterative solver)| ¨©\‰.( https: //en.wikipedia.org/wiki/Logistic_regression#Model_fitting 8p). ⌧8 l⌅ (Implementation) StatsModels–î \¿§Ò å¿ 0•D ⌧ıXî U`D \¯ $à(log odds) \ ⌅XXî h⇠ tÑD 0⌧ logitt|‡ Äx‰. ¨©ïD ‹X0 ⌅t⌧, 1D(sex ratio)– •D ¸î ¿⇠| >î‰. ‰‹, NSFG pt0| ¨X‡ ч 30 ¸( t¡⌧ Ùà ›\‰. live, firsts, others = first.MakeFrames() df = live[live.prglngth>30] logit– Öç¿⇠î (Ä∏ êà ى) tƒ(binary)t ⇠¥| \‰. ¯ò⌧ t ƒ ⇠(binary integer)\ ⌅XXî astype(int) Tÿ‹| ¨©t⌧ »\¥ |¸(Ù) boy| ›1\‰. df['boy'] = (df.babysex==1).astype(int) 1D– •D ¸î ÉD ƒ îx@ Ä® 9, ú› ⌧⌧, xÖ, ¨å ¿⌅ Ïh⌧‰. \¿§Ò å¿| ¨©t⌧ tÏ\ ®¸ NSFG pt0– ò¿ò î¿ ¥¥Ùê. ∞® 9Ä0 ‹ëXê. 8. l⌅ (Implementation) 143 import statsmodels.formula.api as smf model = smf.logit('boy ~ agepreg', data=df) results = model.fit() SummarizeResults(results) logit@ ols@ Ÿ|\ xê, Patsy l8 ı›(formula)¸ pt0⌅ ÑD î ‰. ∞¸î ® D \⌅Xî Logit ¥‰. ¥ ¥Ä–î endog@ exog ç1t Ïh⌧‰; Öç¿⇠| Ätî ‰x tÑ ¥› ¿⇠ (endogenous variable)@ $Ö¿⇠| Ätî ‰x tÑ x› ¿⇠ (exogenous variables) à‰. ⇠ t(NumPy) 0Ùt0 L8–, LL\ 0ÙD pt0⌅ Ñ<\ ¿XXî Ét ∏¨X‰. endog = pandas.DataFrame(model.endog, columns=[model.endog_names]) exog = pandas.DataFrame(model.exog, columns=model.exog_names) model.fit ∞¸î BinaryResults ¥\, ols sults ¥@ ¨X‰. ‰L– î}∞¸ à‰. Intercept 0.00579 agepreg 0.00105 R^2 6.144e-06 i–⌧ ª@ RegressionRe- (0.953) (0.783) agepreg ®⇠î ë⇠‰. òt T Œ@ ∞® ®D| T 8Xî É⇡¿Ã, p-✓@ 0.783<\ x ®¸î ∞– X\ É<\ ¸ ⇠ à‰. ∞ ƒ⇠, R2 î \¿§Ò å¿– ©⇠¿ Jî‰. X¿Ã, “X¨ R2 ✓ (pseudo R2 values)”<\ ¨© ⇠ àî Ht á⌧ àîp ® D DPXîp © X‰. | ‰¥, 1D@ ⇠¥ à‰‡ ˇ¥¿î îx á⌧| Ïh\ ® t ‰L– à‰. formula = 'boy ~ agepreg + hpagelb + birthord + C(race)' model = smf.logit(formula, data=df) results = model.fit() ∞® 9¸ hÿ, ® –î ú›‹⇣– DÑ¿ 9 (hpagelb), ú› ⌧⌧ (birthord), î¸ ¿⇠\ xÖt Ïh⌧‰. ‰L– ∞¸ à‰. Intercept C(race)[T.2] C(race)[T.3] agepreg hpagelb birthord R^2 0.000144 -0.0301 -0.0224 -0.000457 -0.00267 0.0047 0.00501 (0.772) (0.66) (0.996) (0.629) (0.266) (0.821) î ®⇠ ¥§ Ƀ µƒ X1t ∆‰. X¨-R2 ✓@ }⌅ T í‰. X¿Ã ∞ x îx L8| ⇠ à‰. 144 ⌧ 11 •. å¿ (Regression) ⌧9 ƒ (Accuracy) ıå⇣‰å ‹ò¨$–⌧, ® ƒ(accuracy of the model)– T ‰: ∞\ 0 @ DPXÏ 1ı <\ !\ ü⇠. Ït à NSFG pt0–î ÏDÙ‰ ®D T Œ‰. ¯ò⌧ 0¯ ⌅µ@ ‰à “®D”\ î!\‰. t ⌅µ Uƒî Ë¿ ®D D(t ⌧‰. actual = endog['boy'] baseline = actual.mean() ⇠\ Ä8T⇠¥ à¥⌧, …‡@ ®D D(, 0.507t ⌧‰. actualt tƒ ‰L– ® Uƒ| ƒ∞\ )ït ò@à‰. predict = (results.predict() >= 0.5) true_pos = predict * actual true_neg = (1 - predict) * (1 - actual) results.predictî U` ⇠ t(NumPy) 0ÙD ⇠XXîp, 0 9@ 1\ ⇠, º\‰. actualD Òt⌧ Ã} ®D| !X‡ fi‰t 1, ¯⌥¿ J‰t 0 D ∞ú\‰. ¯ò⌧ true_pos î “8ë1(true positives)”D ò¿∏‰. », ¿\ true_negî “ÏD”|‡ î!X‡ fiò Ω∞| ò¿∏‰. î!t ⌘\ D(t‰. ƒî acc = (sum(true_pos) + sum(true_neg)) / len(actual) ∞¸✓t 0.512 \ 0¯ ⌅µ 0.507 Ù‰ ‰å íå ò(‰. X¿Ã, t ∞¸| 4 Ï Xå D‰tt H⌧‰. Ÿ|\ pt0| ¨©t⌧ ® D lïà‡ Ä à‰. ¯ò⌧ ® t »\¥ pt0– !%D î¿ ª` ⇠ à‰. ¯¸–ƒ àlX‡, ® D ¨©t⌧ ıå⇣‰å– \ !D tÙê. \l òt 358t‡, 1x, \l ®∏ òtî 39, ¯¨‡ 8௠Dt| чX‡ à‰‡ Xê. columns = ['agepreg', 'hpagelb', 'birthord', 'race'] new = pandas.DataFrame([[35, 39, 3, 2]], columns=columns) y = results.predict(new) ‡‹ ¨@– t⌧ results.predictD 8úX0 ⌅t⌧, ® – ¿⇠– \ |¸D î pt0⌅ ÑD ë1t| \‰. t Ω∞– 0.52 ò@⌧ “®D” \ î t| \‰. X¿Ã, Ã} ® t π¨ •1D •¡‹§¿Ã, (tî ‰∞ ë‰. ⌧ 10 µ 8⌧ tà µ8⌧– \ ê tı@ chap11soln.ipynb |– ò@à‰. 11. ©¥ ¨⌅ 145 Exercise 11.1 ŸÃ⌘ \Öt ú∞t ⇠¥ à‡, ú›|D !Xî ¨4‰ ¥0åÑ– 8Ï\‰‡ Xê. ч 30¸(– ¥0| t‰‡ Xê. • \ X !D Xîp ¥§ ¿⇠| ¨©Xt L? ú›⌅– L$ƒ ¿⇠\ \ t|X‡, ¥0– 8Ï\ ¨å‰–å t© •t|` É ⇡‰. Exercise 11.2 ∏¨Ñ§- |‹(Trivers-Willard) $@ Œ@ Ï X– à¥, 1Dî “¥8» ¡‹(maternal condition)”– Ï$à‰‡ ⌧‹\‰; â, ∞® 9, l0, t , ¨å ¿⌅ ⇡@ îx. https://en.wikipedia.org/wiki/ Trivers-Willard_hypothesis 8p\‰. |Ä lî ¨å¨t– t ®¸| Ùϸ‡ à¿Ã, ∞¸î <¨\‰. tà • –⌧, t îx¸ ⌧ |Ä ¿⇠| Ä X¿Ã, 1D– µƒ <\ X x ®¸| î ¥§ ¿⇠ƒ ⌧¨X¿ ªà‰. µ<\, pt0 »t› ⌘¸ïD ¨©t⌧ ч |¸ Qıê |–⌧ ‰x ¿⇠| Ä X|. ‰» x ®¸| î ‰x îxD ⌧¨` ⇠ àî ? Exercise 11.3 !X‡ê Xî ⇠…(quantity)t /⇠(count)|t, ÏD° å¿ | ¨©` ⇠ à‰. StatModels– poisson h⇠\ l⌅⇠¥ à‰. ols ò logit ¸ Ÿ|\ )›<\ ëŸ\‰. µ<\, tÉD ¨©t⌧ \ Ï1– t⌧ º» ò Œ@ D0 ‹¥òî¿ !\‰; NSFG pt0K–⌧, t ¿⇠î numbabes \ à∞‰.. òt 358, Qx, lå›t $75,000D ⇠î YD x≈\ Ï1D Ùê. ¯@ º»ò Œ@ ê@| ú∞` É<\ ¡⇠î ? t Exercise 11.4 Ã} !X‡ê Xî ⇠…t î¸ t|t, ‰m \¿§Ò å¿ | ¨©\‰. StatModels–⌧ mnlogit h⇠\ l⌅⇠¥ à‰. µ<\, t| ¨ ©t⌧, \ Ï1t <x¡‹, Ÿp¡‹, ¸Ä¡‹, t<¡‹, ƒp¡‹, ¯<x¿ î!t¯‰; NSFG pt0K–⌧, <x¡‹î ¿⇠Ö rmarital\ Ä8T⇠¥ à‰. 9t 258, 1x, lå›t } $45,000 ÏÏx ‡x Ï1D 艇 tÙê. ¯@ <x, Ÿp, Ò| U`@ º»ò L? ⌧ 11 ©¥ ¨⌅ • å¿ (regression): pt0– ® D ¿ (⌧ ¸ ⌘X Xò. iXî ® D î X0 ⌅\ á • Öç¿⇠ (dependent variables): å¿® –⌧ ›¿⇠\ƒ L$8à‰. !X$î ¿⇠. ⇣\, ¥ 146 ⌧ 11 •. å¿ (Regression) • $Ö¿⇠ (explanatory variables): Öç¿⇠| !Xpò $ÖXîp ¨ ©⇠î ¿⇠. ⇣\, ≈Ω¿⇠ 9@ x›¿⇠\ƒ L$8 à‰. • Ë⌧å¿ (simple regression): Ë¿ XòX Öç¿⇠, XòX ≈Ω¿⇠à D î å¿. • ‰⌘å¿ (multiple regression): $Ö¿⇠ ‰⇠| ¿⇠î Xò‰. • å¿ (linear regression): î å¿, X¿Ã Öç ® – 0⇠\ å¿. • Ùµ\å⌧Ò (ordinary least squares): î( ⌧Ò $(| \åTh<\h ®⇠| î Xî å¿. • p” ƒ (spurious relationship): ® – Ïh⇠¿ Jî µƒ 9@ îx<\ ⌧›XÏ P ¿⇠ ⌧ P ¿⇠ ¨t ƒ. ∞ú< • ⌧¥¿⇠ (control variable): p” ƒ| “⌧¥ © <\” 9@ ⌧pXî p å¿– Ïh⇠î ¿⇠. • ¨¿⇠ (proxy variable): ‰x îx¸ ƒL8– ⌅⌘ <\ å¿ ® – Ù| 0ÏXî ¿⇠. ¯ò⌧ ¯ îx– \ ¨(proxy) Ì`D \‰. • î¸ ¿⇠ (categorical variable): t∞ ⌧⌧∆î ✓D î ¿⇠. • ∞i (join): P ⌅ Ñ– âD ‰mXî §(key)t ¨©t⌧ P pt0⌅ Ñ– pt0| ∞iXî ∞. • pt0»t› (data mining): Œ@ ® D Ä h<\h ¿⇠ ¨t >D¥î ⌘¸ï. • \¿§Ò å¿ (logistic regression): Öç¿⇠ | L ¨©⇠î å¿ ‹. • ÏD° å¿ (Poisson regression): Öç¿⇠ ⇠| L, ¨©⇠î å¿ ›. ƒ| Ä∏(boolean) êà › L⇠ Dà ⇠, µ¡ / • $à (odds): U` p| U`¸ U`Ù(complement) D(\ p/(1 ò¿¥î H x )ï. p )\ ⌧ 12 • ‹ƒÙ Ñ ‹ƒÙ(time series)@ ‹§\–⌧ ‹⌅– 0| ¿TXî ! ✓ ‹ §‰. Ö\ ¨@î “X§§Ò ¯ò⌅ (hockey stick graph)”\ ‹⌅– 0x \ å …‡ 0(D ÙÏ ‰.(https://en.wikipedia.org/wiki/Hockey_stick_ graph 8p). tà •–⌧ ë≈` ⌧î X¸Y lê Zachary M. Jones–å⌧ T‰. Zacharyî ¯m » (»¨Tò)– \ T‹•(black market)D l\‰ (http://zmjones.com/marijuana). “Ù0 © (Price of Weed)”<\ à¨î ˘¨t∏–⌧ pt0| ⇠—à‰. t ˘¨t∏î » pò•å, ©, à », ⇠…D 8Ïê–å <¥ ‹• Ù| t|∞‹ åÒ(crowd sourcing)à‰ (http://www.priceofweed.com/). t ⌅\ ∏X © @ ¨•– \ iïT (legalization)⇡@ E∞ ®¸| p¨Xî Ét‰. t ⌅\ ∏– ‰%D ⌧ ¨àîp t î pt0| ¨©t⌧ ⌘î\ X »8 | ‰t, }< E (drug policy)⇡t ‰Ë0 h8t‰. tà •–⌧ e¯| >X<tXî l›t à¿Ã, Ñ – ⌅8 x ‹ƒ| ¿Xî ⌘î1D ⇠ıXî 0å ⇠»<t \‰. }<(drug) àï 9@ ¥ê }<t àït ⇠¥| Xê–î ⌘îX‡ ¥$¥ ıı E»8t‰; ¡Xå Ù‡⌧ U\ pt0\ ∞¨X ∞ D µÙt| \‰. tà •–⌧ ¨©⇠î T‹î timeseries.py– à‰. T‹| ‰¥\‹X‡ ë ≈Xî É– \ Ùî ??D 8p\‰. ⌧1 8$0(Importing)@ Mr. Jones ¨t∏–⌧ ‰¥\‹\ pt0î tE pt0| }¥ ⇣‰§ pt0⌅ Ñ<\ •\‰. ⌧X0(cleaning) •å– à‰. ‰L T‹ 148 ⌧ 12 •. ‹ƒÙ Ñ transactions = pandas.read_csv('mj-clean.csv', parse_dates=[5]) parse_datesî 5௠|¸(Ù)✓D †‹ êà <\ t X‡, ⇠ t (NumPy) datetime64 ¥\ ⌅X\‰. pt0⌅ Ñ–î Ù‡⌧ pòt– \ ⸠‰L |¸(Ù)t à‰. • city (ƒ‹): 8êÙ ƒ‹ tÑ. • state (¸): L ≥ P ê\⌧ ¯m ¸Ö. • price ( ©): ÏÏ\ ¿à⌧ ©. • amount (⇠…): ¯®<\ lÖ\ ⇠…. • quality (à»): l‰ê Ù‡\ ‡ , Ùµ, à». • date (†‹): Ù‡†‹, î!Ëp l‰| ¡ƒ †‹. • ppg: ÏÏ \0⌧ ¯®˘ © (price per gram) • state.name: 8êÙ ¯m ¸ tÑ • lat: ƒ‹ tÑ– 0⇠\ pò • lon: pò ⌧›\ ¸¨X ⌅ƒ ⌧›\ ¸¨X ⌅ƒ Ù. Ù. pò @ ‹⌅– 0| ⌧›\ ¨t(event)<\, t pt0KD ‹ƒÙ êÃ\ ò¨` ⇠ à‰. X¿Ã, ¨tt ‹⌅– ‡ÒXå ⌧›Xî É@ D»‰; †‹ ƒ\ Ù‡⌧ pò +êî 0t –⌧ ⇠1t<\ ‰ë\‰. ‹ƒÙD Ñ Xîp ¨©⇠î Œ@ )ï@ ! ✓t ‡ÒXå ⌅©<\ ⇠¥à¥| \‰. 9@ Ã} pt0 Ÿ| ⌅©t|t T ⌅ËX‰. t )ïD ‹X0 ⌅t⌧, pt0KD » à»D Ù‡\ —Ë<\ ò ‰. ¯¨‡ ò⌧ ¯®˘ |ƒ …‡ ©D ƒ∞t⌧ —ËD Ÿ| © ƒÙ (equally spaced series)\ ¿X\‰. def GroupByQualityAndDay(transactions): groups = transactions.groupby('quality') dailies = {} for name, group in groups: dailies[name] = GroupByDay(group) return dailies 2. o ¯¨0 (Plotting) 149 groupbyî GroupBy ¥| ⇠XXî pt0⌅ Ñ Tÿ‹‰; for Ë⌅– ¨© ⇠⌧, —Ë tѸ —ËD \⌅Xî pt0⌅ ÑD ⇠ı\‰. quality low, medium, hight0 L8– t tÑD î —Ë 8⌧| ªî‰. Ë⌅î —ËD ⇠ıXîp GroupByDay| 8út⌧ |ƒ …‡ »\¥ pt0⌅ ÑD ⇠X\‰. ©D ƒ∞X‡, def GroupByDay(transactions, func=np.mean): grouped = transactions[['date', 'ppg']].groupby('date') daily = grouped.aggregate(func) daily['date'] = daily.index start = daily.date[0] one_year = np.timedelta64(1, 'Y') daily['years'] = (daily.date - start) / one_year return daily ®⇠ transactions@ pt0⌅ Ñ<\ date@ ppg|¸D ÏhXî pt0⌅ Ñt‰. |¸D P⌧ ›X‡ ò⌧, date ƒ\ 6î‰. grouped ∞¸î †‹ƒ\ pt0⌅ Ñ<\ ‰QXîp, ¯ †‹– Ù‡⌧ ©D Ù‡ à‰. aggregateî GroupBy Tÿ‹\ —ËD ⇠ıX‡, h⇠| —Ë |¸– ©\‰; t Ω∞ |¸@ ppg Xò‰. ¯ò⌧ aggregate ∞¸î †‹– t â Xò@ \ |¸ ppgD î pt0⌅ Ñt‰. pt0⌅ Ñ– †‹î ⇠ t(NumPy) datetime64 ¥\ •⇠¥ àîp 10µÑX 1 (nanoseconds) 64-D∏ ⇠\ \⌅⌧‰. ‰L Ñ D ⌅t⌧, D ƒò¸ ¨åt }0 l¥ Ë⌅\ ‹⌅ Ù| ë≈Xî Ét ∏¨` Ét‰. ¯ò ⌧, GroupByDayî index| ı¨t⌧ date|î |¸D î X‡ ò⌧, years| î Xîp ÄŸå⇠⇣ ›<\ ´ pò tƒ\ Dƒ +ê| Ù‡ à‰. \Ö∞¸ pt0⌅ Ñ–î ppg, date, years |¸t à‰. ⌧2 o ¯¨0 (Plotting) GroupByQualityAndDay ∞¸î » à»\Ä0 |ƒ <\ ‰Qt‰. ‰L– ‹ƒÙ 8⌧| o<\ ¯¨î T‹ © pt0⌅ Ñ à‰. thinkplot.PrePlot(rows=3) for i, (name, daily) in enumerate(dailies.items()): thinkplot.SubPlot(i+1) title = 'price per gram ($)' if i==0 else '' thinkplot.Config(ylim=[0, 20], title=title) 150 ⌧ 12 •. ‹ƒÙ Ñ ¯º 12.1: ‡ , ⌘ , à» » – \ ¯®˘ |ƒ ‹ƒÙ ¯º. thinkplot.Scatter(daily.index, daily.ppg, s=10, label=name) if i == 2: pyplot.xticks(rotation=30) else: thinkplot.Config(xticks=[]) rows=3D î PrePlot@ 8⌧ X⌅¯º(subplot)D 3â– x– oD ¯¥$ ‡ \‰î ÉD X¯\‰. Ë⌅ pt0⌅ ÑD ⇠ıXt⌧ – t ∞⇣ ƒ| ›1\‰. ‹ƒÙ pt0| o ¯º<\ ¯¥ L ⇣‰ ¨t| Ñ(line segment)<\ \⌅Xî Ét |⇠ t‰. X¿Ã, t Ω∞–î pt0 ⇣t Œ ‡, © ¿Ÿ1t l0 L8–, ÑD î î Ét ¯‰¿ ƒ¿t ⇠¿ ª\‰. x-ï– |®t †‹|⌧, “ticks”D 30ƒ å⌅\‰. ≈1D ãå X$‡ pyplot.xticks D ¨©t⌧ ¯º ??– ∞¸ ò@à‰. t o ¯ºD µt⌧ \ ¿ Ö1\ π’@ 2013 D 11‘ »t à‰î Ét‰. pt0 ⇠—t t 0⌅ŸH \⌧X¿ ªXpò, p t0 t© •X¿ JX‰î Ƀ •X‰. ò⌘– ∞! pt0| ò¨Xî )ïD › t¸ Ét‰. ‹ <\ ‡à» » ©t t 0⌅ŸH X}Xî Éò¸ Ùx‰. à» » ©@ ¡πXî Éò¸ Ùt¿Ã, ›ƒX0î ¥5‰. \–Xt ¿Ÿ1 t T l0 L8t‰. à» pt0î ê⌧ <\ Ù‡\ É<\ ‹⌅– 0x Ω •–î 8Ïê ¥ªå à» |®D ©àî¿– \¿Ÿt ⇠ ⌧‰î ÉD 0µX|. 3. ⌧3 å¿ (Linear regression) 151 å¿ (Linear regression) ‹ƒÙÑ – πT⌧ )ï`t à¿Ã, Œ@ 8⌧– t⌧, ‹ëX0 ã@ Ë ⌧\ )ï@ å¿⇡@ î© ƒl| ©tÙî Ét‰. ‰L h⇠î |ƒ © Ù pt0⌅ ÑD D⌧, \å⌧Ò iD ƒ∞\‰. StatsModels–⌧ ® ¸ ∞¸ ¥| ⇠X\‰. def RunLinearModel(daily): model = smf.ols('ppg ~ years', data=daily) results = model.fit() return model, results ¯¨‡ ò⌧, ⇠…D ⇠ıX‡ ® – i\‰. for name, daily in dailies.items(): model, results = RunLinearModel(daily) print(name) regression.SummarizeResults(results) ‰L– ∞¸ ò@à‰. quality intercept slope R2 high 13.450 -0.708 0.444 medium 8.879 0.283 0.050 low 5.362 0.568 0.030 î ⌧ 0∏0î ‡à» » ©t !l⌅–⌧ ‰D } 71 <∏ X}à ‰; ⌘⌅ à» » – t⌧î ‰D } 28 <∏ 5 à‡, à» » – t⌧î ‰D } 57 <∏ ù à‰. tÏ\ î ✓@ ‰∞ ë@ p-✓<\ ®P µƒ <\ XX‰. ‡à» » – \ R2 ✓@ 0.44\ $Ö¿⇠\⌧ ‹⌅t !⌧ © ¿Ÿ1 X 44%| $Ö\‰. ‰x » à»– t⌧î © ¿Ÿt T ë‡, ©– ¿Ÿ1t T ‰⌧, R2 ✓t T ë‰(X¿Ã, Ï⌅à µƒ X1t à‰.) ‰L T‹î ! ©¸ i✓(fitted value)D o<\ ¯∞‰. def PlotFittedValues(model, results, label=''): years = model.exog[:,1] values = model.endog thinkplot.Scatter(years, values, s=15, label=label) thinkplot.Plot(years, results.fittedvalues, label='model') ?? –⌧ ÙXÔt, model–î exog, endog, ⇠ t(NumPy)0Ùt x›($ Ö), ¥›(Öç) ¿⇠\ Ïh⌧‰. PlotFittedValues@ pt0 ⇣D ∞⇣ƒ\, i✓D o ¯º<\ Ç ‰. ¯º ??–î ‡à» » – t oD ¯∞ ∞¸ à‰. ® t pt0– \ ã@ iò¸ Ùx‰; X¿Ã, å¿î tÏ\ pt0– t⌧ • \ ›@ D»‰. 152 ⌧ 12 •. ‹ƒÙ Ñ ¯º 12.2: ‡ » – \ ¯®˘ |ƒ © ‹ƒÙ¸ \åêπ i. • ´¯\, •0 î8| 9@ ‰x ⌅Ë\ h⇠\ !` t ∆‰. |⇠ <\, ©@ ⇠î@ ı – Xt ∞ ⌧‰. ®P ‹⌅– 0| ! à \ )•<\ ¿T\‰. • X¯, å¿® @ ®‡ pt0 (\¸ 9@ ¸p)– t Ÿ|\ ⌘ X| T‰. ! © <\, D»ƒ \¸ pt0– T Œ@ ⌘X| P¥| \‰. • »¿…<\, å¿ ⌘X Xòî î( ¡ ⇠¿ Jî °Lt|î Ét‰. ‹ƒÙ pt0–⌧ ç⌧ ✓t ¡ ⇠0 L8– ÖÖ t @ ¿¨‰. ‰L ⌧4 –⌧ HD ⌧‹Xî ‹ƒÙ pt0– t⌧ T X‰. tŸ …‡ (Moving averages) ÄÑ ‹ƒÙ Ñ @ 0⇠\‰. !⌧ ƒÙt ‰L 8 ¿ îå it|î ® T – • î8 (Trend): ¿ç⇠î ¿Ω¨mD °D¥î …\ h⇠ (smooth function). • ƒ 1 (Seasonality): ¸0 tt. ¿Ÿ, D»ƒ |ƒ, ¸ƒ, ‘ƒ, 9@ Dƒ ¨ • °L (Noise): •0 î8 ¸⌅ U` ¿Ÿ. 4. tŸ …‡ (Moving averages) 153 ^ –⌧ ¥¥$Ôt, å¿î ƒÙ–⌧ î8| QD¥î \ )ït‰. X¿Ã, î8î Ë⌧\ h⇠ D»‰. Ãm\ H@ tŸ…‡(moving average)t‰. tŸ…‡@ ƒÙD ƒ∞(windows)\ à¨î πX¿ Jî ¿Ì<\ ò⌅‡ ƒ∞– àî ✓D …‡∏‰. • Ë⌧\ tŸ…‡ ⌘X Xòî tŸ…‡ (rolling mean)t‰. ƒ∞– àî ✓D …‡∏‰. | ‰¥, Ã} ƒ∞ l0 3t|t, tŸ …‡@ 0–⌧ 2L¿, 1–⌧ 3L¿, 2–⌧ 4L¿ ÒÒ ¨t– àî ✓D …‡∏‰. ⇣‰§î–î rolling_mean \¥ ‹¨à| ⇠X\‰. àîp, ‹¨à@ ƒ∞ l0| xê\ D» >>> series = np.arange(10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> pandas.rolling_mean(series, 3) array([ nan, nan, 1, 2, 3, 4, 5, 6, 7, 8]) ´ P✓@ nant‰; ‰L ✓@ ´ 8 îå(0,1,2) …‡t‰. ‰L ✓@ 1,2,3X …‡. ÒÒ » pt0– rolling_meanD ©X0 ⌅–, ∞!✓D ‰Ë¥| \‰. Xò 9@ ¯ t¡ » ໠ t⌧, ! l⌅– Ù‡⇠¿ J@ pò àî á|t à‡ pt0 ⇠—t \1T⇠¿ J@ 2013D π 0⌅t à‰. ¿ L¿ ¨©\ pt0⌅ Ñ– ¡0 †‹î DÃ8à‰; xq§î pt0– ∆î †@ t Ù‰. ‰L Ñ – t⌧, ∞! pt0| Ö‹ <\ \0` D î à‰. pt0⌅ ÑD “‰‹ xqÒ(reindexing)”t⌧ t ë≈D ⇠â\‰. dates = pandas.date_range(daily.index.min(), daily.index.max()) reindexed = daily.reindex(dates) ´à¯ â@ ! l⌅ òLÄ0 ]L¿ ®‡ †D ÏhXî †‹ î⌅| ƒ∞\ ‰. P௠â@ daily\Ä0 ®‡ pt0| î »\¥ pt0⌅ ÑD ›1 X¿Ã, nan<\ Dà ®‡ †¯ â ÙD Ïh\‰. t⌧, ‰L¸ ⇡t tŸ…‡ oD ¯¥ ⇠ à‰. roll_mean = pandas.rolling_mean(reindexed.ppg, 30) thinkplot.Plot(roll_mean.index, roll_mean) ƒ∞ l0î 30t‡, roll_mean– àî ⌧✓X …‡t‰. ✓@ reindexed.ppg<\Ä0 30 ¯º ?? (|∏)– ∞¸ ¯$8 à‰. tŸ…‡@ °LD …\X‡ î8| îú Xî ë≈D ò Xî Éò¸ Ùx‰. ´ 29⌧ ✓@ nan t‡, ∞!✓t àî Û–, 154 ⌧ 12 •. ‹ƒÙ Ñ ¯º 12.3: |ƒ ©¸ tŸ…‡(å!), ¿⇠ ⌘tŸ…‡(exponentiallyweighted moving average, EWMA, ∞!). ⇣‰x nan 29⌧ ‰L– à‰. t »D ‰∏ ⇠ àî )ït á⌧ à¿Ã, 1 ‡ ë@ |t‰. H@ ¿⇠ ⌘ tŸ…‡ (exponentially-weighted moving average)<\ P ¿ •⇣t à‰. ´¯, tÑ–⌧ T‹XÔt, ⌘…‡D ƒ∞Xîp • \¸ ✓– • í@ ⌘X| P‡ t⌅ ✓X ⌘Xî ¿⇠ <\ X}\‰. Pà¯, EWMA ⇣‰§ l⌅t ∞!✓D T ò ò¨\‰. ewma = pandas.ewma(reindexed.ppg, span=30) thinkplot.Plot(ewma.index, ewma) span ®⇠î µ tŸ…‡ ƒ∞ l0– ¡Q\‰; ⌘X º»ò h¨ ⇣ ƒXî¿ ⌧¥\‰. ¯ò⌧ …‡✓– 4‹ª` 0Ï| Xî ⇣X /⇠| ∞ \‰. ¯º ?? ($x∏)– Ÿ|\ pt0– \ EWMA ¯$8 à‰. X‰ X⌧ ¿⇣–⌧î tŸ…‡¸ D∑X‰. X¿Ã, ∞!✓t ∆îp ë≈X0 T ⇠‘X å \‰. ‹ƒÙ ‹ëĸ–⌧ ✓‰t °Lt ॠÙtîp, ÄT @ pt0 ⇣– ® t 0⇠X0 L8t‰. ⌧5 ∞!✓ (Missing values) ‹ƒÙ pt0 î8| π1Tà0 L8–, ‰L Ëƒî ¸0 x âŸx ƒ 1 D p¨` Ét‰. x⌅ ⟖ 0⇠\ ‹ƒÙ pt0î ÖÖ |ƒ, ¸ƒ, ‘ƒ, Dƒ ¸0(cycle)| ò¿∏‰. ‰L –⌧, ƒ 1D Ä Xî )ïD ⌧‹\‰. X¿Ã, ∞!✓–î ò ŸëX¿ Jî‰. ¯ò⌧, t 8⌧| < t∞t| \‰. 6. ƒÙ ¡ (Serial correlation) ¯º 12.4: ∞!✓D D¥ |ƒ 155 ©. ∞!✓D D∞î ⌅ËX‡ T\ )ït tŸ…‡t‰. ‹¨à Tÿ‹ fillna –Xî Ét‰. reindexed.ppg.fillna(ewma, inplace=True) reindexed.ppg– nan àî Û ¥–⌧ò, fillna ∞!✓D ewma–⌧ ¡ QXî ✓<\ P¥\‰. inplace 5X ò¯(flag)î fillna– »\ ›1Xî ‡– 0t ‹¨à| ¿ΩXå \‰. t )›X ∞⇣@ ‹¨à– °L(noise)D ¸åî Xî Ét‰. ¨\¯îú⌧ î((resampled residual)| î t⌧ t 8⌧| t∞` ⇠ à‰. resid = (reindexed.ppg - ewma).dropna() fake_data = ewma + thinkstats2.Resample(resid, len(reindexed)) reindexed.ppg.fillna(fake_data, inplace=True) resid–î ppg nan| L Ïh⇠¿ J@ † î(✓t Ïh⇠¥à‰. fake_data–î tŸ…‡ i¸ î( U`\¯(random sample)t Ù®à‰. » ¿…<\, fillnaî nan| fake_data ✓<\ º‰. ¯º ??– ∞¸ ò@à‰. Dà pt0î ‹ <\ ‰⌧✓¸ D∑X‰. ¨ \¯îú\ î( úd(random)<\ ∞¸î ‰à Ï|ƒ‰; ò⌘–, ∞!✓– ⌧ ›1⌧ $(| ¥ªå π1TXî¿ ¥¥¸ Ét‰. ⌧6 ƒÙ ¡ (Serial correlation) ©@ ‰| ‰| ¿TXîp, (4D Ù‡ ˆD¿ ®x‰. Ã} ‘î|– ©t í‰t, ‰L á|ŸH ©t íD ÉD ¡` ⇠ à‰; ¯¨‡, Ã} Ɖt, Æ å ¿ ÉD ¡` ⇠ à‰. t@ ⇡@ (4t ƒÙ ¡ (serial correlation) t|‡ Äx‰. \–Xt ✓t ƒÙ– ‰L ✓¸ ¡ ⇠0 L8t‰. 156 ⌧ 12 •. ‹ƒÙ Ñ ƒÙ ¡ D ƒ∞X0 ⌅t⌧, ‹ƒÙD ‹((lag)\ à¨î l⌅Ã| tŸ` ⇠ à‰. ¯¨‡ ò⌧, –‹ƒÙ¸ tŸ⌧ ‹ƒÙ ¨t ¡ D ƒ∞\‰. def SerialCorr(series, lag=1): xs = series[lag:] ys = series.shift(lag)[lag:] corr = thinkstats2.Corr(xs, ys) return corr tŸ\ ƒ–, ´ ‹( (lag) ✓t nant|, ¨|t§| ¨©t⌧ Corr| ƒ∞X 0 ⌅– ⌧p\‰. Ã} SerialCorrD ‹( 1D ƒ – ©pt0– ©Xt, ƒÙ¡ t ‡à» » – t 0.48, ⌘⌅à»–î 0.16, à»–î 0.10t ⌧‰. •0 î8| î ¥§ ‹ƒÙ– t⌧ƒ, \ ƒÙ¡ D ¡\‰; | ‰¥, Ã} ©t ®¥¿‡ à‰t, ƒÙ ⇠ ⌅⇠Ä–î …‡Ù‰ ¡⌅ ✓D, ƒÙ ⇠ ƒ⇠Ä –î …‡Ù‰ X⌅ ✓D ¡\‰. Ã} î8| ⌧p\‰t, ¡ t ¿çXî¿ ¥¥Ùî Ét T e¯m‰. ‰¥, EWMA î(| ƒ∞X‡ ò⌧ ƒÙ ¡ D ƒ∞\‰. | ewma = pandas.ewma(reindexed.ppg, span=30) resid = reindexed.ppg - ewma corr = SerialCorr(resid, 1) lag=1<\ î8 ⌧p⌧ pt0– \ ƒÙ ¡ @ ‡à»–î -0.022, ⌘⌅à» –î -0.015, à»–î 0.036t‰. ƒÙ ¡ ✓t ëD⌧, t ‹ƒÙ pt0–î XË ƒÙ¡ t ‰∞ ëpò ∆‰. ¸ƒ, ‘ƒ, Dƒ ƒ 1D ⇣ÄX0 ⌅t⌧, ‰‹ ‰x ‹(| \‰. ‰L– ∞¸ ò@à‰. lag high medium low 1 -0.029 -0.014 0.034 7 0.02 -0.042 -0.0097 30 0.014 -0.0064 -0.013 365 0.045 0.015 0.033 î Ñ D ‰â ‰L –⌧, tÏ\ ¡ t µƒ X1(µƒ X1@ ∆‰)t àî¿ Ä ` Ét‰. X¿Ã, t ¿⇣–⌧ † <\ t‰ ‹ƒÙ pt0– ¡˘\ ƒ (4t, ¥ƒ t ‹(–î ∆‰‡ ∞`¥¥ ⇠ à‰. ⌧7 ê0¡ (Autocorrelation) Ã} ‹ƒÙt ƒÙ¡ D ‡ à‰‡ › X¿Ã ¥§ ‹(| Ä `¿ ®x ‰t, ®‡ ‹(| Ä ` ⇠ à‰!!! ê0¡ h⇠ (autocorrelation function) 7. ê0¡ (Autocorrelation) 157 ¯º 12.5: |ƒ ©– \ ê0¡ h⇠(å!), ®X‹ÿ<\ ¸ƒ ƒ 1D î |ƒ ©– \ ê0¡ h⇠(∞!). î ‹(–⌧ ¸¥ƒ ‹(| î ƒÙ ¡ – ‰QXî h⇠‰. “ê0¡ (Autocorrelation)”@ ƒÙ¡ X ⇣ ‰x tÑ<\, ‹( 1t D– L T Œt ¨ ©⌧‰. StatsModelsî ?? – å¿– ¨©àîp, ê0¡ | ÏhXÏ ‹ƒÙÑ – h⇠ƒ ⌧ı\‰. h⇠| ƒ∞Xî acf import statsmodels.tsa.stattools as smtsa acf = smtsa.acf(filled.resid, nlags=365, unbiased=True) acfî ƒÙ¡ D 0 ‹(Ä0 nlagsL¿ ƒ∞\‰. unbiased ò¯5X@ acf – \¯l0– \ î ✓D Ù Xå \‰. ∞¸î ¡ 0Ùt‰. Ã} ‡à» » – \ |ƒ ©D ›X‡, 1, 7, 30, 365 ‹(– \ ¡ D îú\‰ t, acf@ SerialCorrî ¸¨ <\ pX Ÿ|\ ∞¸| ∞ú\‰. >>> acf[0], acf[1], acf[7], acf[30], acf[365] 1.000, -0.029, 0.020, 0.014, 0.044 lag=0<\, acf ¯x¸ ƒÙ ¡ D ƒ∞Xîp, m¡ 1 t‰. ¯º ?? (|∏)–î nlags=40 ‹(\ 3⌧ ໠ \ ê0¡ h⇠| ÙÏ ‰. å…¿Ì–î Ã} ‰⌧ ê0¡ t ∆‰t ¡⇠î ‹ ¿Ÿ1t ò¿ ò à‰; t î⌅ – àî ¥ê Étò p-✓t 5%Ù‰ ëD⌧ µƒ X1t à‰. p”ë1(false positive) 5% t‡ 120⌧ ¡ (3⌧ ‹ƒÙ– t⌧ ‹( 40)D ƒ∞X0 L8–, t lÌ – } 6⌧ ⇣t ¡⌧‰. ¨‰ 7⌧ ⇣t à‰. t‰ ‹ƒÙ–î ∞<\ $Ö ⇠ ∆î ê0¡ t ∆‰‡ ∞`∏‰. î(| ¨\¯îút⌧ å› ¿ÌD ƒ∞à‰. T‹î timeseries.py à‰; h⇠î SimulateAutocorrelation‰. |– 158 ⌧ 12 •. ‹ƒÙ Ñ ƒ 1Ñt àD L, ê0¡ h⇠ ¥§ êåx¿ ¥¥Ù0 ⌅t⌧, ¸ƒ ¸0| Tt⌧ ®X ‹ÿ pt0| ›1à‰. » ⇠î ¸–– T 퉇 Xt, ©t T íD É<\ ¡` ⇠ à‰. ®¸| ®X ‹ÿX0 ⌅t ⌧, î| 9@ †î| †‹| ›X‡, ©– $0 –⌧ $2 L¿ ‡ÒÑÏ–⌧ îú\ ÑX aD T\‰. def AddWeeklySeasonality(daily): frisat = (daily.index.dayofweek==4) | (daily.index.dayofweek==5) fake = daily.copy() fake.ppg[frisat] += np.random.uniform(0, 2, frisat.sum()) return fake frisatî Ä∏ ‹¨à\, Ã} Ï|t î| 9@ †î|tt, 8(True)t‰. fakeî » pt0⌅ Ñ<\ –ò daily ı¨¯<\ ppg– U`✓(random value)D Tt⌧ ¿Ω\‰. frisat.sum()@ î|¸ †î| ⌅¥ /⇠\ › 1t|Xî U`✓ /⇠ ⌧‰. ¯º ?? ($x∏)–î ®X‹ÿ ƒ 1D î ©– \ ê0¡ h⇠ ò ¿ò à‰. ¡àÔt, ‹( 7X Òt L • í‰. ‡ ¸ ⌘ à»– t ‡‹ ¡ t µƒ X1t à‰. à»– ⌧î X t¿ J@p t î t  î( l0 L8t‰; °LD ´‡ ÙÏ¿0 ⌅t⌧î ®¸ T ‰|\‰. ⌧8 ! (Prediction) ‹ƒÙ Ñ @ ‹⌅– ¿TXî ‹§\ âŸD p¨X‡ LL\ $ÖXîp ¨ © ⇠ à‰. ⇣\ !ƒ ` ⇠ à‰. ?? –⌧ ¨©\ å¿î !– ¨© ⇠ à‰. RegressionResults tò§ – predict| ¨©t⌧ $Ö¿⇠| ÏhXî pt0⌅ ÑD xê\ D ! ‹ §| ⇠X\‰. ‰L– T‹ à‰. def GenerateSimplePrediction(results, years): n = len(years) inter = np.ones(n) d = dict(Intercept=inter, years=years) predict_df = pandas.DataFrame(d) predict = results.predict(predict_df) return predict resultsî RegressionResults ¥‰; yearsî !X$î ‹⌅ ✓ ‹ §‰. h⇠ pt0⌅ ÑD ›1X‡ predict– ⌅ÏX‡ ∞¸| ⇠X\‰. 8. ! (Prediction) 159 Ã} –Xî ®‡ Ét, XòX \ D ‰\ !t|t, DÃà‰. X¿Ã, Ä Ñ © – t⌧, $(| …TXî Ét ⌘îX‰. ‰x –\, !t º»X U1t àî¿ L‡ˆ‰. ‡$t| Xî $X –út 3 ¿ à‰. • \—$( (Sampling error): !@ î ®⇠– 0⇠Xîp, î ®⇠î \¯ U`¿Ÿ– Xt\‰. Ã} ‰ÿD ‰‹ ‰‹\‰t, î ✓t ¿T` É<\ ¡⌧‰. • U`¿Ÿ (Random variation): $¨ î ®⇠ DΩ`¿|ƒ, ! p t0î •0î8¸¿–⌧ U` <\ ¿ŸX‡ tÏ\ ¿Ÿ@ ¯ò–ƒ ƒç É<\ ¡⌧‰. • ® T $( (Modeling error): •0 î8 t D»|î ùp| t¯ $‰. ¯ò⌧ ® – 0⇠\ !@ ∞m ‰(` Ét‰. ‡$` ⇣ ‰x $X –ú@ ¡X ª\ ¯ò ¨tt‰. ç∞< ©@ †(– •D ‡, ®‡ ©@ X@ ï– •X– à‰. t ED —DX‡ àD L, » î ¯m P¸–⌧ iït‡, Xé <\ 20⌧ t¡ ¸–⌧ iït ‰. Ã} T Œ@ ¸ iïT\‰t, ©@ ¥$ Ét‰. X¿Ã, ) Ä Ëç\‰t, ©t XüD¿ ®x‰. ® T $( (modeling error)@ ¡X ª\ ¯ò ¨t@ …TX0 ¥5»‰. \—$(@ U`¿Ÿ@ ‰Ë0 T }‰. ¯ò⌧ < tÉD ‰⌅Ùê. \—$(| …TX0 ⌅t⌧, ?? –⌧ àX Éò¸ ¨\¯îúïD ¨©\ ‰. ò ¯⌥Ôt, © @ Ã} ‰ÿD ‰‹ ‰â\‰t 4«t ⌧›` Éx¿ ®X ‹ÿXîp ‰⌧ !⇣D ¨©Xî Ét‰. ®X‹ÿ@ î ®⇠ fi¿Ã U ` î( ‰| ⇠ à‰î – 0⇠\‰. Ï0 ®X ‹ÿD ⇠âXî h⇠ à‰. def SimulateResults(daily, iters=101): model, results = RunLinearModel(daily) fake = daily.copy() result_seq = [] for i in range(iters): fake.ppg = results.fittedvalues + Resample(results.resid) _, fake_results = RunLinearModel(fake) result_seq.append(fake_results) return result_seq 160 ⌧ 12 •. ‹ƒÙ Ñ dailyî ! ©D ÏhXî pt0⌅ Ñt‰; itersî ®X ‹ÿ` ü⇠‰. SimulateResultsî ?? \Ä0 RunLinearModelD ¨©t⌧ 0@ ∏D î \‰. Ë⌅| ⇠ı` L»‰, î(| ¨\¯îúX‡ KD ›1\‰. ¯¨‡ ò⌧, “fake” pt0– Results ¥– •\‰. !✓X 0∏ i✓– Tt⌧ “fake” pt0 ® D ‰âX‡ Regression- ‰L ˃\ !D ›1Xîp ®X ‹ÿ ∞¸| ¨©\‰. def GeneratePredictions(result_seq, years, add_resid=False): n = len(years) d = dict(Intercept=np.ones(n), years=years, years2=years**2) predict_df = pandas.DataFrame(d) predict_seq = [] for fake_results in result_seq: predict = fake_results.predict(predict_df) if add_resid: predict += thinkstats2.Resample(fake_results.resid, n) predict_seq.append(predict) return predict_seq GeneratePredictionsî t⌅ ˃–⌧ ∞¸ ‹ § –à D»| !D ›1 ` l⌅D Ö‹Xî ÄŸå⇠⇣ ‹ § years, ¯¨‡ ¨\¯îú î( ¡ !– î t| Xî¿| –¿| ò¿¥î add_residD xê\ î‰. GeneratePredictions@ RegressionResults ‹ §| ⇠ıt⌧ ! ‹ §| ›1\‰. »¿…<\, ‰L– !<\ 90% ‡∞l⌅D o<\ ¯¨î T‹ à‰. def PlotPredictions(daily, years, iters=101, percent=90): result_seq = SimulateResults(daily, iters=iters) p = (100 - percent) / 2 percents = p, 100-p predict_seq = GeneratePredictions(result_seq, years, True) low, high = thinkstats2.PercentileRows(predict_seq, percents) thinkplot.FillBetween(years, low, high, alpha=0.3, color='gray') predict_seq = GeneratePredictions(result_seq, years, False) low, high = thinkstats2.PercentileRows(predict_seq, percents) thinkplot.FillBetween(years, low, high, alpha=0.5, color='gray') 8. ! (Prediction) ¯º 12.6: ò¿ƒ. 161 i– 0 \ !, \—$(@ ! $(– 0x\ ¿Ÿ1D PlotPredictionst GeneratePredictionsD Pà 8ú\‰; \à@ add_resid=Truet‡, ‰x \à@ add_resid=Falset‰. PercentileRows| ¨©t⌧ Dƒ– t⌧ 5à¯@ 95௠1Ñ⌅⇠| ›\‰. ¯¨‡ ò⌧, Ωƒ ¨t å…¿ÌD o<\ ¯∞‰.. ¯º ??– ∞¸ ò@ à‰. Ÿ@ å… ¿Ìt \—$(– \ 90% ‡∞l⌅D ò¿∏‰; â, \—L8– î 0∏0@ ∏– \ àU‰1. @ ¿Ì@ Ÿ it‰. ! $(– \ 90% ‡∞l⌅D Ùϸîp, \—$(@ U`¿ t‰ ¿Ìt \—$(, U`¿ŸD …TX¿Ã, ® T $Xî …TX¿ J î‰. |⇠ <\ ® T $Xî …TX0 ¥5‰. X¿Ã, tΩ∞– \å\ $( –ú Xò( !X ª\ xÄ ¨t)î ‰ ⇠ à‰. å¿ ® @ ‹§\t ¡1(stationary, ‹à¿)t à‰î – 0⇠\‰; â, ® ®⇠î ‹⌅– 0| ¿X¿ Jî‰. ÄT l¥ <\, 0∏0@ ∏ –à D»| î( Ñσ | X‰‡ \‰. X¿Ã, ¯º ??– àî tŸ …‡D ¥¥Ùt, \å\ ! 0⌅ŸH \à 0∏ 0î ¿X‡ î( Ñ∞t ƒ⇠ÄÙ‰ ⌅⇠Ä–⌧ T p Éò¸ Ùx‰. ∞¸\, î \ ®⇠î ! 0⌅– Xt1t à‰. tÉt !– º»ò Œ@ ®¸| î¿ ¥¥Ù0 ⌅t⌧, ‰x ‹ë¸ Öà †‹| î ! l⌅D ¨ ©Xƒ] SimulateResults| •\‰. l⌅@ timeseries.py |– à‰. ¯º ??– ⌘⌅ à» » – \ ∞¸ ò@ à‰. ⇧@ å… lÌt ‡∞l 162 ⌧ 12 •. ‹ƒÙ Ñ ¯º 12.7: i– 0 \ !, ⌅D Ùϸîp \—$(, U`¿Ÿ, \‰. !⇣ ⌅©– 0x\ ¿Ÿ1D ò¿ƒ. !l⌅ ¿Ÿ<\ x\ àU‰1t Ïh ⌅¥ l⌅– 0⇠\ ® t ë⇠ 0∏0| ‡ àîp, ©t $t‡ à‰î ÉD ò¿∏‰. X¿Ã, • \‡ l⌅@ X}Xî © ‡8| ÙÏ ‰. ¯ò ⌧ • \‡ pt0– 0⇠\ ® @ L⇠ 0∏0| î‰. ∞¸\, • Ìt ⌫@ l⌅@ ¥D– X}Xî © •1D Ïh\‰. ⌧9 }0 î ‹ƒÙ Ñ @ p ¸⌧‰; tà •–⌧ Ë¿ \tà »D –t‰. ‹ƒÙ pt 0\ ë≈Xîp ⌘î\ ƒlî ê0å¿\ Ï0⌧î ‰Ë¿ JX‰. \–Xt, ë≈\ ⌧ pt0– ¨©X0– iX¿ JX0 L8t‰. X¿Ã, t•– àî ¥©| YµXt, ê0å¿| Yµ` D ⌧ Ét‰. î úXî \ P¨î Philipp Janert \ E, Data Analysis with Open Source Tools O’Reilly Media, 2011. ‹ƒÙ– \ •–⌧ Ï0⌧ ‰Ë¿ Jî ¥©D Yµ` ⇠ à‰. ⌧ 10 t µ8⌧– µ8⌧ \ ê tı@ chap12soln.py– ò@à‰. Exercise 12.1 tà •–⌧ ê ¨©\ ® @ t|î Ö1\ ∞⇣t à‡, ©t ‹⌅– 0| <\ ¿` Ét|‡ !` t î ∆‰. ?? –⌧ àX Éò¸, 2(mD î t⌧ ® – 1D T` ⇠ à‰. 11. ©¥ ¨⌅ 163 2( ® D ¨©t⌧ ‹ƒÙ |ƒ ©D i` ⇠ à‡, ® D ¨©t⌧ ! ✓ƒ ›1` ⇠ à‰. 2( ® D èî RunLinearModel Ñ<D ë1t|` Ét‰. X¿Ã, !D ›1Xîp timeseries.py– ò( T‹| ¨¨©` ⇠ ƒ à‰. Exercise 12.2 ?? – ò( HypothesisTestD U•Xî tò§| XXîp Öm@ SerialCorrelationTestt‰. pt0\ ‹ƒÙ¸ ‹((lag)| D⌧, ¸¥ƒ ‹(| î ‹ƒÙ pt0X ƒÙ¡ D ƒ∞X‡ ò⌧, !⌧ ¡ – \ p-✓D ƒ∞\‰. t tò§| ¨©t⌧ – © pt0– ò( ƒÙ ¡ t µƒ <\ X x ¿ Ä \‰. ⇣\, ® ¸ (Ã} t⌅ ⌧| ⇠âà‰t) 2( ® X î(| Ä \‰. Exercise 12.3 !D É¥ ¥îp, EWMA ® D U•Xî á ¿ )›t à‰. • Ë⌧\ )ï⌘X Xòî ‰L¸ ⇡‰: 1. ‹ƒÙ EWMA| ƒ∞X‡, • »¿… ⇣D ∏ inter<\ ¨©\‰. 2. ‹ƒÙX ç îå¨t– EWMA (t| ƒ∞X‡, ∏0 slope\ ¨©\‰. 3. ¯ò ‹⇣– ✓D dtî ! ‹⇣¸ • »¿… ⇣D 0 !Xîp, inter + slope * dtD ƒ∞\‰. Ï0⌧ • »¿… ! ‹⇣X (t‰. t )ïD ¨©t⌧, »¿… å‹î ‰L¸ ⇡‰: !⇣ ‰L ƒ– \ !D ›1\‰. á ¿ • timeseries.FillMissingD ¨©t⌧ Ñ D è0 ⌅– ∞!✓D Dà #î‰. t )›<\ ç⌧ îå✓ ¨t ‹⇣t |X\‰. • Series.diffD ¨©t⌧ ç⌧ îå ¨t (t| ƒ∞\‰. • reindexD ¨©t⌧ pt0⌅ ÑD ¯ò\ •\‰. • fillnaD ¨©t⌧ ⌧ 11 !\ ✓D pt0⌅ Ñ– #î‰. ©¥ ¨⌅ • ‹ƒÙ(time series): ✓t ‹⌅ƒ•(timestamp)¸ ⌧ pt0K. Ö Ö ! ✓¸ î—⌧ ‹⇣ ƒÙ. • ƒ∞ (window): tŸ …‡D ƒ∞Xî ÖÖ ¨©⇠î ‹ƒÙ– ç✓ ‹ §. 164 ⌧ 12 •. ‹ƒÙ Ñ • tŸ…‡ (moving average): π–¿¿ Jî |(X ƒ∞– \ …‡D ƒ∞h<\h ‹ƒÙ– †¨Xî î8| î Xîp ¨©⇠î ÏÏ µƒ … ⌘X Xò. • tŸ…‡ (rolling mean): ƒ∞ …‡✓– 0⇠\ tŸ…‡. • ¿⇠ ⌘tŸ…‡ (exponentially-weighted moving average, EWMA): ⌘…‡– 0⇠\ tŸ…‡<\ • \¸ ✓– • í@ ⌘X| P‡, t⌅ ✓– t⌧î ¿⇠ <\ ⌅¥‹î ⌘X| T‰. • §, (span): ⌘X º»ò h¨ ⌅¥‹î¿| ∞ Xî EWMA ®⇠. • ƒÙ¡ (serial correlation): \ ‹ƒÙ¸ tŸ⌧ 9@ ‹(tŸ\ ê‡ ‹ƒÙ¸ ¡ . • ‹( (lag): ƒÙ ¡ 9@ ê0¡ –⌧ tŸ l0. • ê0¡ (autocorrelation): ÑX ‹(| x ©¥. î ƒÙ¡ – \ ÄT |⇠ • ê0¡ h⇠ (autocorrelation function): ‹(–⌧ ƒÙ¡ <\ ‰QX î h⇠. • ¡1 (stationary): Ã} ®⇠@ î( ÑÏ ‰t, ® t ¡1t à‰. ‹⌅– 0| ¿TX¿ Jî ⌧ 13 • ›tÑ ›tÑ (Survival analysis)@ 4∏ º»ò ¿çXî¿| 0 Xî )ït ‰. ÖÖ ¨å ›Ö l– ¨©⇠¿Ã, ⇣\ 0ƒò ⌅ê ÄàX “›t(survial)” 9@ ÄT |⇠ <\ ¨t ⌅ ‹⌅ ⌅©–ƒ ©⌧‰. Ã} ÏÏÑt L‡ àî ⌅p ›ÖD ⌅⌘Xî »—D ƒË X‰t, “5D › t( (5-year survival rate)”D ‰¥$D¿ƒ ®x‰. ƒË ƒ– 5DD ›t` U`t‰. t î ✓¸ (⌧ µƒ…t ›tÑ ∞¸‰. tà •–⌧ ¨©⇠î T‹î survival.py– à‰. T‹| ‰¥\‹X‡ ë≈ Xî É– \ Ùî ??D 8p\‰. ⌧1 ›t· (Survival curves) ›tÑ – 0¯ ⌧P@ ›t· (survival curve) S(t)\, tç t| tÙ‰ T $ò ›t` U`\ ‰QXî h⇠‰. Ã} tç(duration) ÑÏ â, “⇠Ö(lifetimes)”D L‡ à‰t, ›t· D >î É@ }‰; CDFX ÏÑÏ(complement) ⌧‰. S(t) = 1 CDF(t) Ï0⌧, CDF (t)î tÙ‰ pò ⇡@ ⇠Ö U`t‰. | ‹¥, NSFG pt0K–⌧ 11189 ú∞ tç0⌅D L‡ à‰. t pt0| }¥⌧ CDF| ƒ∞` ⇠ à‰. preg = nsfg.ReadFemPreg() complete = preg.query('outcome in [1, 3, 4]').prglngth cdf = thinkstats2.Cdf(complete, label='cdf') 166 ⌧ 13 •. ›tÑ ¯º 13.1: ч0⌅– \ CDF@ ›th⇠(⌅Ω), ⌅ÿh⇠(DòΩ). ∞¸ T‹(outcome code) 1, 3, 4@ ¡ú∞, ¨∞, ∞D ò¿∏‰. Ñ D ⌅t⌧ ⌧ ∞(induced abortion), êÅx ч(ectopic pregnancy), ¯¨‡ Qıê@ x0⌘– ч¡‹x Ω∞î ⌧x\‰. pt0⌅ Ñ Tÿ‹ queryî Ä∏ \⌅›D xê\ 8(True)D ∞úXî âD ›\‰. D⌧ ⻉ … X‡ ¯º ?? (¡Ë)– ч0⌅ CDF@ ›th⇠x ¡Ù CDF Ùσ‰. ›th ⇠| \⌅X0 ⌅t⌧, ¥| Xt⌧ Cdf| òQ(wrapping) x0òt§| p XÏ fiò‰(adapt). class SurvivalFunction(object): def __init__(self, cdf, label=''): self.cdf = cdf self.label = label or cdf.label @property def ts(self): return self.cdf.xs @property def ss(self): return 1 - self.cdf.ps SurvivalFunctionî ⌅\|(property)| P⌧ ⌧ı\‰; tsî ⇠Ö ‹ § ‡, ssî ›th⇠‰. tl–⌧ “⌅\|(property)”î »X ¿⇠ò¸ 8ú 2. ⌅ÿ h⇠ (Hazard function) 167 ` ⇠ àî Tÿ‹‰. ⇠Ö CDF| xê\ ⇠@<\h SurvivalFunction| x§0§T` ⇠ à‰. sf = SurvivalFunction(cdf) ⇣\ SurvivalFunctionî __getitem__@ ProbD ⌧ıXîp ›th⇠| … \‰. # class SurvivalFunction def __getitem__(self, t): return self.Prob(t) def Prob(self, t): return 1 - self.cdf.Prob(t) | ‰¥, sf[13] î ч 0 3⌧‘D ¿ú ч D(t‰. >>> sf[13] 0.86022 >>> cdf[13] 0.13978 } 86% чt ´ 3⌧‘D ¿¨‰; } 14% ¯⌥¿ ªX‰. SurvivalFunctionî Render 0•à‰. ¯ò⌧, thinkplot– h⇠| ¨©t⌧ sf oD ¯¥ ⇠ à‰. thinkplot.Plot(sf) ¯º ?? (¡Ë)– ∞¸ ò@ à‰. · @ pX 13¸(–⌧ 26¸(î pX ……t⌧, ч ⌘0–î ч áá¨@ à ⌘Ë⇠î ÉD ÙÏ ‰. ¯¨‡, · t 39¸(– • xp • T\ ч0⌅t‰. ⌧2 ⌅ÿ h⇠ (Hazard function) ›th⇠–⌧ ⌅ÿh⇠(hazard function)| ƒú` ⇠ à‰; ч0⌅– t ⌧, ⌅ÿh⇠î ‹⌅ t–⌧ tL¿ ƒç⇠‡ ò⌧ t–⌧ ]òî ч D(t‰. ÄT UXåî ‰L¸ ⇡‰. l(t) = S(t) S ( t + 1) S(t) Ñêî PMF(t)\ t–⌧ ]òî ⇠Ö D(t‰. SurvivalFunctionî MakeHazard h⇠| ⌧ıXîp, ⌅ÿ h⇠| ƒ∞\‰. 168 ⌧ 13 •. ›tÑ # class SurvivalFunction def MakeHazard(self, label=''): ss = self.ss lams = {} for i, t in enumerate(self.ts[:-1]): hazard = (ss[i] - ss[i+1]) / ss[i] lams[t] = hazard return HazardFunction(lams, label=label) HazardFunction ¥î ⇣‰§ ‹¨à – \ ©|‰. class HazardFunction(object): def __init__(self, d, label=''): self.series = pandas.Series(d) self.label = label dî T ¨ 9@ ⇣‰x ‹¨à| Ïht⌧ ‹¨à| 0T` ⇠ àî ‰x ¥ § êà ƒ ⇠ à‰. label@ o<\ ¯ºD ¯8D L, HazardFunction D ›ƒXîp ¨©⇠î 8êÙt‰. HazardFunction@ __getitem__D ⌧ıt⌧, ‰L¸ ⇡t … ` ⇠ à‰. >>> hf = sf.MakeHazard() >>> hf[39] 0.49689 So of all pregnancies that proceed until week 39, about 50% end in week 39. ¯º ?? (Dò)– ч 0⌅– \ ⌅ÿh⇠ Ùσ‰. ч 42¸( tƒ ‹ ⌅– t, ⌅ÿh⇠ à‹Y\p, @ ¨@– 0 X0 L8t‰. ¯ ÄÑD ⌧xX‡, · ®ë@ ¡\ ɸ ⇡‰; } 39¸(– • í‡, ч ⌘0Ù‰ 0– }⌅ T í‰. ⌅ÿh⇠î ¯ê¥\ Xîp ⌘î\ ƒl ⌧3 ›t· ©X¿Ã, ⇣\ ‰L ⌧‰. –⌧ ¥¥ÙÔt, ›t· D î î X0 Ã} ⌅p ÏÏÑ–å ⇠Ö CDF| ‰t, ›th⇠@ ⌅ÿh⇠| ƒ∞X0 î }‰. X¿Ã, Œ@ ⌅‰ ‹ò¨$–⌧, ¡⌘ ⇠ÖÑÏ| ! ` ⇠î ∆‰. ît|à \‰. 4. ê Ä-»t¥ î (Kaplan-Meier estimation) 169 | ‰¥, ƒË§– º»ò $ú0⌅ŸH Xê ›tXî¿ ¥¥Ù0 ⌅t⌧ \ Xê—ËD î p¨\‰‡ Xê. ®‡ Xê Ÿ|\ †– ƒË @ É @ D»‰. ¯ò⌧ ‹⇣ D4Lò |Ä Xê ‰x XêÙ‰ƒ T $ò ›t\‰. Ã} Xê |Ä ˝î‰t, ˝@ Xê ›t‹⌅D Lå⌧‰. Ï⌅à ¥D àî Xê– t⌧, ›t‹⌅D L¿ ªX¿Ã, ›t‹⌅ X\– \ Ùî å ⌧‰. Ã} ®‡ Xê ˝D LL¿ 0‰∞‰t, ›t· D ƒ∞` ⇠ à‰. X¿Ã, »\¥ ò¨(treatment)– \ ®¸1D … \‰t, ¯⌥å $ò 0‰¥ ⇠î ∆‰. àD⌅\ Ù (incomplete information)| ¨©t⌧ ›t· D î ` )ït DîX‰. ÄT Ö…\ ⌧\, NSFG pt0| ¨©t⌧ Qıê < LL¿ º»ò $ ò “›t(survive)”Xî¿ …T` Ét‰. Qıê 9 î⌅î 148–⌧ 44 8L¿‰. ¯ò⌧, pt0Kt |›–⌧ ⌧\‰x ˃– àî Ï1X §Ì˜ (snapshot) Ù| ⌧ı\‰. ∞<\ Ï1– t⌧, pt0K–î < †‹@ ¯ ˘‹ 9 Ù Ïh⇠¥ à‰. ∞<X¿ J@ Ï1– t⌧î x0àD ˘‹ 9 Ù à¿Ã, ∏⌧ 9@ ∞<D ` Éx¿ L ⇠ àî )ït ∆‰. áá Ï1– \ < 9D L‡ à0 L8–, ò8¿| ⌧xX‡ Ù àî pt0 CDF| ƒ∞X‡ ˆ@ 9t à‰. tÉ@ ‰∞ å¡X¿ ªX‰. ∞ ¸ P ¿ )•–⌧ òª ƒú ⇠ à‰; (1) ÄT òt Œ@ Ï1t T Œt \ \¯<\ ⇠îp, x0 ˘‹ ÄT ∞<` É ⇡0 L8t‰. (2) ∞<\ Ï1t T Œt \ \¯t Ét‰. ¨‰, Ñ ∞¸ ®‡ Ï1@ ∞<\‰î ∞`t ƒú Ét‰. X¿Ã ÑÖXå ¿8‰. ⌧4 ê Ä-»t¥ î tion) (Kaplan-Meier estima- tà ⌧–⌧, ∞<X¿ J@ Ï1 ! Ù| ÏhXî É@ å¡` –à D»| Dî\p t î ›tÑ –⌧ ⌘Ï x L‡¨ò ⌘X Xòx ê Ä»t¥ î (Kaplan-Meier estimation)¸ ∞⇠0 L8t‰. |⇠ x › @ pt0| ¨©t⌧, ⌅ÿh⇠| î X‡ ò⌧, ⌅ÿh⇠| › th⇠\ ⌅X\‰. ⌅ÿh⇠| î X0 ⌅t⌧, 9ƒ\ ‰LD ‡$\‰. (1) ¯ 9– ∞<\ Ï1 +ê, (2) ∞< “⌅ÿ ¡‹(at risk)”– àî Ï1 +ê\ t⌅ 9–⌧ ∞<X¿ J@ ®‡ Ï1t Ïh⌧‰. ‰L– T‹ à‰. 170 ⌧ 13 •. ›tÑ def EstimateHazardFunction(complete, ongoing, label=''): n = len(complete) hist_complete = thinkstats2.Hist(complete) sf_complete = SurvivalFunction(thinkstats2.Cdf(complete)) m = len(ongoing) sf_ongoing = SurvivalFunction(thinkstats2.Cdf(ongoing)) lams = {} for t, ended in sorted(hist_complete.Items()): at_risk = ended + n * sf_complete[t] + m * sf_ongoing[t] lams[t] = ended / at_risk return HazardFunction(lams, label=label) completeî DΩ\ ! —Ët‰; t Ω∞– Qıê ∞<àD L 9t ⌧ ‰. ongoing@ DΩX¿ ª\ ! —Ët‰; t Ω∞– x0| àD L ¯<x Ï1 9t ⌧‰. < , Qıê ∞<àD L 9 Histx hist_complete, ∞<\ Ï1– \ › th⇠, sf_complete, ¯< Ï1– \ ›th⇠ sf_ongoing| ¯¨ ƒ∞\‰. Qıê ∞<àD L Ë⌅î 9D ⇠ı\‰. t ✓– t, t 9–⌧ ∞< \ Ï1 +êx ended à‰. ¯¨‡ ò⌧ ‰LX i<\ “⌅ÿ ¡‹(at risk)” Ï1 +ê| ƒ∞\‰. • ended, 9 t–⌧ ∞<\ Qıê +ê. • n * sf_complete[t], 9 t §– ∞<\ Qıê +ê. • m * sf_ongoing[t], 9 t ƒ– x0\ ¯< Qıê +ê, ¯Ï¿\ t ‹⇣ 9@ t⌅– ∞<àî¿ L$¿¿ JX‰. ‹⇣ t– ⌅ÿh⇠ î ✓@ at_risk– lams@ ⌧5 \ endedX D(t‰. T ¨\ t–⌧ l(t)<\ ‰Q\‰. ∞¸î HazardFunction ∞< · ¥‰. (marriage curve) t h⇠| Ä X0 ⌅t⌧, pt0 ¿⇠î ‰L¸ ⇡‰. ⌧@ ¿XD ⇠ât| \‰. Dî\ NSFG 6. ›th⇠ î X0 171 • cmbirth: ®‡ Qıê– t⌧ L$ƒ, Qıê ›D‘|. • cmintvw: ®‡ Qıê– t L$ƒ, Qıê • cmmarrhx: L$8à‡ t˘⇠t, Qıê x0\ †‹. ´ <x\ †‹. • evrmarry: Ã} x0 †‹ t⌅– ∞<à‰t 1, ¯⌥¿ J<t 0. ´ ¿⇠ 8⌧î “80-‘(century-months)” )›<\ Ä8T⇠»‰; â, 1899D 12‘ tƒ ⇠ ⌧‘ +ê. ¯ò⌧, 80-‘(century-month) 1@ 1900D 1‘t ⌧‰. ´¯, Qıê |D }‡, cmmarrhx– àî ¿˘X¿ Jî ✓ (invalid value)D P¥\‰. resp = chap01soln.ReadFemResp() resp.cmmarrhx.replace([9997, 9998, 9999], np.nan, inplace=True) ¯¨‡ ò⌧, <x ˘‹– Qıê 9¸ x0 ˘‹ 9D ƒ∞\‰. resp['agemarry'] = (resp.cmmarrhx - resp.cmbirth) / 12.0 resp['age'] = (resp.cmintvw - resp.cmbirth) / 12.0 ‰L–, complete ¿⇠– ∞<\ Ï1– t⌧ ∞< ˘‹ 9 Ù| QD∏ ‰. ¯¨‡, ongoing ¿⇠– ∞<X¿ J@ Ï1– \ x0 ˘‹ 9 Ù| Ö\‰. complete = resp[resp.evrmarry==1].agemarry ongoing = resp[resp.evrmarry==0].age »¿…<\, ⌅ÿh⇠| ƒ∞\‰. hf = EstimateHazardFunction(complete, ongoing) ¯º ?? (⌅)– î ⌅ÿh⇠ ¯$8 à‰; 10 –î Ƈ, 20 –î T í‡, 30 –î ⇣å\‰. 40 – ‰‹ ù \‰. X¿Ã, tÉ@ î ¸ X ∞ú<t ‰; “⌅ÿ ¡i(at risk)” Qıê +ê ⇣åh– 0|, <x\ @ Ï1t í@ î ⌅ÿD ∞ú\‰. ›th⇠î tÏ\ °LD Ä‹˝å …\\‰. ⌧6 ›th⇠ î X0 ⌅ÿh⇠| å ⇠t, ›th⇠| î ` ⇠ à‰. t ‹⇣D ¿ò ›t` › 1@ ⌅‰ ¥D⌧ t ‹⇣L¿ ›t` ›1t ⇠îp, Ù⇠ ⌅ÿh⇠(complementary hazard function)X ⌅ Òt ⌧‰. [1 l(0)][1 l(1)]...[1 l(t)] HazardFunction tò§î ¡0 ⌅ ÒD ƒ∞Xî MakeSurvival h⇠| ⌧ı \‰. 172 ⌧ 13 •. ›tÑ ¯º 13.2: < 9– \ ⌅ÿh⇠(⌅Ω)@ ›th⇠(DòΩ). # class HazardFunction: def MakeSurvival(self): ts = self.series.index ss = (1 - self.series).cumprod() cdf = thinkstats2.Cdf(ts, 1-ss) sf = SurvivalFunction(cdf) return sf tsî ⌅ÿ h⇠ |⌧, ›th⇠ î ⇠î ‹⇣ ‹ §‰. ssî Ù⇠ ⌅ÿh⇠ ⌅ Òt‰. 0 ⌧‰. SurvivalFunction l⌅⇠î )› L8–, ss Ù⇠| ƒ∞X‡, Cdf| ɇ ò⌧, SurvivalFunction ¥| x§4§T \‰. ¯º ?? (Dò) – ∞¸ ¯$8 à‰. ›t· @ ÄÑX Ï1t ∞<Xî 25 8–⌧ 358 ¨t • t‰. 358–⌧ 458 ¨tî pX ……X‰. 358 ⌅– ∞<X¿ J@ Ï1t <|` É ⇡¿ J‰î ÉD ò¿∏‰. t@ ⇡@ · t 1986D Ö\ °¿0¨X 0 ⌧‰; t§⌅l(Newsweek) – 0tt, 408⌧ ¯< Ï1t <xÙ‰ƒ “LϨ§∏– Xt T ¥t •1”t à‰. tÏ\ µƒ…@ ⇣¨ Ùƒ⇠‡ ⌘ x 8T |ÄÑt ⇠»‰. X¿Ã, ¯Ï‡ ò⌧ òª⇠»‰(\–Xt, $X àî Ñ – 0⇠à0 L8t ‰) ¯¨‡, Ï¿¥ T òª⌧ É<\ L‰(t¯ ƒâ⌘t‡, ¿ç⇠î 8T ¿T L8t‰). 2006D t§⌅l(Newsweek)î Ùƒ òª⇠»‰‡ ‹xXî ⇣‰x 0¨| ‰»‰. t 0¨, 0¨X 0⇠t ⌧ µƒ…, ¯¨‡ ⇠Q– t T }¥Ù0| ©$\‰. ‡⌘à µƒÑ D ⇠âX‡, \ XÏ(appropriate skepticism)| ¿‡ 7. ‡∞l⌅ (Confidence intervals) ∞¸| t X‡, ıı–å UX‡ ⌘î1D ¡0‹0<t \‰. ⌧7 173 ¡Xå ⌧‹Xîp à¥, $¨ EÑX ‡∞l⌅ (Confidence intervals) ê Ä-»t¥ Ñ (Kaplan-Meier analysis)@ ›t· – \ Ë XòX î ✓D ∞ú\‰. X¿Ã, î ✓X àU‰1D …TXî Ƀ ⇣\ ⌘îX‰. ò ¯⌥Ôt, 8 ¿ $( –út à‰; ! $(, \—$(, ® T $(. tà ⌧–⌧, ! $(î µ ë‰. |⇠ <\, ¨åX ú›D‘, <xÏÄ, <x ‹⇣@ L‡ à‰. ¯¨‡, tÏ\ Ù| UXå Ù‡` É<\ ¡` ⇠ à‰. ¨\¯îú(resampling)D µt⌧ \—$(| à‰. …T` ⇠ à‰. ‰L– T‹ def ResampleSurvival(resp, iters=101): low, high = resp.agemarry.min(), resp.agemarry.max() ts = np.arange(low, high, 1/12.0) ss_seq = [] for i in range(iters): sample = thinkstats2.ResampleRowsWeighted(resp) hf, sf = EstimateSurvival(sample) ss_seq.append(sf.Probs(ts)) low, high = thinkstats2.PercentileRows(ss_seq, [5, 95]) thinkplot.FillBetween(ts, low, high) ResampleSurvival h⇠î Qıê pt0⌅ Ñ resp@ ¨\¯îú ü⇠ itersD xê\ î‰. ts| ƒ∞Xîp ›th⇠| … Xî 9 ‹ §‰. Ë⌅ ¥Ä–, ResampleSurvivalî ‰L¸ ⇡‰: • ?? –⌧ ¥¥¯ ResampleRowsWeightedD ¨©t⌧ Qıê| ¨\¯î ú\‰. • EstimateSurvival 8úXîp, ⌅ÿ· ¸ ›t· D î Xîp ^ ¸ D ¨©\‰. • ts– 9ƒ\ ›t· D … \‰. ss_seqî … ⌧ ›t· ‹ §‰. PercentileRowsî t ‹ §| D 5 à¯@ 95௠1Ñ⌅⇠| ƒ∞X‡, ›t· 90% ‡∞l⌅D ⇠X\‰. 174 ⌧ 13 •. ›tÑ ¯º 13.3: <9– \ ›th⇠@ ⌘ ¨\—– ¸p\ 90% ‡∞l⌅. ¯º ??– ^ –⌧ î \ ›th⇠@ hÿ ∞¸ ò@ à‰. ‡∞l⌅@ î · ¸ Ϩ \— ⌘X(sampling weight)| ‡$\‰. X ¨t– à|Xî \— ⌘X î ✓– ¡˘\ ®¸ àLD ò¿∏‰—t ¨‰D Pt| \‰. ⌧8 T8∏ ®¸ (Cohort effects) ›tÑ ƒ⌅⌘X Xòî î · X ‰x ÄÑt QıêX ‰x —Ë– 0⇠ \‰î Ét‰. ‹⇣ t– · ÄÑ@ x0 ˘‹– ¥ƒ Qıê 9t ¥ ƒ tx Qıê– 0⇠\‰. ¯ò⌧, · X • |Ω ÄÑ@ ®‡ Qıê\Ä0 pt0 Ïh⇠¥ à‡, • $xΩ–î • òt‡ Qıêà Ïh⌧‰. Ã} QıêX ( π1t ‹⌅– 0| ¿TX¿ Jî‰t, 8⌧ ⇠¿ J‡ ã‰. X¿Ã, t Ω∞– ‰x 8 – ‹¥ú Ï1– t⌧ <x (4@ ‰| É ⇡‰. ú›ƒ 10DD Ë⌅\ Qıê| —ËTt⌧ ®¸| p¨` ⇠à‰. ú› 9@ D∑\ ¨t<\ X⇠î t@ ⇡@ —ËD T8∏(cohorts)|‡ Äx‰. ¯¨‡, —Ë ⌅ (t| T8∏ ®¸ (cohort effects)|‡ Äx‰. NSFG <x pt0–⌧ T8∏ ®¸| p¨X0 ⌅t⌧, tE ⌅¥ <\ ¨© ⌧ 2002D p¨ ¨tt 6 pt0; ?? –⌧ ¨©⌧ 2006–2010 p¨ ¨tt 6 pt0; 1995D ¨tt 5 pt0| ⇠—à‰. ®P i– pt0K–î 30,769 Q ıê à‰. resp5 resp6 resp7 resps = = = = ReadFemResp1995() ReadFemResp2002() ReadFemResp2010() [resp5, resp6, resp7] 8. T8∏ ®¸ (Cohort effects) resp pt0⌅ Ñ– ÌDD ƒ∞\‰. 175 t⌧, cmbirth| ¨©t⌧ Qıê– \ ú› month0 = pandas.to_datetime('1899-12-15') dates = [month0 + pandas.DateOffset(months=cm) for cm in resp.cmbirth] resp['decade'] = (pandas.DatetimeIndex(dates).year - 1900) // 10 cmbirth@ 1899D 12‘ tƒ ⇠ ⌧‘⇠\ Ä8T⌧‰; month0î Timestamp ¥\ †‹| \⌅\‰. ú›|– t DateOffset| x§4§T X‡, 80-‘D ÏhX‡ month0– T\‰; ∞¸î Timestamps ‹ §\ DateTimeIndex\ ⌅X⌧‰. »¿…<\ year| îúX‡ ÌDË⌅\ ƒ∞\ ‰. \— ⌘X| ‡$X‡, \—$( L8– ¿Ÿ1D Ùϸ0 ⌅t, pt0| ¨ \¯îúX‡, ÌD Ë⌅\ Qıê| —ËTX‡, ›t· D o<\ ¯∞‰. for i in range(iters): samples = [thinkstats2.ResampleRowsWeighted(resp) for resp in resps] sample = pandas.concat(samples, ignore_index=True) groups = sample.groupby('decade') EstimateSurvivalByDecade(groups, alpha=0.2) 8⌧ NSFG ‹tt pt0î ⌧\ ‰x \— ⌘X| ¨©\‰. ¯ò⌧, ⌧ƒ <\ ¨\¯îúX‡ ò⌧, concat| ¨©t⌧, XòX pt0⌅ Ñ<\ — i\‰. ®⇠ ignore_indexî concat–å xq§\ Qıê| ‰mX¿ ªXå \‰; ‡– 0–⌧ 30768L¿ »\¥ xq§| ›1\‰. EstimateSurvivalByDecadeî ∞‰. T8∏– t⌧ ›t· D o<\ ¯ def EstimateSurvivalByDecade(resp): for name, group in groups: hf, sf = EstimateSurvival(group) thinkplot.Plot(sf) ¯º ??– ∞¸ ò@à‰. (4 á⌧ – Ùx‰. • 50D Ï1t • | ∞<à‡, ç T8∏ <x@ ⇣⇣ ¶¥¿‡, ¥ƒ 30 9L¿ ¯⌥‰. • 60D– ‹¥ú Ï1–î Ä|¥ (4t à‰. 258 t⌅– ¯⌅ 8 Ù‰ <x çƒ T ¶»‰. 258 tƒ–î <x çƒ T `t‰. 328Ω– î 50D T8∏| 0|°‡, 448Ω–î ¡˘à T ∞<¡‹– àD É ⇡‰. 176 ⌧ 13 •. ›tÑ ¯º 13.4: ⌧\ ‰x ÌDŸH ú›\ Qıê– \ ›th⇠. 60D ‹¥ú Ï1@ 1985D–⌧ 1995D ¨t 258| ⇠¥ ‰. ^⌧ ∏ \ t§⌅l (Newsweek) 0¨ 1986D– Ùƒ⌧ ÉD 0µXt, t 0 ¨ ∞<ê– Ë | ⌧ıà‰‡ ¡¡` »Lt ›4‰. t $Öt 4 l¥ Ét¿Ã, 0¨@ 0¨– Qt t T8∏ ⟖ •D ¸»‰î 0ÑD ò¿∏‰î Ƀ •X‰. • 70D (4ƒ D∑X‰. 258 t⌅– <xXî Ét ¯ ⌅8 à ªX‰. X¿Ã, 358Ω– t⌅ P8 T8∏| ®P 0|°î‰. • 80D› Ï1@ 258⌅– Ë, \ <x` É ⇡‰. tƒ– |¥ú É@ ÖÑ ÖX¿ J‰; NSFG ‰L ¨t¿ pt0| 0‰$|à \‰. ¯ŸH ⌧9 !ƒ ` ⇠ à‰. xΩï (Extrapolation) 70D › T8∏ ›t· @ } 388–⌧ ]ú‰; 80D › T8∏î } 288– ⌧ ]ò‡, 90D › T8∏î pX ¥§ êà ∆‰. t⌅ T8∏–⌧ pt0| “L$4(borrowing)”<\h t‰ · D xΩ(extrapolate)` ⇠ à‰. HazardFunction–î Extend Tÿ‹| ⌧ıXîp, ⇣‰ x T 4 HazardFunction–⌧ ,¨| ı¨\‰. # class HazardFunction def Extend(self, other): last = self.series.index[-1] 10. 0 177 ît ⇠Ö more = other.series[other.series.index > last] self.series = pandas.concat([self.series, more]) ?? –⌧ ¥¥$Ôt, HazardFunction@ t–⌧ l(t)\ ‰QXî ‹¨à| Ù ‡ à‰. Extendî self.series– »¿… xq§x last| >‡, last ‰L– $î ✓D other–⌧ ›X‡, self.series– gôx‰. t⌧ T8∏– •` ⇠ à‰. t⌧ t⌅ É–⌧ 8( ✓D ¨©t⌧ HazardFunctionD def PlotPredictionsByDecade(groups): hfs = [] for name, group in groups: hf, sf = EstimateSurvival(group) hfs.append(hf) thinkplot.PrePlot(len(hfs)) for i, hf in enumerate(hfs): if i > 0: hf.Extend(hfs[i-1]) sf = hf.MakeSurvival() thinkplot.Plot(sf) groupsî ú›D ÌD Ë⌅\ ò Qıê| î GroupBy ⌅ —Ë– \ HazardFunctionD ƒ∞\‰. ¥‰. ´à¯ Ë P௠Ë⌅ t⌅ 8 \Ä0 ✓(t⌅ —Ë<\Ä0 ✓D Ïh` ⇠ à‰)<\ HazardFunction| •\‰. ¯¨‡ ò⌧, HazardFunctionD SurvivalFunction\ ⌅XX‡ oD ¯∞‰. ¯º ??– ∞¸ ò@à‰; 50D › T8∏| ⌧pt⌧ !✓D ÄT ‹ <\ É»‰. t ∞¸ ‹¨Xî î, 408Ω– • \‡ T8∏î 60 T8∏– ⇠4Xîp, ∞T <xX¿ Jî D(@ 20% Ù‰ ‰. ⌧ 10 0 ît ⇠Ö ›t· t ¸¥¿t, ⌅¨ 9 h⇠\ 0 ît⇠ÖD ƒ∞` ⇠ à‰. | ‰¥, ?? –⌧ ч0⌅ ›th⇠ ¸¥¿t ú∞L¿ ¡‹⌅D ƒ∞` ⇠ à‰. ´Ëƒî ⇠Ö PMF| îú\‰. SurvivalFunction ⌧ı\‰. # class SurvivalFunction t| ⇠âXî Tÿ‹| 178 ⌧ 13 •. ›tÑ ¯º 13.5: ⌧\ ‰x ÌDŸH ú›\ Qıê– \ !. \ ›th⇠@ ƒ8 T8∏– def MakePmf(self, filler=None): pmf = thinkstats2.Pmf() for val, prob in self.cdf.Items(): pmf.Set(val, prob) cutoff = self.cdf.ps[-1] if filler is not None: pmf[filler] = 1-cutoff return pmf SurvivalFunctionî ⇠Ö Cdf| Ù‡ à‰î ÉD 0µX|. Ë⌅ Pmf\ ✓¸ U`D ı¨\‰. Cdf–⌧ cutoffî Cdf– • í@ U`\, Ã} Cdf D⌅X‰t 1t‡, ¯⌥¿ J‰ t 1Ù‰ ë‰. Ã} Cdf àD⌅X‰t, DÃX0 ⌅t ⌧ı⇠î ✓ filler| BD #î‰, ч0⌅ Cdfî D⌅X0 L8–, D¡@ tÏ\ 8ĨmL¿ q ` Dîî ∆‰. ‰L ˃î 0 ît⇠ÖD ƒ∞Xîp, Ï0⌧ “0 (expected)”î …‡D X ¯\‰. SurvivalFunction@ ⇣\ tÉD ⇠âXî Tÿ‹| ⌧ı\‰. # class SurvivalFunction def RemainingLifetime(self, filler=None, func=thinkstats2.Pmf.Mean): 10. 0 179 ît ⇠Ö ¯º 13.6: ч0⌅– \ ¡ îtÏÖ(å!), <L¿ ‹⌅(D, ∞!). pmf = self.MakePmf(filler=filler) d = {} for t in sorted(pmf.Values())[:-1]: pmf[t] = 0 pmf.Normalize() d[t] = func(pmf) - t return pandas.Series(d) RemainingLifetimeî xê\ MakePmf– ⌅Ï⇠î filler@, ît⇠Ö ÑÏ| î}Xîp ¨©⇠î h⇠ funcD xê\ î‰. pmfî SurvivalFunction–⌧ îú⌧ ⇠Ö Pmf‰. dî ⌅¨ 9 t–⌧ 0 î t⇠Ö<\ ‰Q ∞¸| Ù‡ à‰. Ë⌅ Pmf– ✓D ⇠ı Ã∞‰. t ✓– t, ⇠Öt t| ¸\ ÉD T ¡‹ –⌧, ⇠Ö ptÄÑÏ| ƒ∞\‰. Pmf–⌧ ✓D \à– Xò) ⌧pX‡, ®@ ✓D ‰‹ ‹Th<\h tÉD ⇠â\‰. ¯¨‡ ò⌧, func| ¨©t⌧, ptÄÑÏ| î}\‰. ¡0 ⌧–⌧, 0⌅t t| ¸àD L ∞¸î …‡Ñ‡0⌅t ⌧‰. t| |⌧, …‡îtч0⌅D ªî‰. ¯º ?? (|∏)– ⌅¨ ¿ç0⌅X h⇠\ 0 îtч0⌅t ò@ à‰. | ‰¥, 0¸(–î 0 ît0⌅t } 34¸ ⌧‰. tÉt Ã≠(39¸)Ù‰ Á@p t î ч 0– ч⌘ t …‡D Æî0 L8t‰. ч 0 0⌅– · t úúà ®¥ƒ‰. 13¸( §–î 0 ît⇠Öt 25¸ \ Ë¿ 9¸Ã ®¥ƒ‰. ¯ ƒ–, · @ ¸»‰ } 1¸) T h¨ ®¥ƒ‰. 180 ⌧ 13 •. ›tÑ 37¸–⌧ 42¸ ¨t, · @ 1¸@ 2¸ ¨t ⇠…D ¿\‰. t 0⌅ŸH D4 ‹⇣tò …‡ît0 ⇠Ö@ ⇡‰; ‰¸ ¿ò⇣– 0| ©\ Tt¡ L@¿ ¿ Jî‰. t@ ⇡@ π1D ƒ ¸ D 40µ1(memoryless)t|‡ Äx‰. t î ¸p !– D4 ®¸ ∆0 L8t‰. ↵ âŸt ∞Äx¸ ⌅8¨ X ©xXî Ã∏|X ⇠Y 0⇠t ⌧‰: “Á ¿ t|ƒ (any day now)” ¯º ?? ($xΩ)–î 9X h⇠\ <L¿ ⌘⌅⇠ ît‹⌅t ò@à‰. 11 ¥ å@–å <L¿ ⌘⌅⇠ ‹⌅@ } 14Dt‰. · @ ⌘⌅⇠ ît‹⌅t } 7D|L 228L¿ ⇣å\‰. ¯ ƒ– ‰‹ ,|⌅‰: òt 30– ‹ë\ 9 14 D<\ ‰‹ ù \‰. t pt0– 0⇠t⌧, ⌦@ Ï1@ ⇣åXî ît “⇠Ö”D î‰. t@ ⇡@ 1»D ƒ 0ƒÄàD NBUE(“new better than used in expectation")\ Ä x‰. »Äàt T $ò É<\ ¡⌧‰î X¯‰. 228 t¡⇠î Ï1@ <L¿ ù Xî ît‹⌅D î‰. t@ ⇡@ 1»D î ÄàD UBNE(“used better than new in expectation”)\ Äx‰. â, Ä àt $ò ⇠], T $ò É<\ ¡⌧‰. ‡›D@ TXê ⇣\ UBNE ‰; T $ò ¥⇠] t‰X 0 ⇠Ö@ ù \‰. t ⌧–⌧ Cdf à@⌅t⌧, …‡ ‡– ⌘⌅⇠| ƒ∞à‰; ›t· t } 20% Qıê 448 t⌅– ∞<X¿ JD É<\ î∞\‰. t Ï1– \ < 9@ L$8à¿ J‡, t¨X¿ JD¿ƒ ®x‰. ¯ò⌧ …‡D ƒ∞` ⇠ ∆‰. ¯¿✓(unknown value)D 4\ | ò¿¥î π⇠✓ np.inf\ ‘⌧ ¯¿ ✓D ò¨\‰. t⌥å Xt ®‡ 9– t⌧ …‡t 4\ ⌧‰. X¿Ã, ît⇠Ö 50% t¡t \(9 308L¿ ¨‰t‰)X0à Xt ⌘⌅⇠î ò X⌧‰. tƒ– X¯\ 0 ît⇠ÖD XXî É@ ¥5‰. ‰L– t‰ h⇠| ƒ∞X‡ o<\ ¯¨î T‹ à‰. rem_life1 = sf1.RemainingLifetime() thinkplot.Plot(rem_life1) func = lambda pmf: pmf.Percentile(50) rem_life2 = sf2.RemainingLifetime(filler=np.inf, func=func) thinkplot.Plot(rem_life2) sf1î ч 0⌅– \ ›th⇠‰; t Ω∞– RemainingLifetime– ✓D ¨©` ⇠ à‰. sf2î < 9– \ ›th⇠‰; funcî Pmf| xê\ 1Ñ⌅⇠)| ƒ∞Xî h⇠‰. 0$ D ⌘⌅⇠(50௠11. µ8⌧ ⌧ 11 181 µ8⌧ tà µ8⌧– \ ê tı@ chap13soln.py– ò@à‰. Exercise 13.1 NSFG ¸0 6¸ 7–⌧, cmdivorcx ¿⇠î QıêX Ã} ©⇠‰ t Dƒ-‘(century-month)\ Ä8T⌧ ´ <x– \ t< †‹ Ù| Ù‡ à‰. t<<\ ]òî ∞<0⌅¸ ¿ L¿ ¿ç⇠î <x 0⌅D ƒ∞X‹$. ∞< 0⌅– \ ⌅ÿh⇠@ ›th⇠| î X‹$. \— ⌘X| ‡$t⌧ ¨\—D ¨©X‡, \—$(| ‹ TXîp ¨\—< \ ò( \¯–⌧ pt0| ƒ›TX‹$. Qıê| 10D¸0 ú›<\ —ËTX‡, î ÉD ‡$\‰. ⌧ 12 •Xt ´à¯ <x 9<\ ò⌅ ©¥ ¨⌅ • ›tÑ (survival analysis): ⇠Ö, ÄT |⇠ <\ ¨tt |¥ò0L¿ ‹⌅D 0 X‡ !Xî )ï` —i. • ›t· (survival curve): ‹⇣ t– t| ¿ò ›t U`\ ‰QXî h⇠. • ⌅ÿh⇠ (hazard function): ‹⇣ t – t ‹⇣L¿ ›t\ ¨åt t ‹⇣– ¨›\ D(D ‰QXî h⇠. • ê Ä-»t¥ î (Kaplan-Meier estimation): ⌅ÿh⇠@ ›th⇠| î Xî L‡¨ò. • T8∏ (cohort): π —Ë. ‹⌅ l⌅– ›D‘| ⇡@ ¨t<\ X⌧ ⌧¥ • T8∏ ®¸ (cohort effect): T8∏ ¨t (t. • NBUE: 0 ît⇠Ö 1», “» Ét ¡X0– $ò⌧ ÉÙ‰ ã@ É (New better than used in expectation)” • UBNE: 0 ît⇠Ö 1», “$ò⌧ Äàt (Used better than new in expectation)” ¡X0– » ÉÙ‰ ã@ É 182 ⌧ 13 •. ›tÑ ⌧ 14 • )ï (Analytic methods) t tE@ ®X‹ÿtò ¨\¯îú⇡@ ⇠Xt )ï(computational methods)– —⌘à¿Ã, t∞\ 8⌧⌘ |Äî Ë,T `tå t∞` ⇠ àî t t(analytic solution)| ¿‡ à‰. tà •–⌧ t )ï |Ä| ⌧‹X‡, ¥ªå ŸëXî¿ $Ö\‰. t•– ¯– –… pt0 Ñ D ⌅t⌧ ⇠Xt )ï¸ t )ï µi– \ ⌧∏D \‰. tà •–⌧ ¨©⇠î T‹î normal.py– à‰. T‹| ‰¥\‹X‡ ë≈Xî É– \ Ùî ??D 8p\‰. ⌧1 ‹ÑÏ Ÿ0ÄÏ| ⌅\ ¨@\, ?? – àX 8⌧| ĆXê. |›Ÿ< Ù8l–⌧ ‡¥|| lXî ¸Yê à‰‡ Xê. ‡¥| 9»¨ ¥⌘D ¨⌧, \¯…‡ x̄ = 90 kg@ \¯ \ ∏( S = 7.5 kgD ª»‰. Ã} x̄| ®—Ë …‡<\ î \‰t, î ✓ X \ $(î º»ò L? t »8– ıX0 ⌅t⌧, x̄ \— ÑÏ DîX‰. ?? –⌧, (‡¥| 9»¨ ¥⌘D ¨î) ‰ÿD ®X‹ÿh<\h ÑÏ| ¸¨à‡, ®X‹ÿ ‰ÿ– t⌧ x̄| ƒ∞X‡, î ✓ ÑÏ| ï à‰. ∞¸î \—ÑÏ| ¸¨à‰. ¯¨‡ ò⌧, \—ÑÏ| ¨©t⌧ \ $(@ ‡ ∞l⌅D ƒ∞à‰. 184 ⌧ 14 •. t )ï (Analytic methods) 1. \—ÑÏ \ ∏(î î ✓X \ $(‰; t Ω∞ } 2.5 kgt ⌧‰. 2. 5à¯@ 95௠1Ñ⌅⇠ \—ÑÏ l⌅t 90% ‡∞l⌅t ⌧‰. Ã} ‰ ÿD Œt ⇠â\‰t, î ✓t 90% ‡∞l⌅– ®¥» É<\ ¡\‰. t Ω∞ 90% CIî (86, 94) kgt ⌧‰. t⌧ t <\ Ÿ|\ ƒ∞D ⇠â\‰. 1x Ï1 ‡¥| ¥⌘t µ ‹Ñ Ï\‰î ¨‰D t©\‰. ‹ÑÏî Ñ D ©tXå Xî 1»D P⌧ ‡ à‰; ¿X¸ gH– “Î (closed)”à‰. tÉt X¯Xî | $ÖX0 ⌅t⌧, }⌅X \0 DîX‰. ¥§ ë(quantity)X ÑÏ X \⌅` ⇠ à‰. ®⇠ µ@ sD î ‹ÑÏ|t, ‰L¸ ⇡t X ⇠ N (µ, s2 ) Ï0⌧, 08 ⇠ î “ÑÏ\‰(is distributed)”| X¯X‡, §lΩ∏ 8ê N î “ ‹(normal)”| ò¿∏‰. XX ¿X@ X 0 = aX + b@ ⇡@ É<\, Ï0⌧ a@ bî ‰⇠‰. Ã}, X 0 t X@ ⇡@ ®Ñ(q, family)tt, ÑÏ ®Ñt ¿X– Î à‰. ‹ÑÏî 2 t 1»D ‡ à‰; Ã} X ⇠ N (µ, s )tt, X 0 ⇠ N ( aµ + b, a2 s2 ) (1) ‹ÑÏî ⇣\ gH–ƒ Î à‰. Ã} Z = X + Y t‡, X ⇠ N (µ X , sX2 ), Y ⇠ N (µY , sY2 )tt, Z ⇠ N (µ X + µY , sX2 + sY2 ) (2) πƒ\ Ω∞ Z = X + Xtt, ‰LD Ãq\‰. Z ⇠ N (2µ X , 2sX2 ) ¯¨‡, |⇠ <\ X–⌧ n⌧ ✓D îú\‰t, ‰LD Z ⇠ N (nµ X , nsX2 ) ⌧2 å ⌧‰. (3) \—ÑÏ t⌧ x̄ \—ÑÏ| ƒ∞Xîp Dî\ ®‡ ÉD ƒ‰. x̄| ƒ∞Xîp n⌧ ‡¥| ¥⌘D ¨‡, Tt⌧ ⌅¥ ¥⌘✓D ª‡ ò⌧, n<\ ò ‰î ÉD 0µ X|. 2. \—ÑÏ ‡¥| ¥⌘ X ÑÏ 185 ¸¨ <\ ‹ÑÏ|‡ \‰. X ⇠ N (µ, s2 ) Ã} n⌧ ‡¥| ¥⌘D ∞‰t, ⌅¥¥⌘ Yî 3à ) ›D ¨©t⌧ ‰L¸ ⇡t ÑÏ\‰. Y ⇠ N (nµ, ns2 ) ¯¨‡ Ã} n<\ ò ‰t, a = 1/n<\ 1à ) ›D ¨©t⌧ \¯…‡ Z î ‰L¸ ⇡t ÑÏ\‰. Z ⇠ N (µ, s2 /n) Z ÑÏî x̄X \—ÑÏ ⌧‰. Z …‡@ µ<\, x̄ ÉD ÙÏ ‰. \—ÑÏ Ñ∞@ s2 /nt‰. µX à∏ î ✓t ⌧‰î p ¯ò⌧, \—ÑÏ \ ∏(, â î ✓X \ $(î s/ nt ⌧‰. ⌧–⌧, s î 7.5 kg t‡, n@ 9 ⇠⌧, \ $(î 2.5 kg ⌧‰. ∞¸î ®X‹ÿ<\ î \ ɸ |XX¿Ã, ƒ∞X0î Ë, T `t‰! ⇣\, \—ÑÏ| ¨©t⌧ ‡∞l⌅ƒ ƒ∞` ⇠ à‰. x̄– \ 90% ‡∞l⌅ @ ZX 5à¯@ 95௠1Ñ⌅⇠ ⌅©t‰. Zt ‹ÑÏ| 0t0 L8–, Ì CDF(inverse CDF)| … t⌧ 1Ñ⌅⇠| ƒ∞` ⇠ à‰. ‹ÑÏ CDF@ Ì CDF– \ Îå ‹(closed form) t¨X¿ J¿Ã, ` x ⇠Xt )ït t¨X‡ ?? –⌧ ¥¥¯ @ ⇡t SciPy– l⌅⇠¥ à ‰. thinkstats2– SciPy h⇠| ÄT }å ¨©` ⇠ àå Xî ©|(wrapper) h⇠ ⌧ı⌧‰. def EvalNormalCdfInverse(p, mu=0, sigma=1): return scipy.stats.norm.ppf(p, loc=mu, scale=sigma) U` p ¸¥LD , ®⇠ mu@ sigma| î ‹ÑÏ–⌧ Q⇠î 1Ñ⌅ ⇠| ⇠X\‰. x̄X 90% ‡∞l⌅– t⌧, ‰L¸ ⇡t 5à¯@ 95௠1Ñ ⌅⇠| ƒ∞\‰. >>> thinkstats2.EvalNormalCdfInverse(0.05, mu=90, sigma=2.5) 85.888 >>> thinkstats2.EvalNormalCdfInverse(0.95, mu=90, sigma=2.5) 94.112 ¯ò⌧, Ã} ‰ÿD Œt ⇠ı\‰t, î ✓ x̄ } 90%\ î⌅ (85.9, 94.1)– ®¥» Ét‰. ‰‹ t✓@ ®X‹ÿ<\ ª@ ∞¸@ |X\‰. 186 ⌧ 14 •. t ⌧3 )ï (Analytic methods) ‹ÑÏ \⌅X0 ¡0 ƒ∞D ÄT }åX0 ⌅t⌧, Normal tò§| XXîp ⌅X‡ ^ ) ›D Ä8T\‰. ‰L– T‹ à‰. ‹ÑÏ| \ class Normal(object): def __init__(self, mu, sigma2): self.mu = mu self.sigma2 = sigma2 def __str__(self): return 'N(%g, %g)' % (self.mu, self.sigma2) ¯ò⌧, ‡¥| ¥⌘ ÑÏ| \⌅Xî NormalD x§4§T` ⇠ à‰. >>> dist = Normal(90, 7.5**2) >>> dist N(90, 56.25) Normal tò§–î Sum Tÿ‹ ⌧ı⇠îp, \¯l0 nD x‰\ 3D ¨©t⌧ n⌧ ✓X iƒ ÑÏ| ⇠X\‰. D, ) › def Sum(self, n): return Normal(n * self.mu, n * self.sigma2) Normal@ ⇣\ ) › 1D ¨©t⌧ ÒH¸ ò⌫Hƒ ⇠â\‰. def __mul__(self, factor): return Normal(factor * self.mu, factor**2 * self.sigma2) def __div__(self, divisor): return 1 / divisor * self ¯ò⌧, \¯l0 9| ¿‡ …‡X \—ÑÏ| ƒ∞` ⇠ à‰. >>> dist_xbar = dist.Sum(9) / 9 >>> dist_xbar.sigma 2.5 <\ ^ –⌧ ¥¥ÙXÔt, \—ÑÏ \ ∏(î 2.5 kgt‰. »¿…<\, Normal tò§–î Percentile Tÿ‹ à¥⌧ ‡∞l⌅D ƒ∞Xîp ¨ ©` ⇠ à‰. >>> dist_xbar.Percentile(5), dist_xbar.Percentile(95) 85.888 94.113 ¯¨‡, tÉ@ ^–⌧ ª@ ı¸ ⇡‰. ò⌘– Normal tò§| ‰‹ ¨©` Ét‰. X¿Ã, T ƒƒ| ò 0 ⌅–, Ñ \ ¿ T DîX‰. 4. ⌘Ï˘\ ¨ (Central limit theorem) ⌧4 187 ⌘Ï˘\ ¨ (Central limit theorem) ^ –⌧ ¥¥$Ôt, Ã} ‹ÑÏ–⌧ îú\ ✓D TXt, i Ñσ ‹Ñ ω. ‰x ÄÑX ÑÏî t 1»D ¿ ªX‰; Ã} ‰x ÑÏ–⌧ îú\ ✓D T\‰t, i@ |⇠ <\ t ÑÏ| ¿ ª\‰. X¿Ã, pX ®‡ ÑÏ–⌧ n ✓D TXt, i ÑÏ Ï\ ⇠4\‰. nt ù h– 0| ÄT l¥ <\, Ã} ✓‰X ÑÏ …‡¸ \ ∏( µ@ s| ÑÏî ¸¨ <\ N (nµ, ns2 )t ⌧‰. ‹Ñ î‰t, i t ∞¸ ⌘Ï˘\ ¨(Central Limit Theorem, CLT)t‰. µƒÑ D ⌅\ • ©\ ƒl ⌘ Xò‰. X¿Ã, á ¿ ¸X⇣t à‰. • ✓‰t ≈Ω <\ îú⇠¥| \‰. Ã} ¡ ⌧‰t, CLTD ∆‰.($¨ tÉt ‰4–⌧ 8⌧ ∞T⇠¿î JD¿Ã) ©` ⇠ • ✓‰t Ÿ|\ ÑÏ–⌧ ò@| \‰ ($¨ t îl¨m@ DT à¿Ã) • \ …‡¸ Ñ∞D î ÑÏ–⌧ ✓‰t ò@| \‰. ¯ò⌧ † ÑÏî t˘⇠¿ Jî‰. ⇠ƒ ÄÑ • ⇠4 çƒî ÑÏ \ƒ– Xt\‰. ¿⇠ÑÏ–⌧ ò( ✓‰X i@ ë@ n – t⌧ ⇠4\‰. \¯ ‹ÑÏ–⌧ ò( ✓‰X i@ T ‰‰Ä l0 DîX‰. ⌘Ï˘\ ¨î ê 8ƒ– ‹ÑÏ ⇣¨ |–D $Ö\‰. ›<¥X Œ@ π’t ⌅ XΩ îx– •D îp, t‰ ®¸î ï(additive) t ‰. ! Xî π’@ Œ@ ë@ ®¸X it‰. ¯ò⌧, ÑÏ ‹ÑÏT ⇠î Ω•t à‰. ⌧5 CLT Ä ⌘Ï˘\ ¨ ¥ªå ŸëXî¿@ ∏⌧ ŸëX¿ Jî¿| ¥¥Ù0 ⌅»», ‰ÿD á ¿ ‹ƒtÙê. < , ¿⇠ÑÏ\ ‹ƒtÙê. def MakeExpoSamples(beta=2.0, iters=1000): samples = [] for n in [1, 10, 100]: sample = [np.sum(np.random.exponential(beta, n)) for _ in range(iters)] samples.append((n, sample)) return samples 188 ⌧ 14 •. t )ï (Analytic methods) MakeExpoSamplesî ¿⇠ÑÏ✓ iD ›1\‰(“¿⇠ÑÏ\Ä0 îú⌧ ✓‰” D ⌅Ï “¿⇠ÑÏ✓”D ¨©\‰). betaî ÑÏ ®⇠‰; itersî ›1` i / ⇠‰. ¡0 h⇠| $ÖX0 ⌅t⌧, ¥Ä–⌧ ‹ët⌧ <\ ò t⌧ »4¨\‰. np.random.exponentialD ‰à 8ú` L»‰, n⌧ ¿⇠ÑÏ✓ ‹ §| ª¥ ⌧ iD ƒ∞\‰. sample@ 8t iters| î iƒ ¨§∏ ⌧‰. n¸ iters| <ŸX0 }‰: n@ i– π1TX0 ⌅t⌧ ƒ∞Xî i /⇠‰. \ mX /⇠‰; itersî iÑÏ| ⇠X⇠î ✓@ (n, sample) (pair) ¨§∏‰. – t É ⇠ à‰. def NormalPlotSamples(samples, plot=1, ylabel=''): for n, sample in samples: thinkplot.SubPlot(plot) thinkstats2.NormalProbabilityPlot(sample) ‹U`¯ºD thinkplot.Config(title='n=%d' % n, ylabel=ylabel) plot += 1 NormalPlotSamples@ MakeExpoSamples–⌧ ¨§∏ ›(pair)| xê\ ‹U`¯º âD ›1\‰. D ¯º ?? (⌅Ω â)– ∞¸ ò@à‰. n=1| L, iÑÏî Ï⌅à ¿⇠ÑÏ|⌧ ‹U`¯º@ ¡ t D»‰. X¿Ã, n=10| L, iÑÏî ¸¨ ‹ÑÏ ⇠‡, n=100| L, ‹ÑÏ@ pX lƒ⇠¿ Jî‰. ¯º ?? (Dò â)– \¯ ‹ÑÏ– \ D∑\ ∞¸ ò@ à‰. \¯ ‹Ñ Ïî |⇠ <\ ¿⇠ÑÏÙ‰ 0∏¥–t T Ït⌧, iÑÏî ⇠4Xîp T $ò x∞‰. n=10| L, ‹U`¯º@ pX ¡ x Ût ∆‰. X¿Ã, n=100 | L, ¸¨ <\ ‹Ñω. † ÑÏî \¯ ‹ÑÏÙ‰ T 0∏¥–t ÏX‰. ®⇠– 0|⌧, Œ@ † ÑÏî \ …‡¸ Ñ∞D ¿ ªX‰. ∞¸\, ⌘Ï˘\ ¨ ©⇠¿ Jî‰. ¯º ?? (¡Ë â)– † ✓‰X i ÑÏ ò@ à‰. Ï¿¥ n=100| L, ‹U`¯º@ ¡ –⌧ p¨ @‰. ⇣\ CLTî Ã} ✓‰t ¡ ⌧‰t ©⇠¿ J ∏ à‰. tÉD Ä X0 ⌅t⌧, ¿⇠ÑÏ–⌧ ¡ ⌧ ✓‰D ›1à‰. ¡ ⌧ ✓D ¨›Xîp ¨©⌧ L‡¨ò@ (1) ¡ ⌧ ‹ÑÏ ✓D ⌧›‹®‰. (2) ‹ÑÏ CDF| ¨©t⌧ ✓D ‡ÒÑÏ\ ¿X\‰. (3) Ì ¿⇠ÑÏ CDF| ¨©t⌧ ‡ÒÑÏ ✓D ¿⇠ÑÏ\ ¿X\‰. GenerateCorrelatedî ƒÙ¡ ‰. rho| î n⌧ ‹ÑÏ ✓ ⇠ıê| ⇠X\ 5. CLT Ä ¯º 14.1: ¿⇠ÑÏ✓X i– Ï(D´⌅). ¯º 14.2: †ÑÏ✓X i– \ ÑÏ(D´⌅). 189 \ ÑÏ(⌫⌅), \¯ ‹ÑÏ✓X i– \Ñ \ ÑÏ(⌫⌅), ¡ ⌧ ¿⇠ÑÏ✓X i– 190 ⌧ 14 •. t )ï (Analytic methods) def GenerateCorrelated(rho, n): x = random.gauss(0, 1) yield x sigma = math.sqrt(1 - rho**2) for _ in range(n-1): x = random.gauss(x*rho, sigma) yield x ´✓@ \ ‹ÑÏ ✓t‰. ƒç✓@ t⌅ ✓– Xt\‰: Ã} t⌅ ✓t x, ‰L✓@ …‡ x*rho, Ñ∞ 1-rho**2t‰. random.gaussî P௠xê\ Ñ∞t Dà \ ∏(| î ÉD ¸©\‰. GenerateExpoCorrelatedî ∞¸ ‹ §| xê\ \‰. D ¿⇠ÑÏ ✓<\ ¿X def GenerateExpoCorrelated(rho, n): normal = list(GenerateCorrelated(rho, n)) uniform = scipy.stats.norm.cdf(normal) expo = scipy.stats.expon.ppf(uniform) return expo normal@ ¡ ⌧ ‹ÑÏ ✓ ¨§∏‰. uniform@ 0¸ 1¨t ‡ÒÑÏ ✓ ‹ §‰. expoî ¡ ⌧ ¿⇠ÑÏ ✓ ‹ §‰. ppfî “|<∏⇣ h⇠ (percent point function)”X }¥\ ÌCDF– \ ⇣‰x tÑt‰. ¯º ?? (XË â)– rho=0.9 ¡ D î ¿⇠ÑÏ ✓ iX ÑÏ ò@ à‰. ¡ ⌧ Ω∞ ⇠4çƒ ê¨‰; ¯¸–ƒ àl, n=100| L, ‹U`¯º@ p X ¡ t‰. ¯ò⌧ ✓‰t ¡ ⇠»D L, CLT ƒ©Xå ©⇠¿î J¿Ã, ˘\ ¡ @ ‰4–⌧ ∞T 8⌧ ⇠¿ Jî‰. ⌘Ï˘\ ¨ ¥ªå ŸëXî¿@ ⌘Ï˘\ ¨ ŸëX¿ JD L 4®| t ⌧›Xî¿ Ùϸ0 ⌅t⌧ t‰ ‰ÿt ‡H⇠»‰. t⌧ ⌘Ï˘\ ¨| ¥ªå ¨©Xî¿ ¥¥Ùê. ⌧6 CLT ©X0 \ ⌘Ï˘\ ¨ ©\¿ ¥¥Ù0 ⌅t⌧, ?? – ⌧\ ÃD ê: ´¯D t@ ´¯ Dà Dt– \ …‡ ч0⌅ x ®¸ Ä . ^–⌧ ¥¥$Ôt, x (tî } 0.078¸‰. >>> live, firsts, others = first.MakeFrames() >>> delta = firsts.prglngth.mean() - others.prglngth.mean() 0.078 6. CLT 191 ©X0 $Ä \¡D 0µX|: p-✓D ƒ∞Xîp, ¿4 $ Dò–⌧ ! (t U `t‰; Ã} ë‰t, ! (tî ∞– X\ Ét D– É<\ ∞`∏‰. t ⌧`⌧, ¿4 $@ ч0⌅ ÑÏ ´¯ Dt@ ´¯ Dà Dt‰– t⌧ ⇡‰. ¯ò⌧, ‰L¸ ⇡t …‡ \—ÑÏ| ƒ∞` ⇠ à‰. dist1 = SamplingDistMean(live.prglngth, len(firsts)) dist2 = SamplingDistMean(live.prglngth, len(others)) P \—ÑÏî Ÿ| ®—Ë– 0⇠Xîp ®‡ ¡ ú∞D iŸ(pool)\ Ét ‰. SamplingDistMeanî t ✓ ‹ §@ \¯l0| xê\ D \—ÑÏ| \⌅Xî Normal ¥| ⇠X\‰. def SamplingDistMean(data, n): mean, var = data.mean(), data.var() dist = Normal(mean, var) return dist.Sum(n) / n mean@ varî data …‡¸ Ñ∞t‰. ‹ÑÏ dist\ pt0 ÑÏ| ¸¨\‰. t ⌧`⌧ pt0î ‹ÑÏ⇠¥ à¿ J‰. ¯ò⌧ tÏ\ ¸¨ ¯‰¿ ã¿ J‰. X¿Ã ¯¨‡ ò⌧ dist.Sum(n) / nD ƒ∞Xîp n⌧ ✓ …‡X \—Ñω. pt0 ‹ÑÏ⇠¥ à¿ J¿Ã, …‡ \—ÑÏî ⌘Ï˘\ ¨– Xt⌧ ‹ÑÏ⌧‰. ‰L, …‡– (t \—ÑÏ| ƒ∞\‰. Normal tò§î ) › 2| ¨©t⌧ ÑHD ¥ªå ⇠âXî¿ L‡ à‰. def __sub__(self, other): return Normal(self.mu - other.mu, self.sigma2 + other.sigma2) ¯ò⌧, ‰L¸ ⇡t (t \—ÑÏ| ƒ∞` ⇠ à‰. >>> dist = dist1 - dist2 N(0, 0.0032) …‡@ 0 xp, |¨ à‰. \–Xt …‡ <\ Ÿ| ÑÏ–⌧ îú⌧ P \¯ @ ⇡@ …‡D D É<\ ¡X0 L8t‰. \—ÑÏ Ñ∞@ 0.0032 ⌧‰. Normal tò§î ProbTÿ‹| ⌧ıXîp ‹ÑÏ CDF| … \‰. Prob| ¨©t⌧ ¿4 $ Dò–⌧ (t U`D delta Ã| ƒ∞` ⇠ à‰. >>> 1 - dist.Prob(delta) 0.084 X¯Xî î Ë!Ä – ⇡t ƒ∞\‰. \ p-✓t 0.084‰. ë!Ä – t⌧ ⇣\ ‰L¸ 192 ⌧ 14 •. t )ï (Analytic methods) >>> dist.Prob(-delta) 0.084 ‹ÑÏî mt0 L8– Ÿ|X‰. ,¨ i@ 0.168\, ?? \‰; ✓t 0.17t ‰. ⌧7 ¡ Ä î ✓¸ |X (Correlation test) ?? –⌧ ú› ¥⌘¸ ∞® 9 ¨t ¡ D ƒ∞Xîp ⌧ÙÄ (permutation test)D ¨©à‡, p-✓t 0.001Ù‰ ëD µƒ <\ X t|î ÉD ⌧ ¨à‰. t⌧ t <\ ⇡@ ÉD ⇠â` ⇠ à‰. Tÿ‹î ‰L ⇠Y ∞¸– 0⇠\ ‰: ‹ÑÏ| 0t‡ ¡ ⇠¿ Jî P¿⇠ ¸¥¿‡, Ã} n⌧ l0 \¯D ›1X‡, <¥® ¡ rD ƒ∞X‡ ò⌧, ¿X⌧ ¡ D ƒ∞Xt, r n 2 t=r 1 r2 tÑÏî ®⇠ n 2D î §úX∏ t-Ñω. t-ÑÏî t ⇣» h⇠| ¨©t⌧ ®( <\ ƒ∞ ⇠ à‰. Ñω; CDFî t ∞¸| ¨©t⌧ ¿4 $ Dò–⌧ ¡ \—ÑÏ| ƒ∞` ⇠ à‰; â, Ã} ¡ ⇠¿ J@ ‹ÑÏ ✓ ‹ §| ›1\‰t, P ‹ § ¡ ÑÏî 4«| Lî? StudentCdf \¯l0 nD xê\ D ¡ \—ÑÏ| ⇠X\‰. def StudentCdf(n): ts = np.linspace(-3, 3, 101) ps = scipy.stats.t.cdf(ts, df=n-2) rs = ts / np.sqrt(n - 2 + ts**2) return thinkstats2.Cdf(rs, ps) tsî t– \ ✓ ⇠ t(NumPy) 0Ù, ¿X ¡ t‰. psî Q⇠î U`D Ù‡ àîp, SciPy\ l⌅⌧ §úX∏ t-ÑÏ CDF| ¨©t⌧ ƒ∞⌧‰. t-ÑÏ ®⇠, dfî “ê ƒ (degrees of freedom)”X P8ê(acronym)‰. t ©¥| $ ÖX¿î J¿Ã, ˘¨t∏–⌧ ê8\ ¥© 8p\‰. http://en.wikipedia. org/wiki/Degrees_of_freedom_(statistics). ts\Ä0 ¡ ƒ⇠ rs| ª0 ⌅t⌧, Ì¿XD ©\‰. p r = t/ n 2 + t2 ∞¸î ¿4 $ Dò–⌧ rX \—ÑÏ ⌧‰. ¯º ??– ¨\¯îú\ ?? – ⌧ ›1\ ÑÏ| 0| t ÑÏ| hÿ ÙÏ ‰. P ÑÏ pX Ÿ|(identical) 8. tt⌧Ò Ä (Chi-squared test) ¯º 14.3: ¡ ⇠¿ J@ 193 ‹¿⇠– \ ¡ ƒ⇠– \ \—ÑÏ. X‰. ‰⌧ ÑÏ ‹ÑÏî D»¿Ã, <¥® ¡ ƒ⇠î \¯ …‡¸ Ñ∞ – 0⇠\‰. ⌘Ï˘\ ¨– Xt⌧, $¨ pt0î ¯⌥¿ J¿Ã, `0⇠ µƒ…@ ‹ÑÏ\‰. ¯º ??\Ä0, Ã} ¿⇠ ‰⌧\ ¡ ⇠¿ Jî‰t, ! ¡ 0.07@ |¥ † É ⇡¿ J‰î ÉD ¸ ⇠ à‰. t ÑÏ| ¨©t⌧, º»ò ¯ÙÉ ⇡¿ J@¿| ƒ∞` ⇠ à‰. t = r * math.sqrt((n-2) / (1-r)) p_value = 1 - scipy.stats.t.cdf(t, df=n-2) r=0.07– ¡QXî t ✓D ƒ∞\‰. ¯¨‡ ò⌧ t– t-ÑÏ| … \‰. ∞¸î 6.4e-12 ò(‰. t ⌧î t )ïX •⇣D ‹\‰: ‰∞ ë@ p-✓D ƒ∞` ⇠ à‰. X¿Ã, ‰4–⌧ Ùµ 8⌧ ⇠î Jî‰. ⌧8 tt⌧Ò Ä (Chi-squared test) ?? –⌧ tt⌧Ò µƒ…D ¨©t⌧ ¸¨⌅ D§»î¿ Ä à‰. tt⌧Ò µƒ…@ \(table)– 0 ✓¸ ‹T⌧ ∏(| ! \‰: c2 =  i Ei )2 (Oi Ei tt⌧Ò µƒ…t ⇣¨ ¨©⇠î t î ¿4 $ Dò–⌧ \—ÑÏ t (analytic)t0 L8t‰; Ä|¥ ∞X |X1 \, tt⌧Ò ÑÏ\ à∞‰. t-Ñ Ïò¸ tt⌧Ò CDFî ⇣» h⇠| ¨©t⌧ ®( <\ ƒ∞ ⇠ à‰. 1 –.(Not really.) 194 ⌧ 14 •. t ¯º 14.4: X∞h∆î 6 ¸¨⌅– )ï (Analytic methods) \ tt⌧Ò µƒ…– \ \—ÑÏ. SciPyî tt⌧Ò ÑÏ 0•D ⌧ı\‰. tÉD ¨©t⌧ tt⌧Ò µƒ… \ —ÑÏ| ƒ∞\‰. def ChiSquaredCdf(n): xs = np.linspace(0, 25, 101) ps = scipy.stats.chi2.cdf(xs, df=n-1) return thinkstats2.Cdf(xs, ps) ¯º ??– ¨\¯îú\ ª@ ÑÏ@ hÿ t ∞¸ hÿ ò@ à‰. X‰ ®P ‰∞ D∑\p, πà ,¨ÄÑ– ¯⌥‰. ,¨ÄÑ@ µ¡ • ÏD Pî ÄÑt‰. tÑÏ| ¨©t⌧ !Ä µƒ…, chi2X p-✓D ƒ∞` ⇠ à‰: p_value = 1 - scipy.stats.chi2.cdf(chi2, df=n-1) ∞¸î 0.041\ ?? ∞¸@ |X\‰. tt⌧Ò ÑÏ ®⇠î ‰‹ “ê ƒ(degrees of freedom)” ⌧‰. t Ω∞ fi î ®⇠î n-1↵ ⇠îp, Ï0⌧ n@ \(table) l0\ 6t‰. t ®⇠| ›\ Ét ‰å L‰\∏ ⇠ à‰; ¡Xå t ∞¸@ ¨\¯îú ∞¸| DPX0 ⌅t⌧, ¯º ??⇡@ ÉD ›1` L ¿ êî ¯Ét fiî¿ U‡` ⇠ ∆»‰. ⌧9 †X (Discussion) tE@ ¨\¯îú¸ ⌧Ù ⇡@ ⇠Xt )ï(computational method)– — ⌘à‰. t )ït t x )ï– t⌧ á ¿ •⇣t à‰. 10. µ 8⌧ 195 • ⇠Xt )ït $ÖX‡ ttX0 T }‰. | ‰¥, 0 µƒ–⌧ • ¥$¥ ¸⌧ $Ä t‰. Œ@ Y›t p-✓t 4«x¿ – t tX¿ ª\‰. ??•–⌧ ⌧‹\ ⌘¸ï—¿4 $D ®X‹ÿX‡ Ä µƒ…D ƒ∞Xî É—t ¸¯⌧PD ÄT ÖUXå \‰‡ ˇî‰. • ⇠Xt )ït tX‡ ‰© t‰. t )ï@ ‰4–⌧ ¿¿` ⇠ ∆î – ÖÖ 0⇠\‰. ⇠Xt )ï@ T @ D îlX ‡ ÄT }å U•¸ ⌧p| ` ⇠ à‰. • ⇠Xt )ï@ ѯ(debuggable)` ⇠ à‰. t )ï@ ÖÖ ô §‰: +ê| —¥ #<t ∞¸ Ä¥ò(‰. X¿Ã ¯⇠\ ‰⇠| X0 }‡, ∞¸ fiî¿ U‡X0 ¥5‰. ¯¨‡ Ã} 8⌧ ∆‰t 8 ⌧| >0 ¥5‰. ⇠Xt )ï@ ⇣ù ⌧⌧ ✏ L§∏(incremental development and testing)| ` ⇠ àå t⌧ ∞¸– ‡∞⇣D hë\‰. X¿Ã, \ ¿ Ë⇣t à‰: ⇠Xt )ï@ ê¥ ⇠ à‰. •⇣¸ Ë⇣D ‡$t⌧, ‰L ¸ (process)| îú\‰. 1. –…¸ –⌧ ⇠Xt )ïD ¨©X|. Ã} Ãq§Ï¥ ıD >‡ ‰ â‹⌅t ⇠© •Xt, Hú ⇠ à‰. 2. Ã} ‰â‹⌅D D‰| ⇠ ∆‰t, \ T` 0å| >D⇣|. t )ïD ¨©Xî É@ á ¿ \ T )ï⌘ Xò‰. 3. Ã} ⇠Xt )ïD t )ï<\ ∏î Ét X‰t, ⇠Xt )ïD DP 0⇠<\ ¨©X|. \–Xt ⇠Xt ∞¸@ t ∞¸ ¨t– ¡8 ¿˘1 Äù0•D ⌧ıX0 L8t‰. ê t∞X$‡ x%\ ) \ 8⌧– ⌧ 10 t µ8⌧– t⌧, 1˃| ¿ò Dîî ∆‰. µ 8⌧ \ tı@ chap14soln.py |– ò@ à‰. Exercise 14.1 ?? –⌧, 1x ¥⌘ÑÏî ¸¨ <\ \¯ ‹ÑÏÑD LD »‰. \ ¿ •\ $Ö@ ‰D 1xt êî ¥⌘@ ⌅¨ ¥⌘– D@\‰î Ét‰. t Ω∞, 1x ¥⌘@ Œ@ +êX ı°\ îxX Òt ⌧‰: w = w0 f 1 f 2 ... f n Ï0⌧, wî 1x¥⌘, w0 î ú›¥⌘, f i î i Dƒ– \ ¥⌘ ù îxt‰. 196 Ò– ⌧ 14 •. t )ï (Analytic methods) t \¯| ËXt, îx– \¯| Ë\ i<\ ⇣‰: log w = log w0 + log f 1 + log f 2 + ... + log f n ¯ò⌧, ⌘Ï˘\ ¨– Xt⌧, log wX ÑÏî ¸¨ <\ p n– t ¸¨ <\ ‹ÑÏ ⌧‰. tî wX ÑÏ \¯ ‹ÑÏ|î ÉD hX| î‰. t ⌅¡D ® TXîp, f – \ |¨à¥ Ùtî ÑÏ| ‡t‡ ò⌧, ú ›¥⌘ ÑÏ\ Ä0 ú⇠| ‡t‡, f ÑÏ\Ä0 îx ‹ §| ‡t‡, ÒD ƒ∞h<\h 1x¥⌘ \¯D ›1\‰. \¯ ‹ ÑÏ\ ⇠4Xîp n ✓t º»ò Dî`L? Exercise 14.2 ?? –⌧, ⌘Ï˘\ ¨| ¨©t⌧ Ÿ| ®—Ë–⌧ ëΩ \¯t îú⇠»‰î ¿4 $ Dò, …‡⌅– (t, d, \—ÑÏ| LD»‰. t ÑÏ| ¨©t⌧ î ✓ \ $(@ ‡∞l⌅ƒ LDº ⇠ à‰. X¿Ã, t )›@ ¸¨ <\ fi‰. ÄT U1D 0X0 ⌅t⌧, \¯t ‰x ®—Ë–⌧ îú⇠»‰î Ω $ Dò d \—ÑÏ| ƒ∞t| ⌧‰. t ÑÏ| ƒ∞X‡, t| ¨©t⌧ …‡ ¨t (t– l⌅D ƒ∞X‹$. \ \ $(@ 90% ‡∞ Exercise 14.3 \‡ |82 –⌧, §¿x¸ ŸÃ‰@ Y›ıY H–⌧ 1ƒ ‡ P– 0x ë≈ 0 D DTX$î Xƒ\ ⌧Ö ®¸| p¨à‰. ⌧Ö ⌅¸ ƒ– t⌧, Y›‰t 7⇣ ôƒ\ Y ƒ| … Xî $8– Qıà‰. ⌅\ ∏ !t– \ 0Ï ⌧Ö ⌅–î, ®ê Y›t Ïê Y›Ù‰ ⌅\ ∏X ⌅\¯ò !t– t⌧ T í@ ⇣⇠| Ù‡à‰; …‡ <\ ®ê 0.28 \ $(| î 3.57 ⇣⇠| Ù‡à‰. Ïêî …‡ <\ 0.32 \ $(| î 1.91D Ù‡à‰. 1ƒ ©((…‡– ॠ(t)– \ \—ÑÏ| ƒ∞X‡, µƒ <\ X x¿ Ä X|. î \ …‡– \ \ $(à ¸¥L0 L8–, \—ÑÏ| ›ƒXîp \¯l0| L Dîî ∆‰. ⌧Öƒ–, 1ƒ©( T ¥L‰: ®ê– \ …‡⇣⇠î 3.44 (\ $( 0.16); Ïê– \ …‡⇣⇠ 3.18 (\ $( 0.16). ‰‹, 1ƒ©(– \ \— ÑÏ| ƒ∞X‡ Ä X|. »¿…<\ 1ƒ©(– ¿T| î X|; t ¿T– µƒ <\ X x ? 2 “Evidence \ \—ÑÏî 4«t‡, for the persistent effects of an intervention to mitigate gender-sterotypical task allocation within student engineering teams,” Proceedings of the IEEE Frontiers in Education Conference, 2014.