-
Notifications
You must be signed in to change notification settings - Fork 0
/
simple-linear-model.qmd
86 lines (59 loc) · 1.98 KB
/
simple-linear-model.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# Simple Linear Model
## Fitting a linear model
To understand how greta works, and why it works, we are going to take an example and step through the components, stepping through these in different ways to explain different mechanisms.
Let's load the tidyverse to provide some helpers.
```{r}
library(tidyverse)
```
We're going to be using the `attitude` data, looking at `?attitude`, here is the description of the data:
> From a survey of the clerical employees of a large financial organization, the data are aggregated from the questionnaires of the approximately 35 employees for each of 30 (randomly selected) departments. The numbers give the percent proportion of favourable responses to seven questions in each department.
```{r}
attitude <- as_tibble(attitude,
rownames = "department_id")
attitude
```
Let's do a simple regression, predicting rating, based on complaints. That relationship looks like this:
```{r}
ggplot(attitude,
aes(x = complaints,
y = rating)) +
geom_point()
```
There's a somewhat positive trend here, let's create a basica linear regression, where we want to explain (predict) rating, using complains. We'll start with some vague priors on move on to better ones.
```{r}
library(greta)
# variables & priors
int <- normal(0, 10)
coef <- normal(0, 10)
sd <- cauchy(0, 3, truncation = c(0, Inf))
# linear predictor
mu <- int + coef * attitude$complaints
# observation model - the likelihood
distribution(attitude$rating) <- normal(mu, sd)
m <- model(sd, int, coef)
draws <- mcmc(m)
```
What happened here?
* Set the priors
* Construct the linear predictor, `mu`
* Set the likelihood
* note the things in the model
* perform MCMC
Now let's inspect the MCMC,
```{r}
summary(draws)
```
explore the fit
```{r}
library(bayesplot)
mcmc_trace(draws)
mcmc_dens(draws)
```
The equivalent for this would be a linear model like so:
```{r}
non_bayesian_model <- lm(
rating ~ complaints,
data = attitude
)
summary(non_bayesian_model)
```