Setting up the environment

packages <- c("tidyverse", "fst", "modelsummary")
new_packages <- packages[!(packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_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
## [[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"

Task 1

Provide code and answer.

Prompt and question: calculate the average for the variable ‘happy’ for the country of Norway. On average, based on the ESS data, who reports higher levels of happiness: Norway or Belgium?

Note: we already did it for Belgium. You just need to compare to Norway’s average, making sure to provide the code for both.

Loading Data into R

norway_data <- read.fst("/Users/mac/Desktop/norway_data.fst")

Subsetting

norway_happy <- norway_data %>%
  filter(cntry == "NO") %>%
  select(happy)
norway_happy$y <- norway_happy$happy
table(norway_happy$y)
## 
##    0    1    2    3    4    5    6    7    8    9   10   77   88 
##   15   29   59  163  238  730  817 2617 5235 3796 2344   12   10
norway_happy$y[norway_happy$y %in% c(77:88)] <- NA
table(norway_happy$y)
## 
##    0    1    2    3    4    5    6    7    8    9   10 
##   15   29   59  163  238  730  817 2617 5235 3796 2344

Calculating Mean

norway_happy_mean <- mean(norway_happy$y, na.rm = TRUE)
cat("Mean of 'norway_happy' is:", norway_happy_mean, "\n")
## Mean of 'norway_happy' is: 7.975005

Loading Data into R

belgium_data <- read.fst("/Users/mac/Desktop/belgium_data.fst")

Subsetting

belgium_happy <- belgium_data %>%
  filter(cntry == "BE") %>%
  select(happy)
belgium_happy$y <- belgium_happy$happy
table(belgium_happy$y) 
## 
##    0    1    2    3    4    5    6    7    8    9   10   77   88   99 
##   50   27  104  194  234  830  999 3503 6521 3402 1565    3   16    3
belgium_happy$y[belgium_happy$y %in% 77:99] <- NA
table(belgium_happy$y)  
## 
##    0    1    2    3    4    5    6    7    8    9   10 
##   50   27  104  194  234  830  999 3503 6521 3402 1565
belgium_happy_mean <- mean(belgium_happy$y, na.rm = TRUE)
cat("Mean of 'belgium_happy' is:", belgium_happy_mean, "\n")
## Mean of 'belgium_happy' is: 7.737334

Answer: The Norway’s average is 7.975, and the Belgium’s average is 7.737. So Norway reports higher levels of happiness.

Task 2

Provide code and answer.

Prompt and question: what is the most common category selected, for Irish respondents, for frequency of binge drinking? The variable of interest is: alcbnge.

More info here: https://ess-search.nsd.no/en/variable/0c65116e-7481-4ca6-b1d9-f237db99a694.

Hint: need to convert numeric value entries to categories as specified in the variable information link. We did similar steps for Estonia and the climate change attitude variable.

Loading Data into R

ireland_data <- read.fst("/Users/mac/Desktop/ireland_data.fst")

Counting categorical variables

ireland_alcbnge <- ireland_data %>%
  filter(cntry == "IE") %>%
  select(alcbnge)
ireland_data$alcbnge_category <- case_when(
  ireland_data$alcbnge == 1 ~ "Never",
  ireland_data$alcbnge == 2 ~ "Less than once a month",
  ireland_data$alcbnge == 3 ~ "Once a month",
  ireland_data$alcbnge == 4 ~ "Once a week",
  ireland_data$alcbnge == 5 ~ "Daily",
  TRUE ~ NA_character_
)
table(ireland_data$alcbnge_category)
## 
##                  Daily Less than once a month                  Never 
##                    239                    650                     65 
##           Once a month            Once a week 
##                    346                    417
get_mode <- function(v) {
  tbl <- table(v)
  mode_vals <- as.character(names(tbl)[tbl == max(tbl)])
  return(mode_vals)
}
mode_values <- get_mode(ireland_data$alcbnge_category)
cat("Most common category of binge drinking frequency in Ireland:", paste(mode_values, collapse = ", "), "\n")
## Most common category of binge drinking frequency in Ireland: Less than once a month

Task 3

Provide code and answer.

Prompt and question: when you use the summary() function for the variable plnftr (about planning for future or taking every each day as it comes from 0-10) for both the countries of Portugal and Serbia, 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.

Loading Data into R

portugal_data <- read.fst("/Users/mac/Desktop/portugal_data.fst")
serbia_data <- read.fst("/Users/mac/Desktop/serbia_data.fst")

The summary function

portugal_plnftr <- portugal_data %>%
  filter(cntry == "PT") %>%
  select(plnftr)
summary_portugal <- summary(portugal_plnftr)
serbia_plnftr <- serbia_data %>%
  filter(cntry == "RS") %>%
  select(plnftr)
summary_serbia <- summary(serbia_plnftr)
print(summary_portugal)
##      plnftr      
##  Min.   : 0.000  
##  1st Qu.: 3.000  
##  Median : 5.000  
##  Mean   : 6.426  
##  3rd Qu.: 8.000  
##  Max.   :88.000  
##  NA's   :14604
print(summary_serbia)
##      plnftr      
##  Min.   : 0.000  
##  1st Qu.: 0.000  
##  Median : 4.000  
##  Mean   : 4.983  
##  3rd Qu.: 8.000  
##  Max.   :88.000  
##  NA's   :1505

Answer:I’ve observed differences between Portugal and Serbia regarding attitudes towards planning for the future (the variable plnftr). The higher median in Portugal suggests that Portuguese people are more inclined to plan for the future.

Task 4

Provide code and answer.

Prompt and question: using the variables stfdem and gndr, answer the following: on average, who is more dissastified with democracy in Italy, men or women? Explain while referring to the output generated.

Loading Data into R

italy_data <- read.fst("/Users/mac/Desktop/Italy_data.fst")

Average

italy_data <- italy_data %>%
filter(cntry == "IT") %>%
  mutate(
    gndr = case_when(
      gndr == 1 ~ "Male",
      gndr == 2 ~ "Female",
      TRUE ~ as.character(gndr)
    ),
    stfdem = ifelse(stfdem %in% c(77, 88), NA, stfdem) # Replace 'special_codes' with actual codes for NA
  )
average_satisfaction_by_gender <- italy_data %>%
  group_by(gndr) %>%
  summarize(average_stfdem = mean(stfdem, na.rm = TRUE))
print(average_satisfaction_by_gender)
## # A tibble: 3 × 2
##   gndr   average_stfdem
##   <chr>           <dbl>
## 1 9                3.25
## 2 Female           4.69
## 3 Male             4.78

Answer: Italian women are less satisfied with democracy, beacuse the average score for women is lower than that for men.

Task 5

Provide code and answer.

Prompt: Interpret the boxplot graph of stfedu and stfhlth that we generated already: according to ESS data, would we say that the median French person is more satisfied with the education system or health services? Explain.

Change the boxplot graph: provide the code to change some of the key labels: (1) Change the title to: Boxplot of satisfaction with the state of education vs. health services; (2) Remove the x-axis label; (3) Change the y-axis label to: Satisfaction (0-10).

Hint: copy the boxplot code above and just replace or cut what is asked.

Loading Data into R

france_data <- read.fst("/Users/mac/Desktop/france_data.fst")

Boxplots

france_data %>%
  mutate(stfedu = ifelse(stfedu %in% c(77, 88, 99), NA, stfedu),
         stfhlth = ifelse(stfhlth %in% c(77, 88, 99), NA, stfhlth)) %>%
  select(stfedu, stfhlth) %>%
  gather(variable, value, c(stfedu, stfhlth)) %>%
ggplot(aes(x = variable, y = value)) +
  geom_boxplot() +
  labs(y = "Satisfaction (0-10)", x = "", title = "Boxplot of satisfaction with the state of education vs. health services") +
  theme_minimal()
## Warning: Removed 364 rows containing non-finite values (`stat_boxplot()`).

Answer: The satisfaction score for the state of education exceeds that for health services, indicating that the median French person has a higher level of satisfaction with education compared to health services.