Uploaded by 권영훈

통계적사고 (think stats)

advertisement
µƒ
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– \ Ltt àî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|.
tD
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)” Ltx 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 LtD ∞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.
Download