setwd("C:/Users/Owner/Downloads/All Downloads/Stepping 2 Workspace")
getwd()
## [1] "C:/Users/Owner/Downloads/All Downloads/Stepping 2 Workspace"
# List of packages
# List of packages
packages <- c("tidyverse", "infer", "fst", "modelsummary", "effects", "ggplot2", "tidyverse", "modelsummary", "forcats", "RColorBrewer", "ggplot2",
"fst", "viridis", "knitr", "kableExtra", "rmarkdown", "ggridges", "viridis", "questionr") # add any you need here
# Install packages if they aren't installed already
new_packages <- packages[!(packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_packages)
# Load the packages
lapply(packages, library, character.only = TRUE)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.3 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.3 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Loading required package: carData
##
## lattice theme set by effectsTheme()
## See ?effectsTheme for details.
##
## Loading required package: viridisLite
##
##
## Attaching package: 'kableExtra'
##
##
## The following object is masked from 'package:dplyr':
##
## group_rows
## [[1]]
## [1] "lubridate" "forcats" "stringr" "dplyr" "purrr" "readr"
## [7] "tidyr" "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [13] "grDevices" "utils" "datasets" "methods" "base"
##
## [[2]]
## [1] "infer" "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [7] "readr" "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [13] "graphics" "grDevices" "utils" "datasets" "methods" "base"
##
## [[3]]
## [1] "fst" "infer" "lubridate" "forcats" "stringr" "dplyr"
## [7] "purrr" "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [13] "stats" "graphics" "grDevices" "utils" "datasets" "methods"
## [19] "base"
##
## [[4]]
## [1] "modelsummary" "fst" "infer" "lubridate" "forcats"
## [6] "stringr" "dplyr" "purrr" "readr" "tidyr"
## [11] "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [16] "grDevices" "utils" "datasets" "methods" "base"
##
## [[5]]
## [1] "effects" "carData" "modelsummary" "fst" "infer"
## [6] "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [11] "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [16] "stats" "graphics" "grDevices" "utils" "datasets"
## [21] "methods" "base"
##
## [[6]]
## [1] "effects" "carData" "modelsummary" "fst" "infer"
## [6] "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [11] "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [16] "stats" "graphics" "grDevices" "utils" "datasets"
## [21] "methods" "base"
##
## [[7]]
## [1] "effects" "carData" "modelsummary" "fst" "infer"
## [6] "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [11] "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [16] "stats" "graphics" "grDevices" "utils" "datasets"
## [21] "methods" "base"
##
## [[8]]
## [1] "effects" "carData" "modelsummary" "fst" "infer"
## [6] "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [11] "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [16] "stats" "graphics" "grDevices" "utils" "datasets"
## [21] "methods" "base"
##
## [[9]]
## [1] "effects" "carData" "modelsummary" "fst" "infer"
## [6] "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [11] "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [16] "stats" "graphics" "grDevices" "utils" "datasets"
## [21] "methods" "base"
##
## [[10]]
## [1] "RColorBrewer" "effects" "carData" "modelsummary" "fst"
## [6] "infer" "lubridate" "forcats" "stringr" "dplyr"
## [11] "purrr" "readr" "tidyr" "tibble" "ggplot2"
## [16] "tidyverse" "stats" "graphics" "grDevices" "utils"
## [21] "datasets" "methods" "base"
##
## [[11]]
## [1] "RColorBrewer" "effects" "carData" "modelsummary" "fst"
## [6] "infer" "lubridate" "forcats" "stringr" "dplyr"
## [11] "purrr" "readr" "tidyr" "tibble" "ggplot2"
## [16] "tidyverse" "stats" "graphics" "grDevices" "utils"
## [21] "datasets" "methods" "base"
##
## [[12]]
## [1] "RColorBrewer" "effects" "carData" "modelsummary" "fst"
## [6] "infer" "lubridate" "forcats" "stringr" "dplyr"
## [11] "purrr" "readr" "tidyr" "tibble" "ggplot2"
## [16] "tidyverse" "stats" "graphics" "grDevices" "utils"
## [21] "datasets" "methods" "base"
##
## [[13]]
## [1] "viridis" "viridisLite" "RColorBrewer" "effects" "carData"
## [6] "modelsummary" "fst" "infer" "lubridate" "forcats"
## [11] "stringr" "dplyr" "purrr" "readr" "tidyr"
## [16] "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [21] "grDevices" "utils" "datasets" "methods" "base"
##
## [[14]]
## [1] "knitr" "viridis" "viridisLite" "RColorBrewer" "effects"
## [6] "carData" "modelsummary" "fst" "infer" "lubridate"
## [11] "forcats" "stringr" "dplyr" "purrr" "readr"
## [16] "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [21] "graphics" "grDevices" "utils" "datasets" "methods"
## [26] "base"
##
## [[15]]
## [1] "kableExtra" "knitr" "viridis" "viridisLite" "RColorBrewer"
## [6] "effects" "carData" "modelsummary" "fst" "infer"
## [11] "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [16] "readr" "tidyr" "tibble" "ggplot2" "tidyverse"
## [21] "stats" "graphics" "grDevices" "utils" "datasets"
## [26] "methods" "base"
##
## [[16]]
## [1] "rmarkdown" "kableExtra" "knitr" "viridis" "viridisLite"
## [6] "RColorBrewer" "effects" "carData" "modelsummary" "fst"
## [11] "infer" "lubridate" "forcats" "stringr" "dplyr"
## [16] "purrr" "readr" "tidyr" "tibble" "ggplot2"
## [21] "tidyverse" "stats" "graphics" "grDevices" "utils"
## [26] "datasets" "methods" "base"
##
## [[17]]
## [1] "ggridges" "rmarkdown" "kableExtra" "knitr" "viridis"
## [6] "viridisLite" "RColorBrewer" "effects" "carData" "modelsummary"
## [11] "fst" "infer" "lubridate" "forcats" "stringr"
## [16] "dplyr" "purrr" "readr" "tidyr" "tibble"
## [21] "ggplot2" "tidyverse" "stats" "graphics" "grDevices"
## [26] "utils" "datasets" "methods" "base"
##
## [[18]]
## [1] "ggridges" "rmarkdown" "kableExtra" "knitr" "viridis"
## [6] "viridisLite" "RColorBrewer" "effects" "carData" "modelsummary"
## [11] "fst" "infer" "lubridate" "forcats" "stringr"
## [16] "dplyr" "purrr" "readr" "tidyr" "tibble"
## [21] "ggplot2" "tidyverse" "stats" "graphics" "grDevices"
## [26] "utils" "datasets" "methods" "base"
##
## [[19]]
## [1] "questionr" "ggridges" "rmarkdown" "kableExtra" "knitr"
## [6] "viridis" "viridisLite" "RColorBrewer" "effects" "carData"
## [11] "modelsummary" "fst" "infer" "lubridate" "forcats"
## [16] "stringr" "dplyr" "purrr" "readr" "tidyr"
## [21] "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [26] "grDevices" "utils" "datasets" "methods" "base"
ess <- read_fst("All-ESS-Data.fst")
In what follows, we will filter to France as our country of interest and re-code a number of outcomes and covariates that can be subsequently used.
finand_data <- ess %>%
# Filter for France
filter(cntry == "FI") %>%
# Recoding clsprty and cleaning trstplt (will use later)
mutate(
trstplc = case_when(
trstplc == 0 ~ 1, # Keep 1 as numeric
trstplc == 2 ~ 0, # Recode 2 as numeric 0
trstplc %in% c(77, 88, 99) ~ NA_real_, # Set 7, 8, 9 as NA keeping the type numeric
TRUE ~ trstplc # Keep all other values as they are
),
trstlgl = ifelse(trstlgl %in% c(77, 88, 99), NA, trstlgl), ## Example of a trust variable
pplhlp = ifelse(pplhlp %in% c(77, 88, 99), NA, pplhlp), # Example of a satisfaction variable
medcrgvc = ifelse(medcrgvc %in% c(77, 88, 99), NA, medcrgvc), # Example of a immigration attitude variable
wrkorg = ifelse(wrkorg %in% c(7, 8, 9), NA, wrkorg), # Example of a human values variable
)
#Finland_data_wrkorg
finland_data <- ess %>%
mutate(gndr_recode = case_when(
gndr == 1 ~ 'Male',
gndr == 2 ~ 'Female', # to retain other values as they are (optional)
))
# check the recoded variable table(finland_data$wrkorg_recode)
finland_data <- finland_data %>%
mutate(trstplc_recode = recode(as.character(trstplc),
'0' = "Untrustworthy",
'1' = "Moderately Trustworthy",
'2' = "Moderately Trustworthy",
'3' = "Moderately Trustworthy",
'4' = "Moderately Trustworthy",
'5' = "Moderately Trustworthy",
'6' = "Mostly Trustworthy",
'7' = "Mostly Trustworthy",
'8' = "Mostly Trustworthy",
'9' = "Mostly Trustworthy",
'10' = "Completely Trustworthy",
'77' = NA_character_,
'88' = NA_character_,
'99' = NA_character_))
# check table(finland_data$trstplc_finland)
finland_data <- finland_data %>%
mutate(pplhlp_recode = recode(as.character(pplhlp),
'0' = "Selfish",
'1' = "Moderate",
'2' = "Moderate",
'3' = "Moderate",
'4' = "Moderate",
'5' = "Moderate",
'6' = "Helpful",
'7' = "Helpful",
'8' = "Helpful",
'9' = "Helpful",
'10' = "Selfless",
'77' = NA_character_,
'88' = NA_character_,
'99' = NA_character_))
finland_data <- finland_data %>%
mutate(medcrgvc_recode = recode(as.character(medcrgvc),
'0' = "Does not apply at all",
'1' = "Moderately Free",
'2' = "Moderately Free",
'3' = "Moderately Free",
'4' = "Moderately Free",
'5' = "Moderately Free",
'6' = "Mostly Free",
'7' = "Mostly Free",
'8' = "Mostly Free",
'9' = "Mostly Free",
'10' ="COmpletely Free",
'77' = NA_character_,
'88' = NA_character_,
'99' = NA_character_))
#Check table(finland_data$medcrgvc_recode)
model1 <- lm(trstplc ~ gndr_recode, data = finland_data)
model2 <- lm(trstplc ~ gndr_recode + medcrgvc_recode, data = finland_data)
model3 <- lm(trstplc ~ gndr_recode + medcrgvc_recode + gndr_recode*medcrgvc_recode, data = finland_data)
modelsummary(
list(model1, model2, model3))
 (1) |   (2) |   (3) | |
---|---|---|---|
(Intercept) | 7.298 | 7.589 | 7.700 |
(0.018) | (0.057) | (0.073) | |
gndr_recodeMale | −0.688 | −0.411 | −0.623 |
(0.027) | (0.048) | (0.101) | |
medcrgvc_recodeDoes not apply at all | −2.844 | −2.728 | |
(0.133) | (0.184) | ||
medcrgvc_recodeModerately Free | −1.484 | −1.606 | |
(0.070) | (0.097) | ||
medcrgvc_recodeMostly Free | −0.512 | −0.680 | |
(0.061) | (0.087) | ||
gndr_recodeMale × medcrgvc_recodeDoes not apply at all | −0.265 | ||
(0.266) | |||
gndr_recodeMale × medcrgvc_recodeModerately Free | 0.238 | ||
(0.140) | |||
gndr_recodeMale × medcrgvc_recodeMostly Free | 0.336 | ||
(0.123) | |||
Num.Obs. | 489588 | 110349 | 110349 |
R2 | 0.001 | 0.008 | 0.008 |
R2 Adj. | 0.001 | 0.008 | 0.008 |
AIC | 3587570.3 | 771423.4 | 771417.9 |
BIC | 3587603.6 | 771481.0 | 771504.4 |
Log.Lik. | −1793782.147 | −385705.681 | −385699.955 |
RMSE | 9.44 | 7.98 | 7.98 |
#Note: moderator vs mediators,
modelsummary(
list(model1, model2, model3),
fmt = 1,
estimate = c( "{estimate} ({std.error}){stars}",
"{estimate} ({std.error}){stars}",
"{estimate} ({std.error}){stars}"),
statistic = NULL,
coef_omit = "Intercept")
 (1) |   (2) |   (3) | |
---|---|---|---|
gndr_recodeMale | −0.7 (0.0)*** | −0.4 (0.0)*** | −0.6 (0.1)*** |
medcrgvc_recodeDoes not apply at all | −2.8 (0.1)*** | −2.7 (0.2)*** | |
medcrgvc_recodeModerately Free | −1.5 (0.1)*** | −1.6 (0.1)*** | |
medcrgvc_recodeMostly Free | −0.5 (0.1)*** | −0.7 (0.1)*** | |
gndr_recodeMale × medcrgvc_recodeDoes not apply at all | −0.3 (0.3) | ||
gndr_recodeMale × medcrgvc_recodeModerately Free | 0.2 (0.1)+ | ||
gndr_recodeMale × medcrgvc_recodeMostly Free | 0.3 (0.1)** | ||
Num.Obs. | 489588 | 110349 | 110349 |
R2 | 0.001 | 0.008 | 0.008 |
R2 Adj. | 0.001 | 0.008 | 0.008 |
AIC | 3587570.3 | 771423.4 | 771417.9 |
BIC | 3587603.6 | 771481.0 | 771504.4 |
Log.Lik. | −1793782.147 | −385705.681 | −385699.955 |
RMSE | 9.44 | 7.98 | 7.98 |
### Seperate here
# We use the "effect" function to call the interaction term from model 3. We assign the results to "effect_plot"
interaction_plot <- effect("gndr_recode*medcrgvc_recode", model3, na.rm=TRUE)
# We plot here the interaction term
plot(interaction_plot,
main="Interaction effect Female and Male Gender x level of media criticism",
xlab="Male and Female Gender",
ylab="media criticism")
### Plotting
plot <- expand.grid(
pplhlp_recode = unique(finland_data$pplhlp_recode), # Using cohort here
medcrgvc_recode = unique(finland_data$medcrgvc_recode)
)
model4 <- lm(trstplc ~ pplhlp_recode + medcrgvc_recode + pplhlp_recode*medcrgvc_recode, data = finland_data)
plot$predicted <- predict(model4, newdata = plot)
# Aggregate data by cohort and educ_level
avg_data <- finland_data %>%
group_by(pplhlp_recode, medcrgvc_recode) %>%
summarize(avg_trstplc = mean(trstplc, na.rm = TRUE))
## `summarise()` has grouped output by 'pplhlp_recode'. You can override using the
## `.groups` argument.
# Plotting
ggplot(avg_data, aes(x = pplhlp_recode, y = avg_trstplc, color = medcrgvc_recode)) +
geom_point(size = 0.75) +
geom_line(data = plot, aes(y = predicted, group = medcrgvc_recode)) +
scale_y_continuous(limits = c(3.5, 7), breaks = scales::breaks_width(0.5)) +
scale_color_discrete(breaks = c("Yes", "No")) +
theme(legend.position = "bottom") +
labs(
x = "Level of helpfulness",
y = "trust in police",
color = "level of media criticism"
)
## Warning: Removed 12 rows containing missing values (`geom_point()`).
## Warning: Removed 14 rows containing missing values (`geom_line()`).
```