Skip to content

Commit 4641fd2

Browse files
authored
Merge pull request #275 from d-morrison/linear.predictor
adding details about fitted/predicted values
2 parents 5c3149a + 01b7e8b commit 4641fd2

File tree

4 files changed

+73
-7
lines changed

4 files changed

+73
-7
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,5 @@ _freeze/
2525
*.pdf
2626
rsconnect
2727
*.md
28+
29+
**/*.quarto_ipynb

DESCRIPTION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Authors@R:
1010
Description: Lecture notes for Epi 204 @ UC Davis
1111
Encoding: UTF-8
1212
Imports:
13+
arm,
1314
arsenal,
1415
cards (>= 0.6.0.9007),
1516
cardx (>= 0.2.4.9003),

_sec_logistic_score_fn.qmd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,11 @@ $$
136136
= \pmat{
137137
\sumin 1 \eps_i
138138
\\
139-
\sumin x_1 \eps_i
139+
\sumin x_{i,1}\eps_i
140140
\\
141141
\vdots
142142
\\
143-
\sumin x_p \eps_i
143+
\sumin x_{i,p} \eps_i
144144
}
145145
= \pmat{
146146
\v1 \cdot \veps

_sec_logreg_in_R.qmd

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
:::{#tbl-beetles-model-grouped}
22

33
```{r}
4-
#| label: beetles-model-grouped-
4+
#| label: beetles-model-grouped-tbl
5+
6+
library(glmx)
7+
library(dplyr)
8+
data(BeetleMortality)
9+
beetles <- BeetleMortality |>
10+
mutate(
11+
pct = died / n,
12+
survived = n - died
13+
)
14+
515
beetles_glm_grouped <-
616
beetles |>
717
glm(
@@ -21,15 +31,68 @@ logistic regression model for beetles data with grouped (binomial) data
2131

2232
---
2333

24-
Fitted values:
34+
#### Fitted values
35+
36+
Fitted values are provided on the probability scale (@tbl-beetles-model-fitted-values)
2537

2638
```{r}
27-
#| label: beetles-model-fitted-values
28-
fitted.values(beetles_glm_grouped)
39+
#| label: tbl-beetles-model-fitted-values
40+
#| code-fold: show
41+
42+
fitted(beetles_glm_grouped)
2943
predict(beetles_glm_grouped, type = "response")
44+
```
45+
46+
---
47+
48+
#### Count scale
49+
50+
For grouped data,
51+
we can convert to the count scale by multiplying by the group size:
52+
53+
```{r}
54+
beetles$n * fitted(beetles_glm_grouped)
55+
```
56+
57+
---
58+
59+
60+
#### Logit scale
61+
62+
```{r}
3063
predict(beetles_glm_grouped, type = "link")
3164
32-
fit_y <- beetles$n * fitted.values(beetles_glm_grouped)
65+
```
66+
67+
---
68+
69+
Converting between logit and probability scales works as expected:
70+
71+
```{r}
72+
predict(beetles_glm_grouped, type = "link") |> arm::invlogit()
73+
predict(beetles_glm_grouped, type = "response")
74+
75+
predict(beetles_glm_grouped, type = "response") |> arm::logit()
76+
predict(beetles_glm_grouped, type = "link")
77+
```
78+
79+
---
80+
81+
`type = "terms"` is confusing, because the variables get centered:
82+
83+
```{r}
84+
predict(beetles_glm_grouped, type = "terms")
85+
coef(beetles_glm_grouped)["dose"] * beetles$dose
86+
```
87+
88+
---
89+
90+
We can construct the link-scale predictions from the terms:
91+
92+
```{r}
93+
terms_pred <- predict(beetles_glm_grouped, type = "terms")
94+
terms_pred + attr(terms_pred, "constant")
95+
predict(beetles_glm_grouped, type = "link")
3396
```
3497

3598
---

0 commit comments

Comments
 (0)