For today you should have: - Read Chapter 3.
- Finished Homework 1.
- Worked on Homework 2, due Friday at noon.
- Worked on your project.
I recently ran the James Joyce Ramble 10K in Dedham MA. The results are available here. Go to that page and find my results. What is my percentile rank in the field (all runners)? What is my percentile rank in my division (M4049 means ``male between 40 and 49 years of age'')? What division are you in? How fast do you have to run a 10K to ``beat'' me in terms of percentile ranks? Can you do it? ## Relative RiskRisks: ProbEarly live births 0.175120244862 ProbEarly first babies 0.182415590301ProbEarly others 0.168321013728ProbOnTime live births 0.701355487538 ProbOnTime first babies 0.662134602311 ProbOnTime others 0.737909186906 ProbLate live births 0.123524267599 ProbLate first babies 0.155449807387 ProbLate others 0.0937697993664 Risk ratios (first babies / others): ProbEarly 1.08373628617 ProbOnTime 0.897311775027 ProbLate 1.65778116662 What is the relative risk of being born early for first babies, relative to others? When is relative risk a good choice of summary statistic? What are some alternatives? ## Conditional probabilityRead Exercise 2.9. Sketch Python code for the algorithm in Section 2.9. Practice Quiz question: `Write a function called ` `remaining_lifetime` ` that takes a Pmf of lifespans and an age, ` `a. It should return the distribution of remaining lifetime for ` `someone with age a.` `For example, if the Pmf has values 1, 3 and 4, with equal probability, ` `then the remaining lifetime of someone with a=2 is 1 or 2 with ` `equal probability.` ## CDFsStrictly speaking, when you compute a cumulative PMF, the result is a CMF, but no one calls it that. Key ideas: 1) Map from values to percentile ranks (or probabilities). 2) Reverse map from percentile ranks to values. 3) My implementation is a sorted list of values and a sorted list of probabilities. Both use bisect, so they take log n time. Tricky to get the corner cases right. ` def Prob(self, x):` ` if x < self.xs[0]: return 0.0` ` index = bisect.bisect(self.xs, x)` ` p = self.ps[index-1]` ` return p` ` def Value(self, p):` ` if p < 0 or p > 1:` ` raise ValueError('Probability p must be in range [0, 1]')` ` if p == 0: return self.xs[0]` ` if p == 1: return self.xs[-1]` ` index = bisect.bisect(self.ps, p)` ` if p == self.ps[index-1]:` ` return self.xs[index-1]` ` else:` ` return self.xs[index]` 3) To iterate through the items in a CDF use GetItems(). 4) For plotting, especially small n, it is important to draw a step function. That's what Render() is for. |