### Exercise 1

```
library(tidyverse)
oats <- read_csv('https://github.com/qdread/R-for-SAS-users/raw/main/data/Edwards_oats.csv')
```

### Exercise 2

```
oats_subset <- oats %>%
filter(
year == 2001,
gen %in% c('Belle', 'Blaze', 'Brawn', 'Chaps')
)
```

You can separate multiple conditions inside `filter()`

with either `,`

or `&`

.

### Exercise 3

```
oats_subset %>%
group_by(gen) %>%
summarize(
mean_yield = mean(yield),
stdev_yield = sd(yield)
)
```

### Exercise 4

```
ggplot(oats_subset, aes(x = loc, y = yield)) +
geom_boxplot()
```

### Exercise 5

```
oats_fit <- lm(yield ~ gen, data = oats_subset)
check_model(oats_fit) # Regression diagnostics
summary(oats_fit) # Displays model coefficients
anova(oats_fit) # ANOVA table
```

Here there is no need to explicitly specify that `gen`

is
a categorical variable as we do in SAS with `class gen;`

. It
is detected automatically. As in the lesson, you can see that the model
fitting, regression diagnostics, display of coefficients, and ANOVA
table must be called up with individual lines of code instead of all
being folded into the same `proc`

as we do in SAS.

### Exercise 6

```
oats_fit_GxE <- lm(yield ~ gen + loc + gen:loc, data = oats_subset)
check_model(oats_fit_GxE) # Regression diagnostics
summary(oats_fit_GxE) # Displays model coefficients
anova(oats_fit_GxE) # ANOVA table
```

This is actually a much better model than above. You can see here
that the model formula with multiple predictors has the predictors
separated with `+`

. The interaction between two predictors is
specified by putting a `:`

between two predictors.