Set up:

# List of packages
packages <- c("tidyverse", "fst", "modelsummary") # 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.4
## ✔ 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"
ess <- read_fst("All-ESS-Data.fst")

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.

Belgium:

belgium_happy <- ess %>% 
  filter(cntry == "BE") %>% 
  select(happy)
belgium_happy$y <- belgium_happy$happy

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
mean_y <- mean(belgium_happy$y, na.rm = TRUE)
cat("Mean of 'y' is:", mean_y, "\n")
## Mean of 'y' is: 7.737334

Norway:

norway_happy <- ess %>% 
  filter(cntry == "NO") %>% 
  select(happy)

norway_happy$y <- norway_happy$happy

norway_happy$y[norway_happy$y %in% 77:99] <- 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
mean_y <- mean(norway_happy$y, na.rm = TRUE)
cat("Mean of 'y' is:", mean_y, "\n")
## Mean of 'y' is: 7.975005

Therefore, on average, based on the ESS data, Norway reports higher levels of happiness as the mean of happiness in Norway is 7.975005, which is greater than Belgium’s mean of 7.737334.

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.

ireland_bingedrink <- ess %>%
  filter(cntry == "IE") %>%
  select(alcbnge)


ireland_bingedrink$y <- ireland_bingedrink$alcbnge


table(ireland_bingedrink$y)
## 
##   1   2   3   4   5   6   7   8 
##  65 650 346 417 239 641  26   6
ireland_bingedrink$alcbnge[ireland_bingedrink$alcbnge %in% 6:8] <- NA
table(ireland_bingedrink$alcbnge)
## 
##   1   2   3   4   5 
##  65 650 346 417 239
mode2 <- ireland_bingedrink%>%
  mutate(
    y_category = case_when(
      alcbnge == 1 ~ "Daily or almost daily",
      alcbnge == 2 ~ "Weekly",
      alcbnge == 3 ~ "Monthly",
      alcbnge == 4 ~ "Less than monthly",
      alcbnge == 5 ~ "Never",
      TRUE ~ NA_character_
    ),
    y_category = fct_relevel(factor(y_category),
                             "Daily or almost daily", 
                             "Weekly", 
                             "Monthly", 
                             "Less than monthly", 
                             "Never")
  )

table(mode2$y_category)
## 
## Daily or almost daily                Weekly               Monthly 
##                    65                   650                   346 
##     Less than monthly                 Never 
##                   417                   239
get_mode <- function(v) {
  tbl <- table(v)
  mode_vals <- as.character(names(tbl)[tbl == max(tbl)])
  return(mode_vals)
}

mode_ireland_bingedrink <- get_mode(mode2$y_category)
mode_ireland_bingedrink
## [1] "Weekly"

This code when operated shows that the most common category selected by Irish respondents in terms of the frequency of binge drinking is “weekly” as its mode is “weekly” and in the table, that category’s value is 650, greater than the rest.

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.

portugal_plnftr <- ess %>%
  filter(cntry == "PT") %>%
  select(plnftr)
portugal_plnftr$plnftr[portugal_plnftr$plnftr %in% 88] <- NA

serbia_plnftr <- ess %>%
  filter(cntry == "RS") %>%
  select(plnftr)
serbia_plnftr$plnftr[serbia_plnftr$plnftr %in% 77:88] <- NA
summary(portugal_plnftr)
##      plnftr      
##  Min.   : 0.000  
##  1st Qu.: 3.000  
##  Median : 5.000  
##  Mean   : 5.418  
##  3rd Qu.: 8.000  
##  Max.   :10.000  
##  NA's   :14644
summary(serbia_plnftr)
##      plnftr      
##  Min.   : 0.000  
##  1st Qu.: 0.000  
##  Median : 4.000  
##  Mean   : 4.143  
##  3rd Qu.: 8.000  
##  Max.   :10.000  
##  NA's   :1526

Interpretation: There are a few takeaways when comparing data on the variable plnftr for Portugal and Serbia. The first is looking at plnftr’s information on the ESS website, individuals can choose from 0 to 10 to express if they plan for their futures or just take each day as it comes; 0 as in ‘I plan for my future as much as possible’ and 10 as in ‘I just take each day as it comes.’ This indicates that Portugal’s mean of 5.418 represents that their population is, on average, more likely to take each day as it comes compared to Serbia’s population whose mean is 4.143. Moreover, many Serbians answered “I plan for my future” because Serbia’s 1st quantile starts at 0, whereas Portugal’s first quantile is at 3. Although the 3rd quantile of both countries is the same at 8.000 and both countries’ means are greater than their medians, Serbia’s distribution is not exactly right-skewed because the 3rd quantile would be lower (the upper quantile/tail) given 0 was the first quantile’s value.

Task 4

Provide code and answer.

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

Info on variable here: https://ess.sikt.no/en/variable/query/stfdem/page/1

italy_data <- read.fst("italy_data.fst")
table(italy_data$gndr)
## 
##    1    2    9 
## 4836 5329   13
italy_data$gndr[italy_data$gndr %in% 9] <- NA
table(italy_data$stfdem)
## 
##    0    1    2    3    4    5    6    7    8    9   10   77   88   99 
##  712  365  733  962 1221 1785 1724 1300  733  138  102   57  344    2
italy_data$stfdem[italy_data$stfdem %in% 77:99] <- NA
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(stfdem))
table(italy_data$gndr)
## 
## Female   Male 
##   5084   4679
table(italy_data$stfdem)
## 
##    0    1    2    3    4    5    6    7    8    9   10 
##  710  365  731  958 1220 1785 1722 1299  733  138  102
italy_data %>%
  group_by(gndr) %>%
  summarize(meanstfdem = mean(stfdem, na.rm = TRUE))
## # A tibble: 2 × 2
##   gndr   meanstfdem
##   <chr>       <dbl>
## 1 Female       4.66
## 2 Male         4.78

Therefore, on average, women are more dissatisfied with democracy in Italy because the output of the female’s mean is 4.657553, which is slightly lower than the male’s mean of 4.782646.

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.

france_data <- ess %>% 
  filter(cntry == "FR")

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()`).

Therefore, according to ESS data, the median French person is more satisfied with the health services because the average of stfhlth (health services), which represents the middle line inside the box, is sitting greater than 6.25, indicating it is greater than stfedu’s (education system) median of 5.0.