# data management and graphics package
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6 ✔ purrr 0.3.4
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.2.1 ✔ stringr 1.4.1
## ✔ readr 2.1.2 ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## 載入需要的套件:lme4
## 載入需要的套件:Matrix
##
## 載入套件:'Matrix'
##
## 下列物件被遮斷自 'package:tidyr':
##
## expand, pack, unpack
remove missing values
Gcsemv_r<-na.omit(Gcsemv)
str(Gcsemv_r)
## 'data.frame': 1523 obs. of 5 variables:
## $ school : Factor w/ 73 levels "20920","22520",..: 1 1 1 1 1 2 2 2 2 2 ...
## $ student: Factor w/ 649 levels "1","2","3","4",..: 27 31 42 101 113 1 7 9 15 16 ...
## $ gender : Factor w/ 2 levels "F","M": 1 1 2 1 2 1 2 1 1 2 ...
## $ written: num 39 36 16 49 25 48 46 28 43 29 ...
## $ course : num 76.8 87.9 44.4 89.8 17.5 84.2 66.6 47.2 80.5 57.4 ...
## - attr(*, "na.action")= 'omit' Named int [1:382] 1 2 6 9 29 38 39 47 55 60 ...
## ..- attr(*, "names")= chr [1:382] "1" "2" "6" "9" ...
compute averages by school
Gcsemv2 <- Gcsemv_r %>%
group_by(school) %>%
summarize(ave_written = mean(written, na.rm=TRUE),
ave_course = mean(course, na.rm=TRUE))
str(Gcsemv2)
## tibble [73 × 3] (S3: tbl_df/tbl/data.frame)
## $ school : Factor w/ 73 levels "20920","22520",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ ave_written: num [1:73] 33 35.4 32 53.2 58.7 ...
## $ ave_course : num [1:73] 63.3 57.5 81.4 72.9 72.2 ...
superimpose two plots
ggplot(data=Gcsemv_r, aes(x=written, y=course)) +
geom_point(color="skyblue") +
stat_smooth(method="lm", formula=y ~ x, se=F, col="skyblue") +
geom_point(data=Gcsemv2, aes(ave_written, ave_course), color="steelblue") +
stat_smooth(data=Gcsemv2, aes(ave_written, ave_course),
method="lm", formula= y ~ x, se=F, color="steelblue") +
labs(x="written score",
y="course score") +
theme_bw()
