From c85c35e92499a83896d1daf9b56a0d938f63cbcd Mon Sep 17 00:00:00 2001 From: pallavisprabhu Date: Tue, 26 Nov 2024 18:48:59 -0800 Subject: [PATCH] su24final 6-9 sols --- docs/assets/images/su24-final/tour_df.png | Bin 0 -> 98333 bytes docs/su24-final/index.html | 1575 +++++++++++++++++++++ problems/su24-final/data-info.md | 1 + problems/su24-final/q01.md | 59 +- problems/su24-final/q02.md | 23 +- problems/su24-final/q03.md | 24 +- problems/su24-final/q04.md | 131 +- problems/su24-final/q05.md | 64 +- problems/su24-final/q06.md | 57 +- problems/su24-final/q07.md | 119 +- problems/su24-final/q08.md | 43 +- problems/su24-final/q09.md | 96 +- 12 files changed, 1825 insertions(+), 367 deletions(-) create mode 100644 docs/assets/images/su24-final/tour_df.png create mode 100644 docs/su24-final/index.html diff --git a/docs/assets/images/su24-final/tour_df.png b/docs/assets/images/su24-final/tour_df.png new file mode 100644 index 0000000000000000000000000000000000000000..88672bba3d1de1030d9d8422b8488e4a5a7b5da8 GIT binary patch literal 98333 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�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

guHU!a?*p8mK^I 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 literal 0 HcmV?d00001 diff --git a/docs/su24-final/index.html b/docs/su24-final/index.html new file mode 100644 index 0000000..da4279a --- /dev/null +++ b/docs/su24-final/index.html @@ -0,0 +1,1575 @@ + + + + + + + Summer 2024 Final Exam + + + + + + + +
+

Summer 2024 Final Exam

+
+

+ + + + +

+ + + + + +

← return to practice.dsc10.com

+
+

Instructor(s): Nishant Kheterpal

+

This exam was administered in-person. The exam was closed-notes, +except students were provided a copy of the +DSC +10 Reference Sheet. No calculators were allowed. Students had +3 hours to take this exam.

+
+

In this exam, you’ll work with a data set representing the results of +the Tour de France, a multi-stage, weeks-long cycling race. The Tour de +France takes place over many days each year, and on each day, the riders +compete in individual races called stages. Each +stage is a standalone race, and the winner of the entire +tour is determined by who performs the best across all of the individual +stages combined. Each row represents one stage of the Tour +(or equivalently, one day of racing). This dataset will be called +stages.

+

The columns of stages are as follows:

+
    +
  • "Stage" (int): The stage number for the respective +year.
  • +
  • "Date" (str): The day that the stage took place, +formatted as ”YYYY-MM-DD.”
  • +
  • "Distance" (float): The distance of the stage in +kilometers.
  • +
  • "Origin" (str): The name of the city in which the stage +starts.
  • +
  • "Destination" (str): The name of the city in which the +stage ends.
  • +
  • "Type" (str): The type of the stage.
  • +
  • "Winner" (str): The name of the rider who won the +stage
  • +
  • "Winner Country" (str): The country from which the +winning rider of the stage is from
  • +
+

The first few rows of stages are shown below, though +stages has many more rows than pictured.

+
+


+

Throughout this exam, we will refer to stages +repeatedly. Assume that we have already run +import babypandas as bpdand +import numpy as np.

+
+

Problem 1

+


+

Problem 1.1

+

Fill in the blanks so that the expression below evaluates to the +proportion of stages won by the country with the most stage +wins.

+
    stages.groupby(__(i)__).__(ii)__.get("Type").__(iii)__ / stages.shape[0]
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 1.2

+

The distance of a stage alone does not encapsulate its difficulty, as +riders feel more tired as the tour goes on. Because of this, we want to +consider “real distance” a measurement of the length of a stage that +takes into account how far into the tour the riders are. The “real +distance” is calculated with the following process:

+
    +
  1. Add one to the stage number.

  2. +
  3. Take the square root of the result of (i).

  4. +
  5. Multiply the result of (ii) by the raw distance of the +stage.

  6. +
+

Complete the implementation of the function +real_distance, which takes in stages (a +DataFrame), stage (a string, the name of the column +containing stage numbers), and distance (a string, the name +of the column containing stage distances). real_distance +returns a Series containing all of the “real distances” of the stages, +as calculated above.

+
    def real_distance(stages, stage, distance):
+         ________
+
+
+

+ +

+
+
+
+

+
+

Solution: +return stages.get(distance) * np.sqrt(stages.get(stage) + 1)

+
+
+
+
+


+

Problem 1.3

+

Sometimes, stages are repeated in different editions of the Tour de +France, meaning that there are some pairs of "Origin" and +"Destination" that appear more than once in +stages. Fill in the blanks so that the expression below +evaluates how often the most common "Origin" and +"Destination" pair in the stages DataFrame +appears.

+
stages.groupby(__(i)__).__(ii)__.sort_values(by = "Date").get("Type").iloc[__(iii)__]
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 1.4

+

Fill in the blanks so that the value of mystery_three is +the "Destination" of the longest stage before Stage 12.

+
    mystery = stages[stages.get(__(i)__) < 12]
+    mystery_two = mystery.sort_values(by = "Distance", ascending = __(ii)__)
+    mystery_three = mystery_two.get(__(iii)__).iloc[-1]
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+
+

Problem 2

+

Suppose we run the following code to simulate the winners of the Tour +de France.

+
    evenepoel_wins = 0
+    vingegaard_wins = 0
+    pogacar_wins = 0
+    for i in np.arange(4):
+        result = np.random.multinomial(1, [0.3, 0.3, 0.4])
+        if result[0] == 1:
+            evenepoel_wins = evenepoel_wins + 1
+        elif result[1] == 1:
+            vingegaard_wins = vingegaard_wins + 1
+        elif result[2] == 1:
+            pogacar_wins = pogacar_wins + 1
+


+

Problem 2.1

+

What is the probability that pogacar_wins is equal to 4 +when the code finishes running? Do not simplify your answer.

+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 2.2

+

What is the probability that evenepoel_wins is at least +1 when the code finishes running? Do not simplify your answer.

+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+
+

Problem 3

+

We want to estimate the mean distance of Tour de France stages by +bootstrapping 10,000 times and constructing a 90% confidence interval +for the mean. In this question, suppose random_stages is a +random sample of size 500 drawn with replacement from +stages. Identify the line numbers with errors in the code +below. In the adjacent box, point out the error by describing the +mistake in less than 10 words or writing a code snippet (correct only +the part you think is wrong). You may or may not need all the spaces +provided below to identify errors.

+

+    line 1:      means = np.array([])
+    line 2: 
+    line 3:      for i in 10000:
+    line 4:          resample = random_stages.sample(10000)
+    line 5:          resample_mean = resample.get("Distance").mean()
+    line 6:          np.append(means, resample_mean)
+    line 7:    
+    line 8:      left_bound = np.percentile(means, 0)
+    line 9:      right_bound = np.percentile(means, 90)
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+
+

Problem 4

+

Below is a density histogram representing the distribution of +randomly sampled stage distances.

+
+

+
+


+

Problem 4.1

+

Which statement below correctly describes the relationship between +the mean and the median of the sampled stage distances?

+
    +
  • The mean is significantly larger than the median.

  • +
  • The mean is significantly smaller than the median.

  • +
  • The mean is approximately equal to the median.

  • +
  • It is impossible to know the relationship between the mean and the +median.

  • +
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+


+

Problem 4.2

+

Assume there are 100 stages in the random sample that generated this +plot. If there are 5 stages in the bin [275, 300), +approximately how many stages are in the bin +[200, 225)?

+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 4.3

+

Assume the mean distance is 200 km and the standard deviation is 50 +km. At least what proportion of stage distances are guaranteed to lie +between 0 km and 400 km? Do not simplify your answer.

+
+
+

+ +

+
+
+
+

+
+

Solution: Using Chebyshev’s inequality, we know at +least 1 - \frac{1}{z^2} of the data +lies within z SDs. Here, z = 4 so we know 1 +- \frac{1}{16} = \frac{15}{16} of the data lie in that range.

+
+
+
+
+


+

Problem 4.4

+

Again, assume the mean stage distance is 200 km and the standard +deviation is 50 km. Now, suppose we take a random sample of size 25 from +the stage distances, calculate the mean stage distance of this sample, +and repeat this process 500 times. What proportion of the means that we +calculate will fall between 190 km and 210 km? Do not simplify your +answer.

+
+
+

+ +

+
+
+
+

+
+

Solution: We know about 68% of values lie within 1 +standard deviation of the mean of any normal distribution. The +distribution of means of samples of size 25 from this dataset is +normally distributed with mean 200km and SD \frac{50}{\sqrt{25}} = 10, so 190km to 210km +contains 68% of the values.

+
+
+
+
+


+

Problem 4.5

+

Assume the mean distance is 200 km and the standard deviation is 50 +km. Suppose we use the Central Limit Theorem to generate a 95% +confidence interval for the true mean distance of all Tour de France +stages, and get the interval [190\text{ km}, +210\text{ km}]. Which of the following interpretations of this +confidence interval are correct?

+
    +
  • 95% of Tour de France stage distances fall between 190 km and 210 +km.

  • +
  • There is a 95% chance that the true mean distance of all Tour de +France stages is between 190 km and 210 km.

  • +
  • We are 95% confident that the true mean distance of all Tour de +France stages is between 190 km and 210 km.

  • +
  • Our sample is of size 100.

  • +
  • Our sample is of size 25.

  • +
  • If we collected many original samples and constructed many 95% +confidence intervals, then exactly 95% of those intervals would contain +the true mean distance.

  • +
  • If we collected many original samples and constructed many 95% +confidence intervals, then roughly 95% of those intervals would contain +the true mean distance.

  • +
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 4.6

+

Suppose we take 500 random samples of size 100 from the stage +distances, calculate their means, and draw a histogram of the +distribution of these sample means. We label this Histogram A. Then, we +take 500 random samples of size 1000 from the stage distances, calculate +their means, and draw a histogram of the distribution of these sample +means. We label this Histogram B. Fill in the blanks so that the +sentence below correctly describes how Histogram B looks in comparison +to Histogram A.

+

“Relative to Histogram A, Histogram B would appear __(i)__ and +shifted __(ii)__ due to the __(iii)__ mean and the __(iv)__ standard +deviation.”

+

(i):

+
    +
  • thinner

  • +
  • wider

  • +
  • the same width

  • +
  • unknown

  • +
+

(ii):

+
    +
  • left

  • +
  • right

  • +
  • not at all

  • +
  • unknown

  • +
+

(iii):

+
    +
  • larger

  • +
  • smaller

  • +
  • unchanged

  • +
  • unknown

  • +
+

(iv):

+
    +
  • larger

  • +
  • smaller

  • +
  • unchanged

  • +
  • unknown

  • +
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+
+

Problem 5

+

In this question, suppose random_stages is a random +sample of undetermined size drawn with replacement from +stages. We want to estimate the proportion of stage wins +won by each country.

+


+

Problem 5.1

+

Suppose we extract the winning countries and store the resulting +Series. Consider the variable winners defined below, which +you may use throughout this question:

+
winners = random_stages.get("Winner Country")
+

Write a single line of code that evaluates to the proportion of +stages in random_stages won by France (country code +"FRA").

+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 5.2

+

We want to generate a 95% confidence interval for the true proportion +of wins by France in stages by using our random sample +random_stages. How many rows need to be in +random_stages for our confidence interval to have width of +at most 0.03? Recall that the maximum standard deviation for any series +of zeros and ones is 0.5. Do not simplify your answer.

+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 5.3

+

Suppose we now want to test the hypothesis that the true proportion +of stages won by Italy ("ITA") is 0.2 using a confidence interval and the +Central Limit Theorem. We want to conduct our hypothesis test at a +significance level of 0.01. Fill in the blanks to construct the +confidence interval [interval_left, interval_right]. Your +answer must use the Central Limit Theorem, not bootstrapping. Assume an +integer variable sample_size = len(winners) has been +defined, regardless of your answer to part 2.

+

Hint:

+
stats.norm.cdf(2.576) - stats.norm.cdf(-2.576) = 0.99
+
    interval_center = __(i)__
+    mystery = __(ii)__ * np.std(__(iii)__ ) / __(iv)__
+    interval_left = interval_center - mystery
+    interval_right = interval_center + mystery
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 5.4

+

What is our null hypothesis?

+
    +
  • The true proportion of stages won by Italy is 0.2.

  • +
  • The true proportion of stages won by Italy is not 0.2.

  • +
  • The true proportion of stages won by Italy is greater than 0.2.

  • +
  • The true proportion of stages won by Italy is less than 0.2.

  • +
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 5.5

+

What is our alternative hypothesis?

+
    +
  • The true proportion of stages won by Italy is 0.2.

  • +
  • The true proportion of stages won by Italy is not 0.2.

  • +
  • The true proportion of stages won by Italy is greater than 0.2.

  • +
  • The true proportion of stages won by Italy is less than 0.2.

  • +
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+

Problem 5.6

+

Suppose we calculated the interval [0.195, +0.253] using the above process. Should we reject or fail to +reject our null hypothesis?

+
    +
  • Reject

  • +
  • Fail to reject

  • +
+
+
+

+ +

+
+
+
+

+
+
+
+
+
+


+
+

Problem 6

+

You want to use the data in stages to test the following +hypotheses:

+
    +
  • Null Hypothesis: In the Tour de France, the mean +distance of flat stages is equal to the mean distance +of mountain stages.

  • +
  • Alternative Hypothesis: In the Tour de France, +the mean distance of flat stages is less than the mean +distance of mountain stages.

  • +
+

For the rest of this problem, assume you have assigned a new column +to stages called class, which categorizes +stages into either flat or mountain +stages.

+


+

Problem 6.1

+

Which of the following test statistics could be used to test the +given hypothesis? Select all that apply.

+
    +
  • The mean distance of flat stages divided by the mean distance of +mountain stages.

  • +
  • The difference between the mean distance of mountain stages and the +mean distance of flat stages.

  • +
  • The absolute difference between the mean distance of flat stages and +the mean distance of mountain stages.

  • +
  • One half of the difference between the mean distance of flat stages +and the mean distance of mountain stages.

  • +
  • The squared difference between the mean distance of flat stages and +the mean distance of mountain stages.

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution: Option 1, Option 2, and Option 4

+

A test statistic is a single number we use to test which viewpoint +the data better supports. During hypothesis testing, we check whether +our observed statistic is a “typical value” in the distribution of the +test statistic. The alternative hypothesis indicates “less than” so our +test statistic needs to summarize both the magnitude and direction of +the difference in the categories.

+
    +
  • Option 1 is correct. The mean number of flat stages divided by the +mean distance of flat stages is essentially a ratio which is a valid +test statistic.
  • +
  • Option 2 is correct. The difference between the mean distance of +mountain stages and the mean distance of flat stages gives direction and +magnitude of the difference between the categories so its a valid test +statistic.
  • +
  • Option 3 is incorrect. Taking the absolute value of the difference +between the mean distance of flat stages and the mean distance of +mountain stages removes the direction of the difference making this an +invalid test statistic.
  • +
  • Option 4 is correct. One half of the difference between the mean +distance of flat stages and the mean distance of mountain stages gives +both magnitude and direction of the difference between the categories so +this is a valid test statistic.
  • +
  • Option 5 is incorrect. Squaring the difference between the mean +distance of flat stages and the mean distance of mountain stages removes +the direction of the difference between the categories so this is an +invalid test statistic.
  • +
+
+
+
+
+


+

Assume that for the rest of the question, we will be using the +following test statistic: The difference between the mean +distance of flat stages and the mean dis- tance of mountain +stages.

+


+

Problem 6.2

+

Fill in the blanks in the code below so that it correctly conducts a +hypothesis test of the given hypotheses and returns the p-value.

+

+def hypothesis_test(stages):
+    means = stages.groupby("class").mean().get("Distance")
+    observed_stat = means.loc["flat"] - means.loc["mountain"]
+    
+    simulated_stats = np.array([])
+    for i in np.arange(10000):
+        shuffled = stages.assign(shuffled = np.random.__(i)__(stages.get("Distance")))
+        shuffled_means = shuffled.groupby("class").mean().get("Distance")
+        simulated_stat = (shuffled_means.loc["flat"] - shuffled_means.loc["mountain"])
+        simulated_stats = __(ii)__(simulated_stats, simulated_stat)
+    
+    p_value = np.__(iii)__(simulated_stats <= observed_stat)
+    return p_value
+
+
+

+ +

+
+
+
+

+
+

Solution:

+
    +
  • (i): permutation
  • +
  • (ii): np.append
  • +
  • (iii): mean
  • +
+

The first step in a permutation test simulation is to shuffle the +labels or the values. So since this first line in the for loop is +assigning a column called ‘shuffled’, we know we need to use +np.random.permutation() on the "Distances" +column. The next line gets the new means for each group after shuffling +the values and simulated_stat is the simulated difference +in means. Now we know we want to save this simulated statistic and we +have the simulated_stats array, so we want to use an +np.append in (ii) to save this statistic in the array. +Finally after the simulation is complete, we calculate the p-value using +the array of simulated statistics. The p-value is the probability of +seeing the observed result under the null hypothesis. +simulated_stats <= observed_stat returns an array of 0’s +and 1’s depending on whether each simulated statistic is less than or +equal to the observed statistic. Now, to get the probability of seeing a +result equal to or less than the observed, we can simply take the mean +of this array since the mean of an array of 0’s and 1’s is equivalent to +the probability.

+
+
+
+
+


+

Problem 6.3

+

Indicate whether each of the following code snippets would correctly +calculate simulated_stat inside the for-loop +without errors. Where present, assume the blank (i) has +been filled in correctly.

+
shuffled = stages.assign(shuffled = np.random.__(i)__(stages.get("Distance")))
+shuffled_flat = (shuffled[shuffled.get("class") == "flat"].get("shuffled"))
+shuffled_mountain = (shuffled[shuffled.get("class") == "mountain"].get("shuffled"))
+simulated_stat = shuffled_flat.mean() - shuffled_mountain.mean()
+

(i):

+
    +
  • This code is correct.

  • +
  • This code is incorrect or errors.

  • +
+
shuffled = stages.assign(shuffled = np.random.__(i)__(stages.get("class")))
+shuffled_flat = (shuffled[shuffled.get("shuffled") == "flat"].get("Distance"))
+shuffled_mountain = (shuffled[shuffled.get("shuffled") == "mountain"].get("Distance"))
+simulated_stat = shuffled_flat.mean() - shuffled_mountain.mean()
+

(ii):

+
    +
  • This code is correct.

  • +
  • This code is incorrect or errors.

  • +
+
shuffled = stages.assign(shuffled = np.random.__(i)__(stages.get("Distance")))
+shuffled_means = shuffled.groupby("class").mean()
+simulated_stat = (shuffled_means.get("Distance").iloc["flat"] -
+                  shuffled_means.get("Distance").iloc["mountain"])
+

(iii):

+
    +
  • This code is correct.

  • +
  • This code is incorrect or errors.

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution:

+
    +
  • (i): This code is correct +
      +
    • shuffled shuffles the distances. +shuffled_flat gets the series of flats with the shuffled +distances and shuffled_mountain gets the series of the +mountains with the shuffled distances. Finally +simulated_stat calculates the mean difference between the +two categories.
    • +
  • +
  • (ii): The code is correct. +
      +
    • shuffled shuffles the labels. +shuffled_flat gets the series of the distances with the +shuffled label of “flat” and shuffled_mountain gets the +series of the distances with the shuffled label of “mountain”. Finally, +simulated_stat calculates the mean difference between the +two categories.
    • +
  • +
  • (iii): The code is incorrect. +
      +
    • shuffled shuffles the distances and assigns these +shuffled distances to the column ‘shuffled’. +shuffled_means groups by the label and calculates the means +for each column. However, simulated_stat takes the original +distance columns when calculating the difference in means rather than +the shuffled distances which is located in the ‘shuffled’ +column making this answer incorrect.
    • +
  • +
+
+
+
+
+


+

Problem 6.4

+

Assume that the observed statistic for this hypothesis test was equal +to -22.5 km. Given that there are 10,000 simulated test statistics +generated in the code above, at least how many of those must be equal to +-22.5 km in order for us to reject the null hypothesis +at an 0.05 significance level?

+
    +
  • 500

  • +
  • 5000

  • +
  • 0

  • +
  • 9500

  • +
  • 10000

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution: In order to reject the null hypothesis at +the 0.05 significance level, the p-value needs to be below 0.05. In +order to calculate the p-value, we find the proportion of simulated test +statistics that are equal to or less than the observed value. Note the +usage of “must be” in the problem. Since these simulated test statistics +can be even less than the observed value, none of them +have to be equal to the observed value. Thus, the +answer is 0.

+
+
+
+
+



+

Problem 6.5

+

Assume that the code above generated a p-value of 0.03. In the space +below, please write your interpretation of this p-value. Your answer +should include more than simply “we reject/fail to reject the null +hypothesis.”

+
+
+

+ +

+
+
+
+

+
+

Solution: There is a 3% chance, assuming the null +hypothesis is true, of seeing an observed difference in means less than +or equal to -22.5 km.

+

The p-value is the probability of seeing the observed value or +something more extreme under the null hypothesis. Knowing this, in this +context, since the p-value is 0.03, this means that there is a 3% chance +under the null hypothesis of seeing an observed difference in means +equal to or less than -22.5km.

+
+
+
+
+


+
+

Problem 7

+

You are analyzing the data in stages to see which +countries winners come from.

+

You categorize the countries into four groups: France, Italy, +Belgium, and Other. After performing some analysis, you find that the +observed distribution of countries of origin for Tour de France stage +winners is [0.3, 0.2, 0.1, 0.4]; +i.e. 30% of stage winners are French, 20% Italian, etc. Based on census +information, the expected population distribution is [0.07, 0.06, 0.01, 0.86]; that is, France’s +total population is 7% of the sum of the populations of all countries +participating in the Tour, Italy’s is 6%, etc.

+

You conduct a hypothesis test with the following hypotheses:

+
    +
  • Null Hypothesis: The distribution of countries of +origin for Tour de France stage winners is equivalent to the +distribution of the populations of the countries participating in the +Tour de France. Any observed difference is due to chance.
  • +
  • Alternative Hypothesis: The distribution of +countries of origin for Tour de France stage winners is different from +the distribution of the populations of the countries participating in +the Tour de France.
  • +
+


+

Problem 7.1

+

Which of the following test statistics are appropriate for this +hypothesis test? Select all that apply.

+
    +
  • The absolute difference between the expected proportion of French +stage winners and the observed proportion of French stage winners.

  • +
  • The sum of the differences between the expected population +distribution and the observed distribution of stage winners.

  • +
  • The absolute difference between the number of French stage winners +and the number of Italian stage winners.

  • +
  • The sum of the absolute differences between the expected population +distribution and the observed distribution of stage winners.

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution: Option 1 and Option 4

+
    +
  • Option 1 is correct. The absolute difference between the expected +proportion of French stage winners and the observed proportion of French +stage winners gives the magnitude of the difference in distributions +making this a valid test statistic.
  • +
  • Option 2 is incorrect. The sum of the differences between the +expected population distribution and the observed distribution of stage +winners is not a valid test statistic since it indicates a direction to +the difference when we only want to know whether these distributions are +different.
  • +
  • Option 3 is incorrect. The absolute difference between the number of +French stage winners and the number of Italian stage winners is not a +valid test statistic since the numbers in each population can be +different and thus the difference in numbers is not a fair +comparison.
  • +
  • Option 4 is correct. The sum of the absolute differences between the +expected population distribution and the observed distribution of stage +winners gives magnitude but does not indicate direction making this a +valid test statistic.
  • +
+
+
+
+
+


+

For the rest of this question, assume that we will be using +the Total Variation Distance as our test statistic.

+


+

Problem 7.2

+

Complete the implementation of the simulate and +calculate_test_stat functions so that the code below +successfully simulates 10,000 test statistics.

+

+expected_dist = [0.07, 0.06, 0.01, 0.86]
+observed_dist = [0.3, 0.2, 0.1, 0.4]
+
+def simulate(__(i)__):
+    simulated_winners = np.random.__(ii)__(100, __(iii)__)
+    return simulated_winners / 100
+
+def calculate_test_stat(__(iv)__, __(v)__):
+    return __(vi)__
+
+
+observed_stat = calculate_test_stat(observed_dist, expected_dist)
+simulated_stats = np.array([])
+for i in np.arange(10000):
+    simulated_dist = simulate(expected_dist)
+    simulated_stat = calculate_test_stat(simulated_dist, expected_dist)
+    simulated_stats = np.append(simulated_stats, simulated_stat)
+
+
+

+ +

+
+
+
+

+
+

Solution:

+
    +
  • (i): expected_dist
  • +
  • (ii): multinomial
  • +
  • (iii): expected_dist
  • +
  • (iv): simulated_dist
  • +
  • (v): expected_dist (or swapped with above)
  • +
  • (vi): +np.abs(simulated dist - expected dist).sum() / 2
  • +
+

When performing a simulation, we simulated based on the expectation. +Thus, the argument for the simulate function (i) should be the +expected_dist array. In this function, we simulate winners +based on the expected distribution. So, we want to use +np.random.multinomial in (ii) which will take in the number +of experiments and expected distribution, ie (iii), which is an array of +the probabilities for each of the outcomes.

+

We are using the total variation distance as the test statistic. The +Total Variation Distance (TVD) of two categorical distributions is the +sum of the absolute differences of their proportions, all divided by 2. +Thus, the arguments of the calculate_test_stat function +should be the simulated_distribution in (iv) and the +expected_distribution in (v) (or swapped). In this +function, we need to return the TVD which can be calculated as follows: +np.abs(simulated dist - expected dist).sum() / 2 in +(vi).

+
+
+
+
+


+

Problem 7.3

+

Fill in the blank in the following code so that p_value +evaluates to the correct p-value for this hypothesis test:

+
    p_value = np.mean(simulated_stats ___ observed_statistic)
+
    +
  • >

  • +
  • =

  • +
  • <

  • +
  • <=

  • +
  • =

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution: >=

+

Recall the p-value is the probability of seeing a result equal to or +more extreme than the observed value under the null hypothesis. Since +the TVD is our test statistic where greater values indicate a result +more extreme that means we want to use >= in the blank to check whether the +simulated statistic is equal to or more extreme than the observed +statistic.

+
+
+
+
+


+
+

Problem 8

+

Choose the best tool to answer each of the following questions. Note +the following:

+
    +
  • By “hypothesis testing,” we mean “standard” hypothesis testing, +i.e. hypothesis testing that doesn’t involve permutation testing or +bootstrapping.
  • +
  • By “bootstrapping,” we mean bootstrapping that doesn’t involve +hypothesis testing.
  • +
+


+

Problem 8.1

+

What is the median distance of all Tour de France stages?

+
    +
  • Hypothesis Testing

  • +
  • Permutation Testing

  • +
  • Bootstrapping

  • +
  • Central Limit Theorem

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution: Bootstrapping

+

Since we want the median distance of all the Tour de France stages, +we are not testing anything against a hypothesis at all which rules our +hypothesis testing and permutation testing. We use bootstrapping to get +samples in lieu of a population. Bootstrapping Tour de France distances +will give samples of distances from which we can calculate the median of +Tour de France stages.

+
+
+
+
+


+

Problem 8.2

+

Is the distribution of Tour de France stage types from before 1960 +the same as after 1960?

+
    +
  • Hypothesis Testing

  • +
  • Permutation Testing

  • +
  • Bootstrapping

  • +
  • Central Limit Theorem

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution: Permutation Testing

+

We are comparing whether the distributions before 1960 and after 1960 +are different which means we want to do permutation testing which tests +whether two samples come from the same population distribution.

+
+
+
+
+


+

Problem 8.3

+

Are there an equal number of destinations that start with letters +from the first half of the alphabet and destinations that start with +letters from the second half of the alphabet?

+
    +
  • Hypothesis Testing

  • +
  • Permutation Testing

  • +
  • Bootstrapping

  • +
  • Central Limit Theorem

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution: Hypothesis Testing

+

We are testing whether two values (the number of destinations that +start with letters from the first half of the alphabet and the +destinations that start with letters from the second half of the +alphabet) are equal to each other which is an indicator to use a +hypothesis test.

+
+
+
+
+


+

Problem 8.4

+

Are mountain stages with destinations in France from before 1970 +longer than flat stages with destinations in Belgium from after +2000?

+
    +
  • Hypothesis Testing

  • +
  • Permutation Testing

  • +
  • Bootstrapping

  • +
  • Central Limit Theorem

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution: Permutation Testing

+

We are comparing two distributions (mountain stages with destinations +in France from before 1970 and flat stages with destinations in Belgium +from after 2000) and seeing if the first distribution is longer than the +second. Since we are comparing distributions, we want to perform a +permutation test.

+
+
+
+
+


+
+

Problem 9

+

Suppose the distance of a Tour de France stage and +the time it takes to complete it are linearly +associated with correlation coefficient r = +\frac{2}{3}. Assume distances have a mean of 200 km and a +standard deviation of 80 km. Times have a mean of 6 hours.

+


+

Problem 9.1

+

Suppose the regression line to predict the time a stage will take (in +hours) based on its length (in km) predicts that a 160 km long stage +will take 5 hours. What is the standard deviation of the time it takes +to complete a stage?

+
+
+

+ +

+
+
+
+

+
+

Solution: x_\text{su} = +\frac{160 - 200}{80} = -\frac{1}{2}. Then y_\text{su} = -\frac{1}{2} \cdot \frac{2}{3} = +-\frac{1}{3} = \frac{5 - 6}{\text{SD}_y}. So \text{SD}_y = 3 hours.

+

We know that \bar{x} = 200, \sigma_x = 80, r = +\frac{2}{3}, and \bar{y} = 6. In +this problem we are given x = 160 and +y = 5. In order to find the standard +deviation of time here, we can start by standardizing our values:

+

x_{su} = \frac{160-200}{80} = +-\frac{1}{2}

+

Then according to the formula: \text{Predicted} y_{\text{su}} = r \cdot x_{\text{su}}

+

\text{Predicted} y_{\text{su}} = \frac{2}{3} \cdot -\frac{1}{2} = +\frac{1}{3}

+

Now that we have y in standard +units, we can plug it into this formula to solve for the standard +deviation of y:

+

y_{su} = \frac{y - +\bar{y}}{\sigma_y}

+

- \frac{1}{3}= +\frac{5-6}{\sigma_y}

+

\text{SD}_y = 3

+
+
+
+
+


+

Problem 9.2

+

Suppose, regardless of your answer to part 1, that stage completion +times have a standard deviation of 1.5 hours. The other means, SD, and +r are unchanged.

+

Stages in the middle of the Tour tend to be longer than those at the +ends. Stage 14 is 60 km longer than stage 20, so we would expect it to +take longer based on our linear association. How large will the +difference in our predictions of stage completion times be?

+
+
+

+ +

+
+
+
+

+
+

Solution: m = \frac{2}{3} +\cdot \frac{1.5}{80} = \frac{1}{80}. Stage 14 is 60 km longer, so +we expect it to take \frac{60}{80} = +\frac{3}{4} hours longer.

+

Since we are interested in how much longer stage 14 is than stage 20 +based on this linear association, we first want to calculate the slope. +Note that r=\frac{2}{3}, \text{SD}_y=1.5, and \text{SD}_x=80:

+

m = r \cdot +\frac{\text{SD}_y}{\text{SD}_x}

+

m = \frac{2}{3} \cdot \frac{1.5}{80} = +\frac{1}{80}

+

This means that for every additional 1km, time increases by \frac{1}{80}.

+

Since Stage 14 is 60km longer than Stage 20, we simply multiply our +slope by 60, giving \frac{60}{80} = \frac{3}{4}. Thus we expect +Stage 14 to take \frac{3}{4} hours +longer.

+
+
+
+
+


+

Problem 9.3

+

Suppose a mandatory rest break of 30 minutes (0.5 hours) is +implemented for all Tour de France stages. How would the slope of the +regression line change?

+
    +
  • It would decrease.

  • +
  • It would stay the same.

  • +
  • It would increase.

  • +
  • We cannot say for sure.

  • +
+
+
+

+ +

+
+
+
+

+
+

Solution: It would stay the same.

+

Adding a 30 minute break to all the stages simply increases each +stage’s time by an additional 30 minutes. This would not change the +slope since adding time simply shifts the time data points right, but +doesn’t change the relationship between distance and time.

+
+
+
+
+


+

Problem 9.4

+

Suppose the means and standard deviations above do not change +(continue to assume times have a standard deviation of 1.5 hours), but +the correlation coefficient r is +different. If we predict a 360 km stage will take 9 hours, what is the +value of r? Write a single number for +r or “N/A” if it is not possible to +answer.

+
+
+

+ +

+
+
+
+

+
+

Solution: r=1

+

We can follow a similar process to part 1, but instead solve for +r now. First, we calculate x in standard units:

+

x_{\text{su}} = \frac{x - +\bar{x}}{\text{SD}_x}

+

x_{\text{su}} = \frac{360-200}{80} = +\frac{160}{80} = 2

+

Now find y in standard units:

+

y_{\text{su}} = \frac{y - +\bar{y}}{\text{SD}_y}

+

y_{\text{su}} = \frac{9-6}{1.5} = +\frac{3}{1.5} = 2

+

Now we can solve for r simply by +y_{\text{su}} = r * x_{\text{su}}

+

2 = r * 2

+

r=1

+
+
+
+
+


+
+

+

👋 +Feedback: Find an error? Still confused? Have a suggestion? +Let us know +here.

+
+ + diff --git a/problems/su24-final/data-info.md b/problems/su24-final/data-info.md index 566b793..076e8bd 100644 --- a/problems/su24-final/data-info.md +++ b/problems/su24-final/data-info.md @@ -6,6 +6,7 @@ across all of the individual `stages` combined. Each row represents one stage of equivalently, one day of racing). This dataset will be called `stages`. The columns of `stages` are as follows: + - `"Stage" (int):` The stage number for the respective year. - `"Date" (str):` The day that the stage took place, formatted as ”YYYY-MM-DD.” - `"Distance" (float):` The distance of the stage in kilometers. diff --git a/problems/su24-final/q01.md b/problems/su24-final/q01.md index 3b3b927..273dd0c 100644 --- a/problems/su24-final/q01.md +++ b/problems/su24-final/q01.md @@ -1,19 +1,13 @@ # BEGIN PROB -\[(23 pts)\] - # BEGIN SUBPROB Fill in the blanks so that the expression below evaluates to the *proportion* of stages won by the country with the most stage wins. +```py stages.groupby(__(i)__).__(ii)__.get("Type").__(iii)__ / stages.shape[0] - -`(i)` : - -`(ii)` : - -`(iii)` : +``` # BEGIN SOLUTION @@ -23,11 +17,7 @@ Fill in the blanks so that the expression below evaluates to the # BEGIN SUBPROB -The distance of a stage alone does not encapsulate its difficulty, as -riders feel more tired as the tour goes on. Because of this, we want to -consider "real distance,\" a measurement of the length of a stage that -takes into account how far into the tour the riders are. The "real -distance\" is calculated with the following process: +The distance of a stage alone does not encapsulate its difficulty, as riders feel more tired as the tour goes on. Because of this, we want to consider "real distance" a measurement of the length of a stage that takes into account how far into the tour the riders are. The "real distance" is calculated with the following process: (i) Add one to the stage number. @@ -35,21 +25,15 @@ distance\" is calculated with the following process: (iii) Multiply the result of (ii) by the raw distance of the stage. -Complete the implementation of the function `real_distance`, which takes -in `stages` (a DataFrame), `stage` (a string, the name of the column -containing stage numbers), and `distance` (a string, the name of the -column containing stage distances). `real_distance` returns a Series -containing all of the "real distances\" of the stages, as calculated -above. - - def real_distance(stages, stage, distance): - ________ +Complete the implementation of the function `real_distance`, which takes in `stages` (a DataFrame), `stage` (a string, the name of the column containing stage numbers), and `distance` (a string, the name of the column containing stage distances). `real_distance` returns a Series containing all of the "real distances" of the stages, as calculated above. -::: responsebox -1in `return stages.get(distance) * np.sqrt(stages.get(stage) + 1)` -::: +```py + def real_distance(stages, stage, distance): + ________ +``` # BEGIN SOLUTION +**Solution:** `return stages.get(distance) * np.sqrt(stages.get(stage) + 1)` # END SOLUTION @@ -57,22 +41,12 @@ above. # BEGIN SUBPROB -Sometimes, stages are repeated in different editions of the Tour de -France, meaning that there are some pairs of `"Origin"` and -`"Destination"` that appear more than once in `stages`. Fill in the -blanks so that the expression below evaluates how often the most common -`"Origin"` and `"Destination"` pair in the `stages` DataFrame appears. +Sometimes, stages are repeated in different editions of the Tour de France, meaning that there are some pairs of `"Origin"` and `"Destination"` that appear more than once in `stages`. Fill in the blanks so that the expression below evaluates how often the most common `"Origin"` and `"Destination"` pair in the `stages` DataFrame appears. -``` {xleftmargin="-1.5cm"} +```py stages.groupby(__(i)__).__(ii)__.sort_values(by = "Date").get("Type").iloc[__(iii)__] ``` -`(i)` : - -`(ii)` : - -`(iii)` : - # BEGIN SOLUTION # END SOLUTION @@ -81,18 +55,13 @@ stages.groupby(__(i)__).__(ii)__.sort_values(by = "Date").get("Type").iloc[__(ii # BEGIN SUBPROB -Fill in the blanks so that the value of `mystery_three` is the -`"Destination"` of the longest stage before Stage 12. +Fill in the blanks so that the value of `mystery_three` is the `"Destination"` of the longest stage before Stage 12. +```py mystery = stages[stages.get(__(i)__) < 12] mystery_two = mystery.sort_values(by = "Distance", ascending = __(ii)__) mystery_three = mystery_two.get(__(iii)__).iloc[-1] - -`(i)` : - -`(ii)` : - -`(iii)` : +``` # BEGIN SOLUTION diff --git a/problems/su24-final/q02.md b/problems/su24-final/q02.md index b1c34d6..8080ec1 100644 --- a/problems/su24-final/q02.md +++ b/problems/su24-final/q02.md @@ -1,8 +1,8 @@ # BEGIN PROB -Suppose we run the following code to simulate the winners of the Tour de -France.\ +Suppose we run the following code to simulate the winners of the Tour de France. +```py evenepoel_wins = 0 vingegaard_wins = 0 pogacar_wins = 0 @@ -14,14 +14,11 @@ France.\ vingegaard_wins = vingegaard_wins + 1 elif result[2] == 1: pogacar_wins = pogacar_wins + 1 +``` # BEGIN SUBPROB -What is the probability that `pogacar_wins` is equal to 4 when the code -finishes running? Do not simplify your answer. - -::: center -::: +What is the probability that `pogacar_wins` is equal to 4 when the code finishes running? Do not simplify your answer. # BEGIN SOLUTION @@ -31,17 +28,7 @@ finishes running? Do not simplify your answer. # BEGIN SUBPROB -What is the probability that `evenepoel_wins` is at least 1 when the -code finishes running? Do not simplify your answer. - -::: center -::: - -# BEGIN SOLUTION - -# END SOLUTION - -# END SUBPROB +What is the probability that `evenepoel_wins` is at least 1 when the code finishes running? Do not simplify your answer. # BEGIN SOLUTION diff --git a/problems/su24-final/q03.md b/problems/su24-final/q03.md index 5e6fd6b..aef1f4d 100644 --- a/problems/su24-final/q03.md +++ b/problems/su24-final/q03.md @@ -1,13 +1,8 @@ # BEGIN PROB -\[(12 pts)\] We want to estimate the mean distance of Tour de France -stages by bootstrapping 10,000 times and constructing a 90% confidence -interval for the mean. In this question, suppose `random_stages` is a -random sample of size 500 drawn with replacement from `stages`. Identify -the line numbers with errors in the code below. In the adjacent box, -point out the error by describing the mistake in less than 10 words or -writing a code snippet (correct only the part you think is wrong). You -may or may not need all the spaces provided below to identify errors. +We want to estimate the mean distance of Tour de France stages by bootstrapping 10,000 times and constructing a 90% confidence interval for the mean. In this question, suppose `random_stages` is a random sample of size 500 drawn with replacement from `stages`. Identify the line numbers with errors in the code below. In the adjacent box, point out the error by describing the mistake in less than 10 words or writing a code snippet (correct only the part you think is wrong). You may or may not need all the spaces provided below to identify errors. + +```py line 1: means = np.array([]) line 2: @@ -18,18 +13,7 @@ may or may not need all the spaces provided below to identify errors. line 7: line 8: left_bound = np.percentile(means, 0) line 9: right_bound = np.percentile(means, 90) - -`a) ` - -`b) ` - -`c) ` - -`d) ` - -`e) ` - -`f) ` +``` # BEGIN SOLUTION diff --git a/problems/su24-final/q04.md b/problems/su24-final/q04.md index 8d2f36b..84b44b1 100644 --- a/problems/su24-final/q04.md +++ b/problems/su24-final/q04.md @@ -1,37 +1,29 @@ # BEGIN PROB -\[(16.5 pts)\] +Below is a density histogram representing the distribution of randomly sampled stage distances. -Below is a density histogram representing the distribution of randomly -sampled stage distances. - -::: center -![image](final_images/histogram.png) -::: +
+ +
# BEGIN SUBPROB -Which statement below correctly describes the relationship between the -mean and the median of the sampled stage distances? +Which statement below correctly describes the relationship between the mean and the median of the sampled stage distances? ( ) The mean is significantly larger than the median. - ( ) The mean is significantly smaller than the median. - ( ) The mean is approximately equal to the median. - -( ) It is impossible to know the relationship between the mean and the -median. +( ) It is impossible to know the relationship between the mean and the median. # BEGIN SOLUTION # END SOLUTION -# END SUBPROB # BEGIN SUBPROB +# END SUBPROB -Assume there are 100 stages in the random sample that generated this -plot. If there are 5 stages in the bin `[275, 300)`, approximately how -many stages are in the bin `[200, 225)`? +# BEGIN SUBPROB + +Assume there are 100 stages in the random sample that generated this plot. If there are 5 stages in the bin `[275, 300)`, approximately how many stages are in the bin `[200, 225)`? # BEGIN SOLUTION @@ -41,17 +33,11 @@ many stages are in the bin `[200, 225)`? # BEGIN SUBPROB -Assume the mean distance is 200 km and the standard deviation is 50 km. -At least what proportion of stage distances are guaranteed to lie -between 0 km and 400 km? Do not simplify your answer. +Assume the mean distance is 200 km and the standard deviation is 50 km. At least what proportion of stage distances are guaranteed to lie between 0 km and 400 km? Do not simplify your answer. -::: responsebox -1in Using Chebyshev's inequality, we know at least $1 - \frac{1}{z^2}$ -of the data lies within $z$ SDs. Here, $z = 4$ so we know -$1 - \frac{1}{16} = \frac{15}{16}$ of the data lie in that range. -::: # BEGIN SOLUTION +**Solution:** Using Chebyshev's inequality, we know at least $1 - \frac{1}{z^2}$ of the data lies within $z$ SDs. Here, $z = 4$ so we know $1 - \frac{1}{16} = \frac{15}{16}$ of the data lie in that range. # END SOLUTION @@ -59,22 +45,11 @@ $1 - \frac{1}{16} = \frac{15}{16}$ of the data lie in that range. # BEGIN SUBPROB -Again, assume the mean stage distance is 200 km and the standard -deviation is 50 km. Now, suppose we take a random sample of size 25 from -the stage distances, calculate the mean stage distance of this sample, -and repeat this process 500 times. What proportion of the means that we -calculate will fall between 190 km and 210 km? Do not simplify your -answer. - -::: responsebox -0.82in We know about 68% of values lie within 1 standard deviation of -the mean of any normal distribution. The distribution of means of -samples of size 25 from this dataset is normally distributed with mean -200km and SD $\frac{50}{\sqrt{25}} = 10$, so 190km to 210km contains 68% -of the values. -::: +Again, assume the mean stage distance is 200 km and the standard deviation is 50 km. Now, suppose we take a random sample of size 25 from the stage distances, calculate the mean stage distance of this sample, and repeat this process 500 times. What proportion of the means that we calculate will fall between 190 km and 210 km? Do not simplify your answer. + # BEGIN SOLUTION +**Solution:** We know about 68% of values lie within 1 standard deviation of the mean of any normal distribution. The distribution of means of samples of size 25 from this dataset is normally distributed with mean 200km and SD $\frac{50}{\sqrt{25}} = 10$, so 190km to 210km contains 68% of the values. # END SOLUTION @@ -82,36 +57,15 @@ of the values. # BEGIN SUBPROB -(3.5 pts) Assume the mean distance is 200 km and the standard deviation -is 50 km. Suppose we use the Central Limit Theorem to generate a 95% -confidence interval for the true mean distance of all Tour de France -stages, and get the interval $[190\text{ km}, 210\text{ km}]$. Which of -the following interpretations of this confidence interval are correct? - -[ ] 95% of Tour de France stage distances fall between 190 km and 210 -km. - -[ ] There is a 95% chance that the true mean distance of all Tour de -France stages is\ -between 190 km and 210 km. - -[ ] We are 95% confident that the true mean distance of all Tour de -France stages is\ -between 190 km and 210 km. +Assume the mean distance is 200 km and the standard deviation is 50 km. Suppose we use the Central Limit Theorem to generate a 95% confidence interval for the true mean distance of all Tour de France stages, and get the interval $[190\text{ km}, 210\text{ km}]$. Which of the following interpretations of this confidence interval are correct? +[ ] 95% of Tour de France stage distances fall between 190 km and 210 km. +[ ] There is a 95% chance that the true mean distance of all Tour de France stages is between 190 km and 210 km. +[ ] We are 95% confident that the true mean distance of all Tour de France stages is between 190 km and 210 km. [ ] Our sample is of size 100. - [ ] Our sample is of size 25. - -[ ] If we collected many original samples and constructed many 95% -confidence inter-\ -vals, then exactly 95% of those intervals would contain the true mean -distance. - -[ ] If we collected many original samples and constructed many 95% -confidence inter-\ -vals, then roughly 95% of those intervals would contain the true mean -distance. +[ ] If we collected many original samples and constructed many 95% confidence intervals, then exactly 95% of those intervals would contain the true mean distance. +[ ] If we collected many original samples and constructed many 95% confidence intervals, then roughly 95% of those intervals would contain the true mean distance. # BEGIN SOLUTION @@ -121,28 +75,37 @@ distance. # BEGIN SUBPROB -Suppose we take 500 random samples of size 100 from the stage distances, -calculate their means, and draw a histogram of the distribution of these -sample means. We label this Histogram A. Then, we take 500 random -samples of size 1000 from the stage distances, calculate their means, -and draw a histogram of the distribution of these sample means. We label -this Histogram B. Fill in the blanks so that the sentence below -correctly describes how Histogram B looks in comparison to Histogram A. +Suppose we take 500 random samples of size 100 from the stage distances, calculate their means, and draw a histogram of the distribution of these sample means. We label this Histogram A. Then, we take 500 random samples of size 1000 from the stage distances, calculate their means, and draw a histogram of the distribution of these sample means. We label this Histogram B. Fill in the blanks so that the sentence below correctly describes how Histogram B looks in comparison to Histogram A. + +"Relative to Histogram A, Histogram B would appear \_\_(i)\_\_ and shifted \_\_(ii)\_\_ due to the \_\_(iii)\_\_ mean and the \_\_(iv)\_\_ standard deviation." + +(i): + +( ) thinner +( ) wider +( ) the same width +( ) unknown + +(ii): -::: center -"Relative to Histogram A, Histogram B would appear [   (i) -  ]{.underline} and shifted [   (ii)   ]{.underline} due to the [ -  (iii)   ]{.underline} mean and the [   (iv)   ]{.underline} standard -deviation.\" -::: +( ) left +( ) right +( ) not at all +( ) unknown -(i): ( ) thinner ( ) wider ( ) the same width ( ) unknown +(iii): -(ii): ( ) left ( ) right ( ) not at all ( ) unknown +( ) larger +( ) smaller +( ) unchanged +( ) unknown -(iii): ( ) larger ( ) smaller ( ) unchanged ( ) unknown +(iv): -(iv): ( ) larger ( ) smaller ( ) unchanged ( ) unknown +( ) larger +( ) smaller +( ) unchanged +( ) unknown # BEGIN SOLUTION diff --git a/problems/su24-final/q05.md b/problems/su24-final/q05.md index f2c9841..1de2da4 100644 --- a/problems/su24-final/q05.md +++ b/problems/su24-final/q05.md @@ -1,8 +1,6 @@ # BEGIN PROB -\[(22 pts)\] In this question, suppose `random_stages` is a random -sample of undetermined size drawn with replacement from `stages`. We -want to estimate the proportion of stage wins won by each country. +In this question, suppose `random_stages` is a random sample of undetermined size drawn with replacement from `stages`. We want to estimate the proportion of stage wins won by each country. # BEGIN SUBPROB @@ -10,15 +8,12 @@ Suppose we extract the winning countries and store the resulting Series. Consider the variable `winners` defined below, which you may use throughout this question: -::: center -`winners = random_stages.get("Winner Country")` -::: +```py +winners = random_stages.get("Winner Country") +``` -Write a single line of code that evaluates to the proportion of stages -in `random_stages` won by France (country code `"FRA"`). +Write a single line of code that evaluates to the proportion of stages in `random_stages` won by France (country code `"FRA"`). -::: center -::: # BEGIN SOLUTION @@ -28,16 +23,7 @@ in `random_stages` won by France (country code `"FRA"`). # BEGIN SUBPROB -We want to generate a 95% confidence interval for the true proportion of -wins by France in `stages` by using our random sample `random_stages`. -How many rows need to be in `random_stages` for our confidence interval -to have width of at most 0.03? Recall that the maximum standard -deviation for any series of zeros and ones is 0.5. Do not simplify your -answer. - -::: responsebox -1in$4 * \frac{0.5}{\sqrt{n}} \leq 0.03$ -::: +We want to generate a 95% confidence interval for the true proportion of wins by France in `stages` by using our random sample `random_stages`. How many rows need to be in `random_stages` for our confidence interval to have width of at most 0.03? Recall that the maximum standard deviation for any series of zeros and ones is 0.5. Do not simplify your answer. # BEGIN SOLUTION @@ -47,29 +33,19 @@ answer. # BEGIN SUBPROB -(10 pts) Suppose we now want to test the hypothesis that the true -proportion of stages won by Italy (`"ITA"`) is $0.2$ using a confidence -interval and the Central Limit Theorem. We want to conduct our -hypothesis test at a significance level of 0.01. Fill in the blanks to -construct the confidence interval `[interval_left, interval_right]`. -Your answer must use the Central Limit Theorem, not bootstrapping. -Assume an integer variable `sample_size = len(winners)` has been -defined, regardless of your answer to **b)**. +Suppose we now want to test the hypothesis that the true proportion of stages won by Italy (`"ITA"`) is $0.2$ using a confidence interval and the Central Limit Theorem. We want to conduct our hypothesis test at a significance level of 0.01. Fill in the blanks to construct the confidence interval `[interval_left, interval_right]`. Your answer must use the Central Limit Theorem, not bootstrapping. Assume an integer variable `sample_size = len(winners)` has been defined, regardless of your answer to part 2. -Hint: `stats.norm.cdf(2.576) - stats.norm.cdf(-2.576) = 0.99`. +Hint: +```py +stats.norm.cdf(2.576) - stats.norm.cdf(-2.576) = 0.99 +``` +```py interval_center = __(i)__ mystery = __(ii)__ * np.std(__(iii)__ ) / __(iv)__ interval_left = interval_center - mystery interval_right = interval_center + mystery - -`(i)` : - -`(ii)` : - -`(iii)` : - -`(iv)` : +``` # BEGIN SOLUTION @@ -82,11 +58,8 @@ Hint: `stats.norm.cdf(2.576) - stats.norm.cdf(-2.576) = 0.99`. What is our null hypothesis? ( ) The true proportion of stages won by Italy is 0.2. - ( ) The true proportion of stages won by Italy is not 0.2. - ( ) The true proportion of stages won by Italy is greater than 0.2. - ( ) The true proportion of stages won by Italy is less than 0.2. # BEGIN SOLUTION @@ -100,11 +73,8 @@ What is our null hypothesis? What is our alternative hypothesis? ( ) The true proportion of stages won by Italy is 0.2. - ( ) The true proportion of stages won by Italy is not 0.2. - ( ) The true proportion of stages won by Italy is greater than 0.2. - ( ) The true proportion of stages won by Italy is less than 0.2. # BEGIN SOLUTION @@ -115,12 +85,10 @@ What is our alternative hypothesis? # BEGIN SUBPROB -Suppose we calculated the interval $[0.195, 0.253]$ using the above -process. Should we reject or fail to reject our null hypothesis? +Suppose we calculated the interval $[0.195, 0.253]$ using the above process. Should we reject or fail to reject our null hypothesis? -::: center -( ) Reject ( ) Fail to reject -::: +( ) Reject +( ) Fail to reject # BEGIN SOLUTION diff --git a/problems/su24-final/q06.md b/problems/su24-final/q06.md index a2edd70..a9e2c31 100644 --- a/problems/su24-final/q06.md +++ b/problems/su24-final/q06.md @@ -92,7 +92,10 @@ shuffled_mountain = (shuffled[shuffled.get("class") == "mountain"].get("shuffled simulated_stat = shuffled_flat.mean() - shuffled_mountain.mean() ``` -\(i\) ( ) This code is correct. ( ) This code is incorrect or errors. +\(i\): + +( ) This code is correct. +( ) This code is incorrect or errors. ``` py shuffled = stages.assign(shuffled = np.random.__(i)__(stages.get("class"))) @@ -101,7 +104,10 @@ shuffled_mountain = (shuffled[shuffled.get("shuffled") == "mountain"].get("Dista simulated_stat = shuffled_flat.mean() - shuffled_mountain.mean() ``` -\(ii\) ( ) This code is correct. ( ) This code is incorrect or errors. +\(ii\): + +( ) This code is correct. +( ) This code is incorrect or errors. ``` py shuffled = stages.assign(shuffled = np.random.__(i)__(stages.get("Distance"))) @@ -110,17 +116,21 @@ simulated_stat = (shuffled_means.get("Distance").iloc["flat"] - shuffled_means.get("Distance").iloc["mountain"]) ``` -\(iii\) ( ) This code is correct. ( ) This code is incorrect or errors. +\(iii\): + +( ) This code is correct. +( ) This code is incorrect or errors. # BEGIN SOLUTION **Solution:** -- (\i\): This code is correct - - `shuffled` shuffles the distances. `shuffled_flat` gets the series of flats with the shuffled distances and `shuffled_mountain` gets the series of the mountains with the shuffled distances. Finally `simulated_stat` calculates the mean difference between the two categories. -- (\ii\): The code is correct. - - `shuffled` shuffles the labels. `shuffled_flat` gets the series of the distances with the shuffled label of “flat” and `shuffled_mountain` gets the series of the distances with the shuffled label of “mountain”. Finally, `simulated_stat` calculates the mean difference between the two categories. -- The code is incorrect. - - `shuffled` shuffles the distances and assigns these shuffled distances to the column `‘shuffled’`. `shuffled_means` groups by the label and calculates the means for each column. However, `simulated_stat` takes the original distance columns when calculating the difference in means rather than the shuffled distances which is located in the `‘shuffled’` column making this answer incorrect. + +- \(i\): This code is correct + - `shuffled` shuffles the distances. `shuffled_flat` gets the series of flats with the shuffled distances and `shuffled_mountain` gets the series of the mountains with the shuffled distances. Finally `simulated_stat` calculates the mean difference between the two categories. +- \(ii\): The code is correct. + - `shuffled` shuffles the labels. `shuffled_flat` gets the series of the distances with the shuffled label of “flat” and `shuffled_mountain` gets the series of the distances with the shuffled label of “mountain”. Finally, `simulated_stat` calculates the mean difference between the two categories. +- \(iii\): The code is incorrect. + - `shuffled` shuffles the distances and assigns these shuffled distances to the column `‘shuffled’`. `shuffled_means` groups by the label and calculates the means for each column. However, `simulated_stat` takes the original distance columns when calculating the difference in means rather than the shuffled distances which is located in the `‘shuffled’` column making this answer incorrect. # END SOLUTION @@ -128,33 +138,30 @@ simulated_stat = (shuffled_means.get("Distance").iloc["flat"] - # BEGIN SUBPROB -Assume that the observed statistic for this hypothesis test was equal to --22.5 km. Given that there are 10,000 simulated test statistics -generated in the code above, at least how many of those must be equal to --22.5 km in order for us to **reject** the null hypothesis at an 0.05 -significance level? +Assume that the observed statistic for this hypothesis test was equal to -22.5 km. Given that there are 10,000 simulated test statistics generated in the code above, at least how many of those must be equal to -22.5 km in order for us to **reject** the null hypothesis at an 0.05 significance level? + +( ) 500 +( ) 5000 +( ) 0 +( ) 9500 +( ) 10000 -::: center -( ) 500 ( ) 5000 ( ) 0 ( ) 9500 ( ) 10000 -::: # BEGIN SOLUTION +**Solution:** +In order to reject the null hypothesis at the 0.05 significance level, the p-value needs to be below 0.05. In order to calculate the p-value, we find the proportion of simulated test statistics that are equal to or less than the observed value. Note the usage of "must be" in the problem. Since these simulated test statistics can be even less than the observed value, none of them **have** to be equal to the observed value. Thus, the answer is 0. # END SOLUTION # END SUBPROB # BEGIN SUBPROB -Assume that the code above generated a p-value of 0.03. In the space -below, please write your interpretation of this p-value. Your answer -should include more than simply "we reject/fail to reject the null -hypothesis.\" +Assume that the code above generated a p-value of 0.03. In the space below, please write your interpretation of this p-value. Your answer should include more than simply "we reject/fail to reject the null hypothesis." -::: responsebox -1.75in There is a 3% chance, assuming the null hypothesis is true, of -seeing an observed difference in means less than or equal to -22.5 km. -::: # BEGIN SOLUTION +**Solution:** There is a 3% chance, assuming the null hypothesis is true, of seeing an observed difference in means less than or equal to -22.5 km. + +The p-value is the probability of seeing the observed value or something more extreme under the null hypothesis. Knowing this, in this context, since the p-value is 0.03, this means that there is a 3% chance under the null hypothesis of seeing an observed difference in means equal to or less than -22.5km. # END SOLUTION diff --git a/problems/su24-final/q07.md b/problems/su24-final/q07.md index ab8cc82..47c8237 100644 --- a/problems/su24-final/q07.md +++ b/problems/su24-final/q07.md @@ -1,98 +1,78 @@ # BEGIN PROB -\[(12 pts)\] +You are analyzing the data in `stages` to see which countries winners come from. -You are analyzing the data in `stages` to see which countries winners -come from. - -You categorize the countries into four groups: France, Italy, Belgium, -and Other. After performing some analysis, you find that the observed -distribution of countries of origin for Tour de France stage winners is -`[0.3, 0.2, 0.1, 0.4]`; i.e. 30% of stage winners are French, 20% -Italian, etc. Based on census information, the expected population -distribution is `[0.07, 0.06, 0.01, 0.86]`; that is, France's total -population is 7% of the sum of the populations of all countries -participating in the Tour, Italy's is 6%, etc. +You categorize the countries into four groups: France, Italy, Belgium, and Other. After performing some analysis, you find that the observed distribution of countries of origin for Tour de France stage winners is $[0.3, 0.2, 0.1, 0.4]$; i.e. 30% of stage winners are French, 20% Italian, etc. Based on census information, the expected population distribution is $[0.07, 0.06, 0.01, 0.86]$; that is, France's total population is 7% of the sum of the populations of all countries participating in the Tour, Italy's is 6%, etc. You conduct a hypothesis test with the following hypotheses: -- **Null Hypothesis**: The distribution of countries of origin for - Tour de France stage winners is equivalent to the distribution of - the populations of the countries participating in the Tour de - France. Any observed difference is due to chance. - -- **Alternative Hypothesis**: The distribution of countries of origin - for Tour de France stage winners is different from the distribution - of the populations of the countries participating in the Tour de - France. +- **Null Hypothesis**: The distribution of countries of origin for Tour de France stage winners is equivalent to the distribution of the populations of the countries participating in the Tour de France. Any observed difference is due to chance. +- **Alternative Hypothesis**: The distribution of countries of origin for Tour de France stage winners is different from the distribution of the populations of the countries participating in the Tour de France. # BEGIN SUBPROB -Which of the following test statistics are appropriate for this -hypothesis test? Select all that apply. +Which of the following test statistics are appropriate for this hypothesis test? Select all that apply. -[ ] The absolute difference between the expected proportion of French -stage winners\ -and the observed proportion of French stage winners. +[ ] The absolute difference between the expected proportion of French stage winners and the observed proportion of French stage winners. +[ ] The sum of the differences between the expected population distribution and the observed distribution of stage winners. +[ ] The absolute difference between the number of French stage winners and the number of Italian stage winners. +[ ] The sum of the absolute differences between the expected population distribution and the observed distribution of stage winners. -[ ] The sum of the differences between the expected population -distribution and the\ -observed distribution of stage winners. - -[ ] The absolute difference between the number of French stage winners -and the number\ -of Italian stage winners. +# BEGIN SOLUTION +**Solution:** Option 1 and Option 4 -[ ] The sum of the absolute differences between the expected -population distribution\ -and the observed distribution of stage winners. +- Option 1 is correct. The absolute difference between the expected proportion of French stage winners and the observed proportion of French stage winners gives the magnitude of the difference in distributions making this a valid test statistic. +- Option 2 is incorrect. The sum of the differences between the expected population distribution and the observed distribution of stage winners is not a valid test statistic since it indicates a direction to the difference when we only want to know whether these distributions are different. +- Option 3 is incorrect. The absolute difference between the number of French stage winners and the number of Italian stage winners is not a valid test statistic since the numbers in each population can be different and thus the difference in numbers is not a fair comparison. +- Option 4 is correct. The sum of the absolute differences between the expected population distribution and the observed distribution of stage winners gives magnitude but does not indicate direction making this a valid test statistic. -# BEGIN SOLUTION # END SOLUTION # END SUBPROB -**For the rest of this question, assume that we will be using the Total -Variation Distance as our test statistic.** +**For the rest of this question, assume that we will be using the Total Variation Distance as our test statistic.** # BEGIN SUBPROB -Complete the implementation of the `simulate` and `calculate_test_stat` -functions so that the code below successfully simulates 10,000 test -statistics. +Complete the implementation of the `simulate` and `calculate_test_stat` functions so that the code below successfully simulates 10,000 test statistics. - expected_dist = [0.07, 0.06, 0.01, 0.86] - observed_dist = [0.3, 0.2, 0.1, 0.4] +```py - def simulate(__(i)__): - simulated_winners = np.random.__(ii)__(100, __(iii)__) - return simulated_winners / 100 +expected_dist = [0.07, 0.06, 0.01, 0.86] +observed_dist = [0.3, 0.2, 0.1, 0.4] - def calculate_test_stat(__(iv)__, __(v)__): - return __(vi)__ +def simulate(__(i)__): + simulated_winners = np.random.__(ii)__(100, __(iii)__) + return simulated_winners / 100 +def calculate_test_stat(__(iv)__, __(v)__): + return __(vi)__ - observed_stat = calculate_test_stat(observed_dist, expected_dist) - simulated_stats = np.array([]) - for i in np.arange(10000): - simulated_dist = simulate(expected_dist) - simulated_stat = calculate_test_stat(simulated_dist, expected_dist) - simulated_stats = np.append(simulated_stats, simulated_stat) -`(i): ` +observed_stat = calculate_test_stat(observed_dist, expected_dist) +simulated_stats = np.array([]) +for i in np.arange(10000): + simulated_dist = simulate(expected_dist) + simulated_stat = calculate_test_stat(simulated_dist, expected_dist) + simulated_stats = np.append(simulated_stats, simulated_stat) +``` -`(ii): ` +# BEGIN SOLUTION -`(iii): ` +**Solution:** -`(iv): ` +- \(i\): `expected_dist` +- \(ii\): `multinomial` +- \(iii\): `expected_dist` +- \(iv\): `simulated_dist` +- \(v\): `expected_dist` (or swapped with above) +- \(vi\): `np.abs(simulated dist - expected dist).sum() / 2` -`(v): ` +When performing a simulation, we simulated based on the expectation. Thus, the argument for the simulate function (i) should be the `expected_dist` array. In this function, we simulate winners based on the expected distribution. So, we want to use `np.random.multinomial` in (ii) which will take in the number of experiments and expected distribution, ie (iii), which is an array of the probabilities for each of the outcomes. -`(vi): ` +We are using the total variation distance as the test statistic. The Total Variation Distance (TVD) of two categorical distributions is the sum of the absolute differences of their proportions, all divided by 2. Thus, the arguments of the `calculate_test_stat` function should be the `simulated_distribution` in (iv) and the `expected_distribution` in (v) (or swapped). In this function, we need to return the TVD which can be calculated as follows: `np.abs(simulated dist - expected dist).sum() / 2` in (vi). -# BEGIN SOLUTION # END SOLUTION @@ -103,13 +83,20 @@ statistics. Fill in the blank in the following code so that `p_value` evaluates to the correct p-value for this hypothesis test: - p_value = np.mean(simulated_stats ___ observed_statistic)) +```py + p_value = np.mean(simulated_stats ___ observed_statistic) +``` -::: center -( ) ` > ` ( ) ` >= ` ( ) ` < ` ( ) ` <= ` ( ) ` = ` -::: +( ) \> +( ) >= +( ) < +( ) <= +( ) = # BEGIN SOLUTION +**Solution:** $>=$ + +Recall the p-value is the probability of seeing a result equal to or more extreme than the observed value under the null hypothesis. Since the TVD is our test statistic where greater values indicate a result more extreme that means we want to use $>=$ in the blank to check whether the simulated statistic is equal to or more extreme than the observed statistic. # END SOLUTION diff --git a/problems/su24-final/q08.md b/problems/su24-final/q08.md index d25fa8a..4ac442e 100644 --- a/problems/su24-final/q08.md +++ b/problems/su24-final/q08.md @@ -3,26 +3,22 @@ Choose the best tool to answer each of the following questions. Note the following: -- By "hypothesis testing," we mean "standard" hypothesis testing, i.e. - hypothesis testing that doesn't involve permutation testing or - bootstrapping. - -- By "bootstrapping," we mean bootstrapping that doesn't involve - hypothesis testing. +- By "hypothesis testing," we mean "standard" hypothesis testing, i.e. hypothesis testing that doesn't involve permutation testing or bootstrapping. +- By "bootstrapping," we mean bootstrapping that doesn't involve hypothesis testing. # BEGIN SUBPROB What is the median distance of all Tour de France stages? ( ) Hypothesis Testing - ( ) Permutation Testing - ( ) Bootstrapping - ( ) Central Limit Theorem # BEGIN SOLUTION +**Solution:** Bootstrapping + +Since we want the median distance of all the Tour de France stages, we are not testing anything against a hypothesis at all which rules our hypothesis testing and permutation testing. We use bootstrapping to get samples in lieu of a population. Bootstrapping Tour de France distances will give samples of distances from which we can calculate the median of Tour de France stages. # END SOLUTION @@ -30,18 +26,18 @@ What is the median distance of all Tour de France stages? # BEGIN SUBPROB -Is the distribution of Tour de France stage types from before 1960 the -same as after 1960? +Is the distribution of Tour de France stage types from before 1960 the same as after 1960? ( ) Hypothesis Testing - ( ) Permutation Testing - ( ) Bootstrapping - ( ) Central Limit Theorem # BEGIN SOLUTION +**Solution:** Permutation Testing + +We are comparing whether the distributions before 1960 and after 1960 are different which means we want to do permutation testing which tests whether two samples come from the same population distribution. + # END SOLUTION @@ -49,19 +45,17 @@ same as after 1960? # BEGIN SUBPROB -Are there an equal number of destinations that start with letters from -the first half of the alphabet and destinations that start with letters -from the second half of the alphabet? +Are there an equal number of destinations that start with letters from the first half of the alphabet and destinations that start with letters from the second half of the alphabet? ( ) Hypothesis Testing - ( ) Permutation Testing - ( ) Bootstrapping - ( ) Central Limit Theorem # BEGIN SOLUTION +**Solution:** Hypothesis Testing + +We are testing whether two values (the number of destinations that start with letters from the first half of the alphabet and the destinations that start with letters from the second half of the alphabet) are equal to each other which is an indicator to use a hypothesis test. # END SOLUTION @@ -69,18 +63,17 @@ from the second half of the alphabet? # BEGIN SUBPROB -Are mountain stages with destinations in France from before 1970 longer -than flat stages with destinations in Belgium from after 2000? +Are mountain stages with destinations in France from before 1970 longer than flat stages with destinations in Belgium from after 2000? ( ) Hypothesis Testing - ( ) Permutation Testing - ( ) Bootstrapping - ( ) Central Limit Theorem # BEGIN SOLUTION +**Solution:** Permutation Testing + +We are comparing two distributions (mountain stages with destinations in France from before 1970 and flat stages with destinations in Belgium from after 2000) and seeing if the first distribution is longer than the second. Since we are comparing distributions, we want to perform a permutation test. # END SOLUTION diff --git a/problems/su24-final/q09.md b/problems/su24-final/q09.md index 18a59f2..16d04df 100644 --- a/problems/su24-final/q09.md +++ b/problems/su24-final/q09.md @@ -1,10 +1,6 @@ # BEGIN PROB -\[(12 pts)\] Suppose the **distance** of a Tour de France stage and the -**time** it takes to complete it are linearly associated with -correlation coefficient $r = \frac{2}{3}$. Assume distances have a mean -of 200 km and a standard deviation of 80 km. Times have a mean of 6 -hours. +Suppose the **distance** of a Tour de France stage and the **time** it takes to complete it are linearly associated with correlation coefficient $r = \frac{2}{3}$. Assume distances have a mean of 200 km and a standard deviation of 80 km. Times have a mean of 6 hours. # BEGIN SUBPROB @@ -13,13 +9,28 @@ hours) based on its length (in km) predicts that a 160 km long stage will take 5 hours. What is the standard deviation of the time it takes to complete a stage? -::: responsebox -1.2in $x_\text{su} = \frac{160 - 200}{80} = -\frac{1}{2}$. Then -$y_\text{su} = -\frac{1}{2} \cdot \frac{2}{3} = -\frac{1}{3} = \frac{5 - 6}{\text{SD}_y}$. -So $\text{SD}_y = 3$ hours. -::: # BEGIN SOLUTION +**Solution:** +$x_\text{su} = \frac{160 - 200}{80} = -\frac{1}{2}$. Then $y_\text{su} = -\frac{1}{2} \cdot \frac{2}{3} = -\frac{1}{3} = \frac{5 - 6}{\text{SD}_y}$. So $\text{SD}_y = 3$ hours. + +We know that $\bar{x} = 200$, $\sigma_x$ = 80, $r = \frac{2}{3}$, and $\bar{y} = 6$. In this problem we are given $x = 160$ and $y = 5$. +In order to find the standard deviation of time here, we can start by standardizing our values: + +$x_{su} = \frac{160-200}{80} = -\frac{1}{2}$ + +Then according to the formula: $\text{Predicted}$ $y_{\text{su}} = r \cdot x_{\text{su}}$ + +$\text{Predicted}$ $y_{\text{su}} = \frac{2}{3} \cdot -\frac{1}{2} = \frac{1}{3}$ + +Now that we have $y$ in standard units, we can plug it into this formula to solve for the standard deviation of $y$: + +$y_{su} = \frac{y - \bar{y}}{\sigma_y}$ + +$- \frac{1}{3}= \frac{5-6}{\sigma_y}$ + +$\text{SD}_y = 3$ + # END SOLUTION @@ -27,22 +38,22 @@ So $\text{SD}_y = 3$ hours. # BEGIN SUBPROB -Suppose, regardless of your answer to **a)**, that stage completion -times have a standard deviation of 1.5 hours. The other means, SD, and -$r$ are unchanged. - -Stages in the middle of the Tour tend to be longer than those at the -ends. Stage 14 is 60 km longer than stage 20, so we would expect it to -take longer based on our linear association. How large will the -difference in our predictions of stage completion times be? +Suppose, regardless of your answer to part 1, that stage completion times have a standard deviation of 1.5 hours. The other means, SD, and $r$ are unchanged. -::: responsebox -1.2in $m = \frac{2}{3} \cdot \frac{1.5}{80} = \frac{1}{80}$. Stage 14 is -60 km longer, so we expect it to take $\frac{60}{80} = \frac{3}{4}$ -hours longer. -::: +Stages in the middle of the Tour tend to be longer than those at the ends. Stage 14 is 60 km longer than stage 20, so we would expect it to take longer based on our linear association. How large will the difference in our predictions of stage completion times be? # BEGIN SOLUTION +**Solution:** $m = \frac{2}{3} \cdot \frac{1.5}{80} = \frac{1}{80}$. Stage 14 is 60 km longer, so we expect it to take $\frac{60}{80} = \frac{3}{4}$ hours longer. + +Since we are interested in how much longer stage 14 is than stage 20 based on this linear association, we first want to calculate the slope. Note that $r=\frac{2}{3}$, $\text{SD}_y=1.5$, and $\text{SD}_x=80$: + +$m = r \cdot \frac{\text{SD}_y}{\text{SD}_x}$ + +$m = \frac{2}{3} \cdot \frac{1.5}{80} = \frac{1}{80}$ + +This means that for every additional 1km, time increases by $\frac{1}{80}$. + +Since Stage 14 is 60km longer than Stage 20, we simply multiply our slope by $60$, giving $\frac{60}{80} = \frac{3}{4}$. Thus we expect Stage 14 to take $\frac{3}{4}$ hours longer. # END SOLUTION @@ -50,19 +61,17 @@ hours longer. # BEGIN SUBPROB -Suppose a mandatory rest break of 30 minutes (0.5 hours) is implemented -for all Tour de France stages. How would the slope of the regression -line change? +Suppose a mandatory rest break of 30 minutes (0.5 hours) is implemented for all Tour de France stages. How would the slope of the regression line change? ( ) It would decrease. - ( ) It would stay the same. - ( ) It would increase. - ( ) We cannot say for sure. # BEGIN SOLUTION +**Solution:** It would stay the same. + +Adding a 30 minute break to all the stages simply increases each stage’s time by an additional 30 minutes. This would not change the slope since adding time simply shifts the time data points right, but doesn't change the relationship between distance and time. # END SOLUTION @@ -70,16 +79,31 @@ line change? # BEGIN SUBPROB -Suppose the means and standard deviations above do not change (continue -to assume times have a standard deviation of 1.5 hours), but the -correlation coefficient $r$ is different. If we predict a 360 km stage -will take 9 hours, what is the value of $r$? In the box below, write a -single number for $r$ or "N/A\" if it is not possible to answer. +Suppose the means and standard deviations above do not change (continue to assume times have a standard deviation of 1.5 hours), but the correlation coefficient $r$ is different. If we predict a 360 km stage will take 9 hours, what is the value of $r$? Write a single number for $r$ or "N/A" if it is not possible to answer. -::: center -::: # BEGIN SOLUTION +**Solution:** $r=1$ + +We can follow a similar process to part 1, but instead solve for $r$ now. First, we calculate $x$ in standard units: + +$x_{\text{su}} = \frac{x - \bar{x}}{\text{SD}_x}$ + + +$x_{\text{su}} = \frac{360-200}{80} = \frac{160}{80} = 2$ + +Now find $y$ in standard units: + +$y_{\text{su}} = \frac{y - \bar{y}}{\text{SD}_y}$ + +$y_{\text{su}} = \frac{9-6}{1.5} = \frac{3}{1.5} = 2$ + +Now we can solve for $r$ simply by $y_{\text{su}} = r * x_{\text{su}}$ + +$2 = r * 2$ + +$r=1$ + # END SOLUTION