-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathREADME.Rmd
151 lines (103 loc) · 4.94 KB
/
README.Rmd
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
---
output: github_document
---
<img src='logo/Hex.png' align="right" height="139" />
```{r setup, include=FALSE}
library(knitr)
opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)
extract_pkgs <- function(fl) {
if (length(fl) == 1) {
txt <- read.delim(fl, header = FALSE)[[1]] |>
paste0(collapse = "\n")
pkg_lib <- stringr::str_extract_all(txt, pattern = "(?<=library\\().{1,}?(?=\\))")
pkg_req <- stringr::str_extract_all(txt, pattern = "(?<=require\\().{1,}?(?=\\))")
pkg_name <- stringr::str_extract_all(txt, pattern = "[a-z|A-Z|0-9]{1,}(?=\\:\\:)")
pkgs <- c(pkg_lib, pkg_req, pkg_name)
} else if (length(fl) > 1) {
pkgs <- sapply(fl, extract_pkgs)
}
pkgs |>
unlist(recursive = TRUE) |>
as.vector() |>
unique()
}
make_pkg_table <- function(pkgs) {
# pkgs <- pkgs[sapply(pkgs, function(x) length(x) > 0)]
new_pkgs <- lapply(seq_along(pkgs), function(i) {
lesson_pkgs <- pkgs[[i]]
prev_lesson_pkgs <- unlist(head(pkgs,i-1))
!lesson_pkgs %in% prev_lesson_pkgs
})
ps <- sapply(seq_along(pkgs), function(idx) {
x <- pkgs[[idx]]
is_new <- ifelse(new_pkgs[[idx]], "**", "")
paste0(
glue::glue("[{is_new}`{x}`{is_new}](https://CRAN.R-project.org/package={x})"),
collapse = ", "
)
})
c("|Lesson|Packages|\n|----|----|\n", # header
glue::glue("|[{folder}](/{folder})|{ps}|\n\n",
folder = names(pkgs))) |>
paste0(collapse = "")
}
get_src <- function(pkg) {
pd <- packageDescription(pkg)
if (is.null(src <- pd$Repository)) {
if (!is.null(src <- pd$GithubRepo)) {
src <- paste0("Github: ",pd$GithubUsername,"/",src)
} else {
src <- "Local version"
}
}
return(src)
}
```
# Analysis of Factorial Designs foR Psychologists
[![](https://img.shields.io/badge/Open%20Educational%20Resources-Compatable-brightgreen)](https://creativecommons.org/about/program-areas/education-oer/)
[![](https://img.shields.io/badge/CC-BY--NC%204.0-lightgray)](http://creativecommons.org/licenses/by-nc/4.0/)
[![](https://img.shields.io/badge/Language-R-blue)](http://cran.r-project.org/)
<sub>*Last updated `r Sys.Date()`.*</sub>
This Github repo contains all lesson files for *Analysis of Factorial Designs foR Psychologists*. The goal is to impart students with the basic tools to fit and evaluate **statistical models for factorial designs (w/ plots) using [`afex`](https://afex.singmann.science/)**, and and conduct **follow-up analyses (simple effects, planned contrasts, post-hoc test; w/ plots) using [`emmeans`](https://cran.r-project.org/package=emmeans)**. Although the focus is on ANOVAs, the materials regarding follow-up analyses (\~80\% of the course) are applicable to linear mixed models, and even regression with factorial predictors.
These topics were taught in the graduate-level course ***Analyses of Variance*** (Psych Dep., Ben-Gurion University of the Negev, *Spring, 2019*). This course assumes basic competence in R (importing, regression modeling, plotting, etc.), along the lines of [*Practical Applications in R for Psychologists*](https://github.com/mattansb/Practical-Applications-in-R-for-Psychologists).
**Notes:**
- This repo contains only materials relating to *Practical Applications in R*, and does not contain any theoretical or introductory materials.
- Please note that some code does not work *on purpose*, to force students to learn to debug.
## Setup
You will need:
1. A fresh installation of [**`R`**](https://cran.r-project.org/) (preferably version 4.1 or above).
2. [RStudio IDE](https://www.rstudio.com/products/rstudio/download/) (optional, but recommended).
3. The following packages, listed by lesson:
```{r, echo=FALSE}
r_list <- list.files(pattern = ".(R|r)$", recursive = TRUE, full.names = TRUE) |>
Filter(f = \(x) !stringr::str_detect(x, pattern = "(SOLUTION|logo)"))
lesson_names <- stringr::str_extract(r_list, pattern = "(?<=(/)).{1,}(?=(/))")
r_list <- split(r_list, lesson_names)
pkgs <- lapply(r_list, extract_pkgs)
print_pkgs <- make_pkg_table(pkgs)
```
`r print_pkgs`
<sub>*(Bold denotes the first lesson in which the package was used.)*</sub>
You can install all the packages used by running:
```{r echo=FALSE, comment = "", warning=FALSE}
unique_pkgs <- pkgs |>
unlist(recursive = TRUE) |>
unique() |> sort()
packinfo <- installed.packages(fields = c("Package", "Version"))
V <- packinfo[unique_pkgs,"Version"]
src <- sapply(unique_pkgs, get_src)
cat("# in alphabetical order:")
cat("pkgs <-", dput(unique_pkgs) |> capture.output(), fill = 80) |>
capture.output() |>
styler::style_text()
cat('install.packages(pkgs, repos = c("https://easystats.r-universe.dev", getOption("repos")))')
```
<details>
<summary><i>Package Versions</i></summary>
Run on `r osVersion`, with R version `r packageVersion("base")`.
The packages used here:
```{r, echo=FALSE}
v_info <- paste0(glue::glue(" - `{unique_pkgs}` {V} (*{src}*)"), collapse = "\n")
```
`r v_info`
</details>