First I am going to load my packages

packages <- c("tidyverse", "fst", "modelsummary")

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"

Then load my ess dataset

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.

1. Filter for “NO”

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

2. Rename it to variable “y” = outcome

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

3. From looking at the table, I have to recode “77” and “88” because they would mess up the mean as “NA” values

norway_happy$y[norway_happy$y %in% 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

4. Finally, the mean for Norway is…

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

5. Labeling and filtering for “BE”

belgium_happy <- ess |> 
  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

6. Cleaning Belgium dataset

belgium_happy$y[belgium_happy$y %in% 77:99] <- NA

7. Mean of Belgium…

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

Conclusion

Based on the ESS data, Norway has a higher average level of reported happiness at 7.98 than Belgium at 7.74.

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.

1. Naming the variable and filtering for “IE”

binge_drinking_irish <- ess |>
  filter(cntry == "IE") |>
  select(alcbnge)

binge_drinking_irish$y <- binge_drinking_irish$alcbnge

table(binge_drinking_irish$y)
## 
##   1   2   3   4   5   6   7   8 
##  65 650 346 417 239 641  26   6

2. Getting rid of “NA” values

binge_drinking_irish$y[binge_drinking_irish$y %in% 6:8] <- NA

table(binge_drinking_irish$y)
## 
##   1   2   3   4   5 
##  65 650 346 417 239

3. Recoding the numeric values to be categories

bd <- binge_drinking_irish |>
  mutate(
    y_category = case_when(
      y == 1 ~ "Daily or almost daily",
      y == 2 ~ "Weekly",
      y == 3 ~ "Monthly",
      y == 4 ~ "Less than monthly",
      y == 5 ~ "Never",
      TRUE ~ NA_character_
    ),
    y_category = fct_relevel(factor(y_category),
                             "Daily or almost daily", 
                             "Weekly", 
                             "Monthly", 
                             "Less than monthly", 
                             "Never")
  )

table(bd$y_category)
## 
## Daily or almost daily                Weekly               Monthly 
##                    65                   650                   346 
##     Less than monthly                 Never 
##                   417                   239

4. Mode for frequency of Irish binge drinking…

get_mode <- function(v) {
  tbl <- table(v)
  mode_vals <- as.character(names(tbl)[tbl == max(tbl)])
  return(mode_vals)
}

mode_values <- get_mode(bd$y_category)
cat("Mode of y category:", paste(mode_values, collapse = ","), "\n")
## Mode of y category: Weekly

Conclusion

The most common category of the frequency of binge drinking of Irish respondents is “Weekly.”

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

1. Naming the variable and filtering for “PT”

portugal_planning <- ess |>
  filter(cntry == "PT") |>
  select(plnftr)

2. Cleaning dataset

portugal_planning$plnftr[portugal_planning$plnftr %in% 77:99] <- NA
table(portugal_planning$plnftr)
## 
##   0   1   2   3   4   5   6   7   8   9  10 
## 114 184 313 356 264 481 262 382 345 166 370

3. Summarizing Portugal Data

summary(portugal_planning$plnftr)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   0.000   3.000   5.000   5.418   8.000  10.000   14644

Serbia

1. Naming the variable and filtering for “RS”

serbia_planning <- ess |>
  filter(cntry == "RS") |>
  select(plnftr)

2. Cleaning dataset

serbia_planning$plnftr[serbia_planning$plnftr %in% 77:99] <- NA
table(serbia_planning$plnftr)
## 
##   0   1   2   3   4   5   6   7   8   9  10 
## 587 133 152 138  95 246  70  87 103  47 364

3. Summarizing Serbia Data

summary(serbia_planning$plnftr)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   0.000   0.000   4.000   4.143   8.000  10.000    1526

Conclusion

For Serbia and Portugal, the means, medians and quartiles are different, while the minimum and maximum values are the same. The variable ‘plnftr’ is rated on a scale of 0-10, with 0 being “planning for the future as much as possible” and 10 being “taking each day as it comes,” therefore, because both countries are being compared on the same variable, the minimum and maximum values should not change.

On average, Serbians plan their future slightly more than people in Portugal because the difference between their means is 1.275, so ~1, with Serbia at 4.143 and Portugal at 5.418. The same is also true for the median scores, with Portugal at 5 and Serbia at 4. Serbia also has a higher IQR at 8 than Portugal at 5 because the first quartile of Serbia is 0 versus Portugal’s at 3, meaning that Serbia has higher variation in the distribution of scores than Portugal. Finally, Serbia has less NA values than Portugal, which may have contributed to a higher IQR.

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.

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

1. First naming the variable and filtering for “IT”

italy_data <- ess |>
  filter(cntry == "IT")

2. Converting gender and satisfaction with democracy (stfdm) and cleaning data

italy_data <- italy_data |>
  mutate(
    gndr = case_when(
      gndr == 1 ~ "Male",
      gndr == 2 ~ "Female",
      gndr == 9 ~ NA,
      TRUE ~ as.character(gndr)
    ),
    stfdem = ifelse(stfdem %in% c(77, 88), NA, stfdem)
  )

3. Computing average of stfdem by gender

means_by_gender <- italy_data |>
  drop_na(gndr) |>
  group_by(gndr) |>
  summarize(stfdem = mean(stfdem, na.rm = TRUE))

print(means_by_gender)
## # A tibble: 2 × 2
##   gndr   stfdem
##   <chr>   <dbl>
## 1 Female   4.69
## 2 Male     4.78

Conclusion

The variable ‘satisfaction with democracy’ is rated on a scale from 0-10, with 0 being “extremely dissatisfied” and 10 being “extremely satisfied.” Women in Italy, on average, are slightly more dissatisfied with democracy than men, as their mean score of satisfaction is 4.69, which is 0.09 less than the male average score at 4.78

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.

Interpreting the boxplot graph

From the boxplot, the median French person is more satisfied with health services because the placement of the median line is in a higher position than the ‘stfedu’ median. For ‘stfhlth’ the middle 50% of French people scored ~7 on a scale of 0-10 for satisfaction with 0 being “extremely bad” and 10 being “extremely good.” For ‘stfedu,’ however, the middle 50% of French people scored 5, thus showing numerically and visually that the satisfaction with health services is higher.

1. Naming the variable and filtering for “FR”

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

2. Changing the boxplot graph

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