```{r data generation, echo = FALSE, results = "hide"}
## DATA GENERATION
r <- sample(c(-0.97, 0, 0.5, 0.97), 1)
if(runif(1) < 1/3) {
mx <- my <- 0
sx <- sy <- 1
} else {
mx <- sample(10 * -5:5, 1)
my <- sample(20 * 0:5, 1)
sx <- sample(c(1, 10, 20), 1)
sy <- sample(c(1, 10, 20), 1)
}
b <- r * sy/sx
a <- my - b*mx
x <- rnorm(200, mx, sx)
y <- b * x + rnorm(200, a, sy * sqrt(1- r^2))
## QUESTION/ANSWER GENERATION
questions <- character(5)
solutions <- logical(5)
explanations <- character(5)
if (runif(1) < 0.5) {
questions[1] <- "The scatterplot is standardized."
solutions[1] <- mx == 0 & my == 0 & sx == 1 & sy == 1
explanations[1] <- if (solutions[1]) "$X$ and $Y$ have both mean $0$ and variance $1$." else
"The scatterplot is not standardized, because $X$ and $Y$ do not both have mean $0$ and variance $1$."
} else {
questions[1] <- "The slope of the regression line is about $1$."
solutions[1] <- abs(b - 1) < 0.1
explanations[1] <- paste("The slope of the regression line is given by $r \\cdot s_y/s_x$ and hence",
ifelse(abs(b - 1) < 0.1, "", "not"), "about equal to $1$.")
}
if (runif(1) < 0.5) {
questions[2] <- "The absolute value of the correlation coefficient is at least $0.8$."
solutions[2] <- abs(r) >= 0.8
} else {
questions[2] <- "The absolute value of the correlation coefficient is at most $0.8$."
solutions[2] <- abs(r) <= 0.8
}
explanations[2] <- if(abs(r) >= 0.9) {
paste("A strong association between the variables is given in the scatterplot.",
"Hence the absolute value of the correlation coefficient is close to $1$",
"and therefore larger than $0.8$.")
} else if (abs(r) == 0) {
paste("No association between the variables is observed in the scatterplot.",
"This implies a correlation coefficient close to $0$.")
} else paste("Only a slightly positive association between the variables is observable in the scatterplot.",
"This implies a correlation coefficient with an absolute value smaller than $0.8$.")
if (runif(1) < 0.5) {
questions[3] <- "The standard deviation of $X$ is at least $6$."
solutions[3] <- sx >= 6
explanations[3] <- paste0("The standard deviation of $X$ is about equal to $", sx, "$ and is therefore ",
ifelse(sx < 6, "smaller", "larger"), " than $6$.")
} else {
questions[3] <- "The standard deviation of $Y$ is at least $6$."
solutions[3] <- sy >= 6
explanations[3] <- paste0("The standard deviation of $Y$ is about equal to $", sy, "$ and is therefore ",
ifelse(sy < 6, "smaller", "larger"), " than $6$.")
}
if (runif(1) < 0.5) {
questions[4] <- "The mean of $X$ is at most $5$."
solutions[4] <- mx <= 5
explanations[4] <- paste0("The mean of $X$ is about equal to $", mx,
"$ and hence is ", ifelse(mx < 5, "smaller", "larger"), " than $5$.")
} else {
questions[4] <- "The mean of $Y$ is at least $30$."
solutions[4] <- my >= 30
explanations[4] <- paste0("The mean of $Y$ is about equal to $", my,
"$ and hence is ", ifelse(my < 30, "smaller", "larger"), " than $30$.")
}
xh <- round(runif(1, -1, 1)*sx + mx, 1)
yhr <- round(a + b*xh, 1)
alpha <- if (abs(r) > 0 & abs(mx - xh) > 0) sign(mx - xh) * sign(r) else 1
yhf <- round(yhr + 2 * sy * alpha, 1)
## assure at least one correct and one incorrect solution
yh <- switch(as.character(sum(solutions)),
"0" = yhr,
"4" = yhf,
sample(c(yhr, yhf), 1)
)
questions[5] <- paste0("For $X = ", as.character(xh), "$, $Y$ can be expected to be about $",
as.character(yh), "$.", collapse="")
solutions[5] <- abs(yh - yhr) < 0.01 * sy
explanations[5] <- paste0("The regression line at $X=", xh,
"$ implies a value of about $Y = ", yhr, "$.", sep="")
## permute order of solutions/questions
o <- sample(1:5)
questions <- questions[o]
solutions <- solutions[o]
explanations <- explanations[o]
```
Question
========
The following figure shows a scatterplot. Which of the following statements are correct?
\
```{r scatterplot, echo = FALSE, results = "hide", fig.height = 5, fig.width = 6, fig.path = "", fig.cap = ""}
plot(x, y)
```
```{r questionlist, echo = FALSE, results = "asis"}
answerlist(questions, markup = "markdown")
```
Solution
========
```{r solutionlist, echo = FALSE, results = "asis"}
answerlist(ifelse(solutions, "True", "False"), explanations, markup = "markdown")
```
Meta-information
================
extype: mchoice
exsolution: `r mchoice2string(solutions)`
exname: Scatterplot