Kashvi Shah | 1009413706
# 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")
unique(ess$cntry)
## [1] "AT" "BE" "CH" "CZ" "DE" "DK" "ES" "FI" "FR" "GB" "GR" "HU" "IE" "IL" "IT"
## [16] "LU" "NL" "NO" "PL" "PT" "SE" "SI" "EE" "IS" "SK" "TR" "UA" "BG" "CY" "RU"
## [31] "HR" "LV" "RO" "LT" "AL" "XK" "ME" "RS" "MK"
Task 1: Question and Answer Question: 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.
norway_happy <- ess %>%
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% 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
norway_happy %>%
summarize(
mean_y = mean(y, na.rm = TRUE),
median_y = median(y, na.rm = TRUE)
) %>%
print()
## mean_y median_y
## 1 7.975005 8
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
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 %>%
summarize(
mean_y = mean(y, na.rm = TRUE),
median_y = median(y, na.rm = TRUE)
) %>%
print()
## mean_y median_y
## 1 7.737334 8
#In comparison to Belgium (7.73), Norway (7.97) reports “0.24” higher levels of happiness on average.
Task 2 Provide code and answer.
Question Prompt and question: what is the most common category selected, for Irish respondents, for frequency of binge drinking? The variable of interest is: alcbnge.
ireland_ccdrinking <- ess %>%
filter(cntry == "IL") %>%
select(alcbnge)
ireland_ccdrinking$y <- ireland_ccdrinking$alcbnge
table(ireland_ccdrinking$y)
##
## 1 2 3 4 5 7 8 9
## 15 153 149 264 362 5 69 1545
ireland_ccdrinking$y[ireland_ccdrinking$y %in% 6:8] <- NA
table(ireland_ccdrinking$y)
##
## 1 2 3 4 5 9
## 15 153 149 264 362 1545
mean_y <- mean(ireland_ccdrinking$y, na.rm = TRUE)
median_y <- median(ireland_ccdrinking$y, na.rm = TRUE)
cat("Mean of 'y':", mean_y, "\n")
## Mean of 'y': 7.049437
cat("Median of 'y':", median_y, "\n")
## Median of 'y': 9
df <- ireland_ccdrinking %>%
mutate(
y_category = case_when(
y == 1 ~ "Don't Binge Drink",
y == 2 ~ "Rarely Binge Drink",
y == 3 ~ "Somewhat Binge Drink",
y == 4 ~ "Frequently Binge Drink",
y == 5 ~ "Extreme Binge Drink ",
TRUE ~ NA_character_ ),
y_category = fct_relevel(factor(y_category),
"Don't Binge Drink",
"Rarely Binge Drink",
"Somewhat Binge Drink",
"Frequently Binge Drink",
"Extreme Binge Drink")
)
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `y_category = fct_relevel(...)`.
## Caused by warning:
## ! 1 unknown level in `f`: Extreme Binge Drink
table(df$y_category)
##
## Don't Binge Drink Rarely Binge Drink Somewhat Binge Drink
## 15 153 149
## Frequently Binge Drink Extreme Binge Drink
## 264 362
get_mode <- function(v) {
tbl <- table(v)
mode_vals <- as.character(names(tbl)[tbl == max(tbl)])
return(mode_vals)
}
mode_values <- get_mode(df$y_category)
cat("Mode of y category:", paste(mode_values, collapse = ", "), "\n")
## Mode of y category: Extreme Binge Drink
#“Extreme Binge Drink” is the most frequently chosen category for Irish respondents who binge drink.
Task 3 Question 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.
result <- ess %>%
filter(cntry %in% c("PT", "SE")) %>%
mutate(plnftr = recode(plnftr, `77` = NA_real_, `88` = NA_real_, `99` = NA_real_)) %>%
group_by(cntry) %>%
summarize(mean_plnftr = mean(plnftr, na.rm = TRUE))
print(result)
## # A tibble: 2 × 2
## cntry mean_plnftr
## <chr> <dbl>
## 1 PT 5.42
## 2 SE 5.02
#There is a similar divide in Portugal and Serbia between those who plan for the future and those who live day by day. The average for both nations is in the range of 5. But Portugal usually takes each day more seriously than Serbia, coming in at 5.41 to 5.01.
Task 4 Question 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.
italy_data <- ess %>%
filter(cntry == "IT")
# Convert gender and lrscale (representing pol ID self-placement from left to right)
italy_data <- italy_data %>%
mutate(
gndr = case_when(
gndr == 1 ~ "Male",
gndr == 2 ~ "Female",
TRUE ~ as.character(gndr)
),
lrscale = ifelse(lrscale %in% c(77, 88), NA, lrscale) # Convert lrscale values
)
mean_male_lrscale <- italy_data %>%
filter(gndr == "Male") %>%
summarize(mean_lrscale_men = mean(lrscale, na.rm = TRUE))
print(mean_male_lrscale)
## mean_lrscale_men
## 1 5.202087
mean_female_lrscale <- italy_data %>%
filter(gndr == "Female") %>%
summarize(mean_lrscale_female = mean(lrscale, na.rm = TRUE))
print(mean_female_lrscale)
## mean_lrscale_female
## 1 5.086377
means_by_gender <- italy_data %>%
group_by(gndr) %>%
summarize(lrscale = mean(lrscale, na.rm = TRUE))
print(means_by_gender)
## # A tibble: 3 × 2
## gndr lrscale
## <chr> <dbl>
## 1 9 4.6
## 2 Female 5.09
## 3 Male 5.20
#More men than women are unhappy with Italy’s democracy.The average number of men who are dissatisfied was 5.20 for every ten men, and 5.08 for every ten women, according to the statistics.
Task 5 Question 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).
france_data <- ess %>%
filter(cntry == "FR")
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", title = "Boxplot of satisfaction with the state of education vs. health services") +
theme_minimal()
## Warning: Removed 364 rows containing non-finite values (`stat_boxplot()`).
#The majority of French citizens don’t seem to be particularly happy or unhappy with the educational system. On the whole, French citizens are content with the country’s healthcare system. The Boxplot displays the values of “Stfedu” at 5 and “Stfhlth” at 5 - 7.5, with the line in the box being closer to 7.5 than 5. indicating that within that range, the health services are rated by French people more like a 7.5 than a 5.