library(psych) library(tidyverse) # Načtení dat df <- read_csv2("https://is.muni.cz/el/fss/podzim2024/PSYb2320/um/datasets/personality_all.csv") # Načtení dat i se správnou definíc missing values # Funkce distinct pro sloupec gender # Převod gender na factor # Kombinace grade a class # Výběr položek začínajících na "nfc" # Ověření reliability škál NFC # Použití funkce summary() na dataset # Položky NFC 10 až 16 jsou reverzní # Rekódování hodnot položku po položce # Podíváme se na ně nejprve pomocí funkce select() # Pomocí funkce across() v rámci mutate() # Vektor nfc_reversed s reverzními položkami NFC (10 až 16) # Použití funkce all_of() # A co reverzní položky IPIP? # Jedná se o typo položky nums <- c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 29, 30, 32, 34, 36, 38, 39, 44, 46, 49) nums # Vytvoření vektoru s ipip_reversed s reverzními položkami IPIP # Využití funkce str_c() # a také funkce str_pad() # Kombinace všech reverzních položek do jednoho vektoru reversed_items # Uložení nerekódovaného datasetu do nového objektu not_recoded # Finální rekódování všech položek # Cronbachovo alfa pro škálu NFC str_c("nfc_", str_pad(seq(1, 16), pad = 0, width = 2)) # Co kdybychom si vytvořili vlastní funkci item_range pro vytváření # jmen položek item_range <- function(prefix, suffix) { str_c(prefix, str_pad(suffix, pad = 0, width = 2)) } # Příklad použití této funkce item_range("nfc_", 1:16) # Co kdybychom si vytvořili list "items" s názvy položek jednotlivých škál # NFC: 1 až 16 # Extraversion: 1 6 11 16 21 26 31 36 41 46 # Agreeableness: 2 7 12 17 22 27 32 37 42 47 # Conscientiousness: 3 8 13 18 23 28 33 38 43 48 # Emotional stability: 4 9 14 19 24 29 34 39 44 49 # Intellect: 5 10 15 20 25 30 35 40 45 50 # Odkázat se na jednotlivé prvky listu items jde pomocí $ # Funkce row_mean() pro výpočet celkových skórů jako průměr položek row_mean <- function(..., max.na = 0) { data <- pick(...) n_miss <- data %>% is.na() %>% rowSums() output <- data %>% rowMeans(na.rm = TRUE) output[n_miss > max.na] <- NA_real_ return(output) } df # Upltnění funkce row_mean() pro výpočet celkových skórů # nfc, ext, con # Jejich umístění někde na začátek # Výpočet deskriptivních statistik v závislosti na ročníku a pohlaví # M, SD, skew # A co kvantily s pomocí funkce quantile() # Se summarise() by to šlo, ale máme varování # Lepší je tedy použít reframe() # Pokud se nám výstup nelíbí, můžeme použít navíc pivot_wider() # Co když chceme vypočíst statistiky pro více než jednu proměnnou? # Vybereme s datasetu id, gender, grade, nfc, ext a con # a zkusíme to nejdříve s využitím pivot_longer() # Výsledek si uložíme do nové matice df_longer() # Pak můžeme opět použít group_by() a summarise() # Vypočteme si M, SD, ale i počet chybějících a validních hodnot # Pokud chceme, můžeme také nejprve vyřadit řádky s chybějícími hodnotami # pomocí funkce drop_na() # Šlo by to i pomocí funkce across # Nejprve si vypočteme jenom průměry # Do listu přidáme více funkcí včetně sd() # Musíme použít tzv. lambda funkce, abychom mohli měnit další argumenty, # jako např. na.rm # Ještě si můžeme vytvoři graf s četnostmi pro ročník a pohlaví # Můžeme nejprve vypočíst četnosti pomocí count() # Pak přidáme relativní četnosti # Výsledek pošleme do ggplotu a použijeme funkci geom_col() # Ještě změníme pozici na position = "dodge" # A změníme barvy # třeba #0D92F4 pro kluky a #C62E2E # pomocí scale_fill_manual