# Příprava --------------------------------------------- library(tidyverse) row_na <- function(...) { # Vybrat sloupce, které chceme data <- pick(...) # Vypočíst součet chybějícíh dat (počet NA) pro řádky data %>% is.na() %>% rowSums() } row_mean <- function(..., max_na = 0) { # Vybrat sloupce, které chceme data <- pick(...) # Vypočíst součet chybějícíh dat (počet NA) pro daný řádek n_missing <- data %>% is.na() %>% rowSums() # Vypočíst celkový skór jako průměr položek pro daný řádek out <- data %>% rowMeans(na.rm = TRUE) # Nahradit celkový skór chybějící hodnotou, pokud je n_missing > max_na out[n_missing > max_na] <- NA_real_ # Výstupní hodnota (output funkce) return(out) } ci_mean <- function(x, level = .95, na.rm = TRUE) { if (na.rm == TRUE) { x <- x[!is.na(x)] } n <- length(x) df <- n - 1 s <- sd(x) m <- mean(x) se <- s/sqrt(n) alpha <- 1 - level t <- qt(1 - alpha/2, df = df) me <- t*se ci_lower <- m - me ci_upper <- m + me tibble(m = m, ci_lower = ci_lower, ci_upper = ci_upper, sd = s, se = se, n = n) } quartiles <- function(x, na.rm = TRUE) { tibble( stat = c("Min", "Q1", "Mdn", "Q3", "Max"), value = quantile(x, probs = c(0, .25, .5, .75, 1), na.rm = na.rm) ) %>% pivot_wider(names_from = stat, values_from = value) } # Import dat -------------------------------- # Importujte data "help_seeking_data.dat" # (vytvořte objekt df ) # Importujte codebook "help_seeking_codebook.xlsx" # (vytvořte objekt cb) df <- read_tsv("data/help_seeking_data.dat") cb <- readxl::read_excel("data/help_seeking_codebook.xlsx") cb # Ovetřete v novém okně RStudia metadata # Co asi měří položky dotazníků "atspph" a "ees" # Prozkoumejte df i cb ---------------------------------- # Jaké funkce k tomu můžeme použít str(df) glimpse(df) summary(df) # Doplňte id a přesuňte je na začátek jako první sloupce --------------- df <- df %>% mutate(id = row_number()) %>% relocate(id) # Factors -------------------------------------------------------- # Převeďte např gender a partner na kategorickou proměnnou (factor) df <- df %>% mutate(gender = factor(gender, levels = 1:3, labels = c("Žena", "Muž", "Jiné")), partner = factor(partner, levels = 1:2, labels = c("Ne", "Ano")), college_title = factor(college_title, levels = 1:2, labels = c("Ne", "Ano")), college_student = factor(college_student, levels = 1:2, labels = c("Ne", "Ano")), finantial_situation = factor(finantial_situation, levels = 1:3, labels = c("Špatná", "Přijatelná", "Dobrá"))) # Převedťe věk na kategorickou proměnnou # age_two: 16–29, 30+ # age_multi: 16–19, 20-29, 30-39, 40-49, 50+ # Zkuste to pomocí funkce df <- df %>% mutate(age_two = cut(age, breaks = c(16, 29, 80), include.lowest = TRUE, right = TRUE, labels = c("16–29", "30+")), age_multi = cut(age, breaks = c(16, 20, 30, 40, 50, 60, 80), include.lowest = TRUE, right = FALSE, labels = c("16–19", "20–29", "30–39", "40–49", "50–59", "60+"))) # Četnosti --------------------------------------- # Zkuste četnosti pohlaví zobrazit tabulkou i grafem (sloupcovým) df %>% count(gender) %>% mutate(p = n/sum(n)) df %>% ggplot(aes(gender)) + geom_bar() df %>% count(gender) %>% mutate(p = n/sum(n)) %>% ggplot(aes(gender, p)) + geom_col() + scale_y_continuous(labels = scales::percent, breaks = seq(0, 1, 0.1)) df %>% count(gender) %>% mutate(gender = fct_na_value_to_level(gender, "Neuvedeno"), p = n/sum(n)) %>% ggplot(aes(gender, p)) + geom_col() + scale_y_continuous(labels = scales::percent, breaks = seq(0, 1, 0.1)) # Zkuste četnosti pohlaví zobrazit tabulkou i grafem (sloupcovým) df %>% count(gender, partner) %>% drop_na() %>% group_by(gender) %>% mutate(p = n/sum(n)) df %>% count(gender, partner) %>% drop_na() %>% group_by(gender) %>% mutate(p = n/sum(n)) %>% ggplot(aes(gender, p, fill = partner)) + geom_col() # Vektory s názvy položek -------------------------------------------- # Zkuste vytvořit vektory s názvy položek obou škál # a pak je zkombinovat do jednoho listu help <- str_c("atspph", str_pad(1:10, pad = "0", width = 2)) emo <- str_c("ees", str_pad(1:10, pad = "0", width = 2)) items <- list(help = help, emo = emo) items # Vytvořte vektory s názvy reverzních položek # zvlášť pro obě škály # vektory s názvy reverzních položek rev_help <- cb %>% filter(reversed == TRUE, instrument == "ATSPPH") %>% pull(name) rev_emo <- cb %>% filter(reversed == TRUE, instrument == "EES") %>% pull(name) # Rekódování reverzních položek ---------------------------------------- # Uložte si kopii datasetu df # a poté rekódujte reverzní položky obou škál nonrecoded <- df df <- df %>% mutate(across(all_of(rev_help), ~5-.x), across(all_of(rev_emo), ~7-.x)) # Reliabilita ------------------------------------------------- # Proveďte základní položkovou analýzu pomocí funkce psych::alpha() df %>% select(all_of(items$help)) %>% psych::alpha() df %>% select(all_of(items$emo)) %>% psych::alpha() map(items, ~df %>% select(all_of(.x)) %>% psych::alpha()) # Celkové skóry --------------------------------------------- # Pomocí funkce row_mean() vypočtěte celkové skóry obou škál # Nazvěte nové sloupce help a emo df <- df %>% mutate(help = row_mean(all_of(items$help), max_na = 2), emo = row_mean(all_of(items$emo), max_na = 2)) # Přesuňte nové sloupce někde na začátek, třeba za age df <- df %>% relocate(help, emo, .after = age) # Deskriptivní statistiky ------------------------------- # Vypočtěte průměry a SD pro celkové skóry df %>% select(id, help, emo) %>% pivot_longer(-id, names_to = "variable", values_to = "value") %>% drop_na(value) %>% group_by(variable) %>% summarise(M = mean(value), SD = sd(value)) # Udělejte totéž a rozdělte dataset i podle pohlaví df %>% select(id, gender, help, emo) %>% pivot_longer(c(help, emo), names_to = "variable", values_to = "value") %>% drop_na(gender, value) %>% group_by(gender, variable) %>% summarise(M = mean(value), SD = sd(value)) # Udělejte totéž a rozdělte dataset i podle pohlaví a age_two # Vyberte pouze muže a ženy # Vyzkoušejte použití funkce ci_mean() ci_mean(df$emo) ci_mean(df$emo, level = .99) df %>% select(id, help, emo) %>% pivot_longer(-id, names_to = "variable", values_to = "value") %>% drop_na(value) %>% group_by(variable) %>% summarise(ci_mean(value)) stats <- df %>% select(id, gender, help, emo) %>% pivot_longer(c(help, emo), names_to = "variable", values_to = "value") %>% drop_na(gender, value) %>% group_by(variable, gender) %>% summarise(ci_mean(value)) stats stats %>% filter(gender != "Jiné") %>% ggplot(aes(gender, m)) + geom_pointrange(aes(ymin = ci_lower, ymax = ci_upper)) + facet_wrap(~variable, scales = "free_y")