# List of packages
packages <- c("tidyverse", "fst", "modelsummary", "viridis") # 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.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ 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: viridisLite
## [[1]]
## [1] "lubridate" "forcats" "stringr" "dplyr" "purrr" "readr"
## [7] "tidyr" "tibble" "ggplot2" "tidyverse" "stats" "graphics"
## [13] "grDevices" "utils" "datasets" "methods" "base"
##
## [[2]]
## [1] "fst" "lubridate" "forcats" "stringr" "dplyr" "purrr"
## [7] "readr" "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [13] "graphics" "grDevices" "utils" "datasets" "methods" "base"
##
## [[3]]
## [1] "modelsummary" "fst" "lubridate" "forcats" "stringr"
## [6] "dplyr" "purrr" "readr" "tidyr" "tibble"
## [11] "ggplot2" "tidyverse" "stats" "graphics" "grDevices"
## [16] "utils" "datasets" "methods" "base"
##
## [[4]]
## [1] "viridis" "viridisLite" "modelsummary" "fst" "lubridate"
## [6] "forcats" "stringr" "dplyr" "purrr" "readr"
## [11] "tidyr" "tibble" "ggplot2" "tidyverse" "stats"
## [16] "graphics" "grDevices" "utils" "datasets" "methods"
## [21] "base"
ess <- read_fst("All-ESS-Data.fst")
belgium_data <- read.fst("belgium_data.fst")
serbia_data <- read.fst("serbia_data.fst")
estonia_data <- read.fst("estonia_data.fst")
portugal_data <- read.fst("portugal_data.fst")
italy_data <- read.fst("italy_data.fst")
france_data <- read.fst("france_data.fst")
norway_data <- read.fst("norway_data.fst")
##Task 1 Provide code and answer.
Prompt and question: calculate the average for the variable ‘health’ for the countries of Serbia and Belgium. On average, based on the ESS data, who reports higher levels of subjective health: Serbia and Belgium?
belgium_health <- ess %>%
filter(cntry == "BE") %>%
select(health)
belgium_health$y <- belgium_health$health
table(belgium_health$y)
##
## 1 2 3 4 5 7 8 9
## 4033 9262 3338 674 137 2 3 2
mean_belgium <- mean(belgium_health$y, na.rm = TRUE)
cat("Mean of 'y' is:", mean_belgium, "\n")
## Mean of 'y' is: 2.063377
serbia_health <- ess %>%
filter(cntry == "RS") %>%
select(health)
serbia_health$y <- serbia_health$health
table(serbia_health$y)
##
## 1 2 3 4 5 8 9
## 620 1051 1332 411 107 3 24
mean_serbia <- mean(serbia_health$y, na.rm = TRUE)
cat("Mean of 'y' is:", mean_serbia, "\n")
## Mean of 'y' is: 2.575254
Belgium = 2.06, Serbia = 2.58, thus Serbia reports slightly higher subjective health.
##Task 2 Provide code and answer.
Prompt and question: what is the most common category selected, for Norwegian respondents, for how often they socially meet with friends or relatives. The variable of interest is: sclmeet.
norway_binge <- norway_data %>%
select(sclmeet)
norway_binge <- ess %>%
filter(cntry == "NO") %>%
select(sclmeet)
table(norway_binge$sclmeet)
##
## 1 2 3 4 5 6 7 77 88
## 44 356 746 2569 2119 5764 4458 2 7
norway_binge$sclmeet[norway_binge$sclmeet %in% 77:88] <- NA
table(norway_binge$sclmeet)
##
## 1 2 3 4 5 6 7
## 44 356 746 2569 2119 5764 4458
norway_binge$sclmeet_category <- factor(norway_binge$sclmeet, labels = c("Never", "Less than once a month", "Once a month", "Several times a month", "Once a week","Several times a week","Everyday"))
table(norway_binge$sclmeet_category)
##
## Never Less than once a month Once a month
## 44 356 746
## Several times a month Once a week Several times a week
## 2569 2119 5764
## Everyday
## 4458
get_mode <- function(v) {
tbl <- table(v)
mode_vals <- as.character(names(tbl)[tbl == max(tbl)])
return(mode_vals)
}
mode_norway_binge <- get_mode(norway_binge$sclmeet_category)
mode_norway_binge
## [1] "Several times a week"
The most common category is “several times a week” for how often they socially meet with friends or relatives.
##Task 3 Provide code and answer.
Prompt and question: when you use the summary() function for the variable wrclmch (i.e., how worried about climate change) for both the countries of Estonia and Portugal – what do you notice? What stands out as different when you compare the two countries (note: look up the variable information on the ESS website to help with interpretation)? Explain while referring to the output generated.
portugal_wrclmch <- ess %>%
filter(cntry == "PT") %>%
select(wrclmch)
estonia_wrclmch <- ess %>%
filter(cntry == "EE") %>%
select(wrclmch)
summary(portugal_wrclmch)
## wrclmch
## Min. :1.000
## 1st Qu.:3.000
## Median :4.000
## Mean :3.583
## 3rd Qu.:4.000
## Max. :8.000
## NA's :14773
summary(estonia_wrclmch)
## wrclmch
## Min. :1.000
## 1st Qu.:2.000
## Median :3.000
## Mean :2.855
## 3rd Qu.:3.000
## Max. :8.000
## NA's :13295
table(portugal_wrclmch$wrclmch)
##
## 1 2 3 4 5 6 7 8
## 55 251 1171 1203 380 13 4 31
table(estonia_wrclmch$wrclmch)
##
## 1 2 3 4 5 6 7 8
## 343 852 1612 565 125 56 1 7
With responses ranging from 1 (Not at all worried) to 5 (extremely worried), the “wrclmch” variable gauges respondents’ level of concern about climate change. There are also options for non-responses, such as “Not applicable,” “Refusal,” “Don’t know,” and “No answer.”
Comparing the two countries we can see that the mean level of concern about climate change is higher in Estonia (3.583) compared to Portugal (2.855). This suggests that, on average, respondents in Estonia are more worried about climate change than people in Portugal.
The data suggests that the response distribution in Estonia is more positively skewed than in Portugal, as evidenced by the higher mean value in relation to the median. This suggests that the proportion of respondents in Estonia who expressed really high levels of concern may be comparatively greater.
##Task 4 Provide code and answer.
Prompt and question: using the variables stfhlth and gndr, answer the following: on average, who is more satisfied with health services in Italy, men or women? Explain while referring to the output generated.
table(italy_data$gndr)
##
## 1 2 9
## 4836 5329 13
italy_data$gndr[italy_data$gndr %in% 9] <- NA
table(italy_data$gndr)
##
## 1 2
## 4836 5329
table(italy_data$stfhlth)
##
## 0 1 2 3 4 5 6 7 8 9 10 77 88 99
## 455 279 553 778 958 1470 1718 1869 1363 411 192 24 105 3
italy_data$stfhlth[italy_data$stfhlth %in% 77:99] <- NA
table(italy_data$stfhlth)
##
## 0 1 2 3 4 5 6 7 8 9 10
## 455 279 553 778 958 1470 1718 1869 1363 411 192
italy_data <- italy_data %>%
mutate(
gndr = case_when(
gndr == 1 ~ "Male",
gndr == 2 ~ "Female",
TRUE ~ as.character(gndr)
)
)
italy_data <- italy_data %>% filter(!is.na(gndr))
italy_data <- italy_data %>% filter(!is.na(stfhlth))
table(italy_data$gndr)
##
## Female Male
## 5260 4774
table(italy_data$stfhlth)
##
## 0 1 2 3 4 5 6 7 8 9 10
## 455 278 552 775 957 1466 1716 1869 1363 411 192
italy_data %>%
group_by(gndr) %>%
summarize(meanstfhlth = mean(stfhlth, na.rm = TRUE))
## # A tibble: 2 × 2
## gndr meanstfhlth
## <chr> <dbl>
## 1 Female 5.38
## 2 Male 5.54
Males are more satisified yet the difference is only 5.53 vs 5.38.
##Task 5 Create boxplots, in the same graph, for stfdem and stfgov for the country of France. Provide an appropriate title and labels. Further, tell us: according to ESS data, would we say that the median French person is more satisfied with the democracy or the national government? Explain.
france_data %>%
# Setting values to NA
mutate(stfdem = ifelse(stfdem %in% c(77, 88, 99), NA, stfdem),
stfgov = ifelse(stfgov %in% c(77, 88, 99), NA, stfgov)) %>%
# Reshaping the data
select(stfdem, stfgov) %>%
gather(variable, value, c(stfdem, stfgov)) %>%
# Creating the boxplot
ggplot(aes(x = variable, y = value)) +
geom_boxplot() +
labs(y = "Y-axis", x = "X-axis", title = "Boxplot of stfdem vs. stfgov") +
theme_minimal()
## Warning: Removed 557 rows containing non-finite values (`stat_boxplot()`).
median(france_data$stfdem)
## [1] 5
median(france_data$stfgov)
## [1] 4
france_data %>%
# Setting values to NA
mutate(stfdem = ifelse(stfdem %in% c(77, 88, 99), NA, stfdem),
stfgov = ifelse(stfgov %in% c(77, 88, 99), NA, stfgov)) %>%
# Reshaping the data
select(stfdem, stfgov) %>%
gather(variable, value, c(stfdem, stfgov)) %>%
ggplot(aes(x = variable, y = value)) +
geom_boxplot() +
labs(title = "Boxplot of satisfaction with a democracy or a national government",
x = "", # Removing x-axis label
y = "Satisfaction (0-10)") +
theme_minimal()
## Warning: Removed 557 rows containing non-finite values (`stat_boxplot()`).
The median French person is more satisfied with the democracy governemnt.