ANALÝZA KVALITY SPÁNKU

Author

Júlia Ondrušová

1 Úvod

Rozhodla som sa spracovať Súbor údajov o účinnosti spánku.

Tento dataset obsahuje informácie o skupine respondentov a ich spánkových návykoch. Celkovo bolo sledovaných 452 osôb, čo tvorí relatívne veľký súbor dát, a teda môžeme povedať, že výsledky skúmania budú pomerne objektívne a všeobecné. Každá sledovaná osoba je identifikovaná jedinečným ID a zaznamenáva sa aj jej vek a pohlavie. Informácie sú rozdelené do nasledujúcich stĺpcov:

Názov stĺpca Popis
ID jedinečný identifikátor pre každý testovaný subjekt
Age vek testovanej osoby
Gender pohlavie (muž alebo žena)
BedTime čas, kedy testovaná osoba každú noc ide spať
Wakeup time čas, kedy sa testovaná osoba každé ráno zobudí
Sleep duration celkový čas, počas ktorého testovaný subjekt spal (v hodinách)
Sleep efficiency miera podielu času stráveného v posteli ku času spánku
REM sleep percentage percento celkového času spánku stráveného v REM fáze
Deep sleep percentage percento celkového času spánku stráveného v hlbokom spánku
Light sleep percentage percento celkového času spánku stráveného v ľahkom spánku
Awakenings koľkokrát sa testovaná osoba prebudí počas noci
Caffeine consumption množstvo kofeínu spotrebovaného za 24 hodín pred spaním (v mg)
Alcohol consumption množstvo alkoholu skonzumovaného za 24 hodín pred spaním (v unciách)
Smoking status či testovaná osoba fajčí alebo nie
Exercise frequency koľkokrát testovaná osoba cvičí každý týždeň

Cieľom nášho skúmania je zistiť, ktoré sledované údaje či už negatívne alebo pozitívne ovplyvňujú kvalitu spánku. Konkrétne, medzi sledovanými údajmi sa nachádzajú informácie o množstve užitého kofeínu a alkoholu či o tom, ako často respondent vykonáva nejakú fyzickú aktivitu. Spolu s týmito údajmi budeme sledovať aj dĺžku istých fáz spánku, a zároveň jej koreláciu so životným štýlom.


2 Zobrazenie datesetu do tabuľky

Najprv dáta načítame do interaktívnej tabuľky, pomocou ktorej sa dokážeme s dátami jednoducho zoznámiť, a teda neskôr ľahšie analyzovať. Vďaka vlastnostiam danej tabuľky vieme filtrovať zobrazenie len tých informácií, ktoré sú pre nás či už podstatné alebo jednoducho zaujímavé.

Ukážka kódu
library(readxl)
library (DT)

dat <- read_xlsx("C:/Users/julka/Desktop/Sleep_Efficiency.xlsx")

datatable(dat, options= list(pageLength=10), caption="Súbor údajov o účinnosti spánku")


3 Pohlavie a vekové rozloženie respondentov

Medzi základne informácie o respondentoch patrí pohlavie a vek. V nasledujúcich grafoch sa pozrieme na pomer zastúpenia pohlaví a následne zobrazíme vekové rozloženie práve v závislosti od pohlavia.

Ukážka kódu
pocty_hodnot <- table(dat[[3]])

library(ggplot2)
library(gridExtra)


ggplot(data.frame(pocty_hodnot), aes(x = "", y = Freq, fill = names(pocty_hodnot))) +
  geom_bar(stat = "identity", alpha=0.6) +
  coord_polar(theta = "y") +
  ggtitle("Pohlavie") +
  labs(fill = "Hodnoty", xlab=FALSE, ylab=FALSE) +
  scale_fill_manual(values=c("#f352af", "#5255f3"))

Výskumu sa zúčastnil takmer rovnaký počet žien a mužov. V nasledujúcej analýze údajov nebudeme sledovať, či výsledky závisia od pohlavia respondenta alebo nie.


Ukážka kódu
library(ggplot2)

ggplot(dat, aes(x=Age, fill=Gender)) +
    geom_histogram( color="#e9ecef", alpha=0.6, position = 'identity') +
    labs(title = "Histogram veku respondetov", x = "Vek", y = "Počet") +
    scale_fill_manual(values=c("#eb5b5b", "#5271f3")) 

Z vyššie uvedeného histogramu vidíme, že výskumu sa zúčastnilo najmenej respondetov od 0 do približne 18 rokov a nad 60 rokov. Naopak najviac je žien v strednom veku (25-40 rokov) a mužov v preddôchodkovom veku (50-60 rokov). Tieto pozorovania si overíme výpočtom priemeru a mediánu.


  • Vzorec na priemerný vek je: \[ x_p= \frac{1}{n} \cdot\ \sum_{i=1}^n x_i \] kde xp je výsledný priemer, n počet prvkov a xi jednotlivé prvky

  • Postup na výpočet mediánu závisí od toho, či máme párny alebo nepárny počet hodnôt:

    1. Nepárny počet hodnôt:
      • Usporiadajte dáta od najmenšej po najväčšiu hodnotu.
      • Medián je hodnota v strede usporiadaných dát.
    2. Párny počet hodnôt:
      • Usporiadajte dáta od najmenšej po najväčšiu hodnotu.
      • Mediánom sú dve hodnoty v strede usporiadaných dát, ktoré sa získajú priemerom dvoch stredných hodnôt.


Ukážka kódu
data_muzi<- dat[-which(dat$Gender == "Female"), ]
data_zeny<- dat[-which(dat$Gender == "Male"), ]

# Výpočet hodnôt a uloženie do premennej
vysledky_priemer <- round(c( mean(data_zeny$Age), mean(data_muzi$Age)),0)
vysledky_median <- c( median(data_zeny$Age), median(data_muzi$Age))
nazvy <- c("Ženy", "Muži")

# Generovanie tabuľky pomocou kable()
tabulka <- data.frame(Pohlavie = nazvy, Priemer = vysledky_priemer, Medián = vysledky_median)

# Výpis tabuľky v kóde R
knitr::kable(tabulka)
Pohlavie Priemer Medián
Ženy 37 36
Muži 43 47

Po overení pozorovaní výpočtom sme naozaj zistili, že tohto výskumu sa zúčastnilo navjviac žien v strednom veku a mužov v preddôchodkom veku.


4 Grafické znázornenia datasetu

4.1 Čas zaspania a vstávania

Ukážka kódu
library(lubridate)
library(ggplot2)

# konvertovanie dátumu a času
dat[[4]] <- ymd_hms(dat[[4]])

# vytvorenie grafu pomocou ggplot2
ggplot(dat, aes(x = format(dat[[4]], "%H:%M"))) + 
  labs(title = "Čas, kedy idú respondenti spať", x = "Čas", y = "Počet") +
  geom_bar(fill="#52f3c5", color="#e9ecef", alpha=0.7)

V predchádzajúcom grafe môžeme vidieť, že pri zaspávaní značne prevláda čas 00:00. Po polnoci je rozloženie už veľmi podobné a nevidíme tam žiadne výrazné výchylky.


Ukážka kódu
library(lubridate)
library(ggplot2)

# konvertovanie dátumu a času
dat[[5]] <- ymd_hms(dat[[5]])

# vytvorenie grafu pomocou ggplot2
ggplot(dat, aes(x = format(dat[[5]], "%H:%M"))) + 
  labs(title = "Čas, kedy respondenti vstávaju", x = "Čas", y = "Počet") +
  geom_bar(fill="#bb52f3", color="#e9ecef", alpha=0.7)

Respondenti najčastejšie stávajú o 5:00, 7:00 alebo o 9:00 hodine.



Tieto zistené informácie ideme bližšie analyzovať. Zaujíma nás o aké vekové kategórie sa jedná. Myslíme si, že neskoro večer idú spať predovšetkým študenti, teda veková kategória 20-25 rokov. Skoro ráno budú vstávať ľudia do práce, teda respondenti v produktívnom veku. V najbližších výpočtoch ideme zisťovať, či sú naše predikcie správne alebo nie.


Ukážka kódu
library(stringr)

# vytvorenie vektoru obsahujúceho indexy riadkov, kde sa nachádza čas 00:00:00 UTC

indexy <- str_detect(dat$Bedtime, "00:00:00")

# filtrovanie dát podľa indexov
data_filtrovanie <- dat[indexy, ]

# Výpočet hodnôt a uloženie do premennej
vysledky_priemer <- median(data_filtrovanie$Age)
vysledky_median <- round(mean(data_filtrovanie$Age),0)

# Generovanie tabuľky pomocou kable()
tabulka <- data.frame(Priemer = vysledky_priemer, Medián = vysledky_median)

# Výpis tabuľky v kóde R
knitr::kable(tabulka, caption = "Respondenti, ktorí idú spať o 0:00")
Respondenti, ktorí idú spať o 0:00
Priemer Medián
30 37
  • Vidíme, že medzi priemerom a medianom je rozdiel až 6 rokov, a teda z toho vyplýva, že sa v súbore nachádza len málo respondentov s vyšším vekom, ktorý idú spať o 00:00. Očakávali sme, že výsledný vek bude nižší, no výpočty ukázali inak.


Ukážka kódu
library(stringr)

# vytvorenie vektoru obsahujúceho indexy riadkov, kde sa nachádza čas 05:00:00 UTC

indexy <- str_detect(dat$`Wakeup time`, "05:00:00")

# filtrovanie dát podľa indexov
data_filtrovanie <- dat[indexy, ]

# Výpočet hodnôt a uloženie do premennej
vysledky_priemer <- median(data_filtrovanie$Age)
vysledky_median <- round(mean(data_filtrovanie$Age),0)

# Generovanie tabuľky pomocou kable()
tabulka <- data.frame(Priemer = vysledky_priemer, Medián = vysledky_median)

# Výpis tabuľky v kóde R
knitr::kable(tabulka, caption = "Respondenti, ktorí vstávajú o 5:00")
Respondenti, ktorí vstávajú o 5:00
Priemer Medián
43 41
  • V tomto prípade sa priemer od medianu líši o niečo menej. To znamená, že v súbore sú dáta približne rovnomerne rozložené. Výsledok výpočtov naozaj ukázal, že v tejto situácii sa jedná o ľudí v produktívnom veku.


4.2 Dĺžka spánku

Ukážka kódu
library(ggplot2)

ggplot(dat, aes(x=`Sleep duration` )) +
    
    geom_bar( color="#e9ecef", alpha=0.6, fill="#f35277") +
    labs(title = "Histogram času spánku", x = "Čas (v hodinách)", y ="Počet") 

Najviac ľudí spí 7 hodín, no tento čas sa už ráta ako hraničné minumum. Dostatok spánku, čo je viac ako 8 hodín, má percentuálne menej respondentov.

My sa budeme zaujímať respodentami, ktorí spia menej ako 7 hodín a pomocou nám dostupným dát, hľadať možné príčiny tejto čiastočnej spánkovej deprivácie.


5 Analýza čiastočnej spánkovej deprivácie

5.1 Súvislosti s typom životného štýlu

Vďaka pestrým informáciam, ktoré sa nachádzajú v nami sledovanom súbore dát, vieme hľadať možné príčiny či súvislosti s nedostatočnou dĺžkou spánku. Do nasledujúcich grafov si teda zobrazíme dáta, ktoré by mohli súvisieť s nedostatkom spánku.

Ukážka kódu
library(gridExtra)
library(ggplot2)

riadky<- dat[[6]]<7

data_filtrovanie <- dat[riadky, ]

pocty_hodnot <- table(data_filtrovanie[[14]])


# graf 1
gg1 <- ggplot(data.frame(pocty_hodnot), aes(x = "", y = Freq, fill = names(pocty_hodnot))) +
  geom_bar(stat = "identity", alpha=0.6) +
  coord_polar(theta = "y") +
  ggtitle("Status fajčiara") +
  labs(fill = "Hodnoty") +
  scale_fill_manual(values=c("#f35952", "#52f359"))

# graf 2
gg2 <- ggplot(data_filtrovanie, aes(x=data_filtrovanie[[12]])) +
  geom_bar(color="#e9ecef", alpha=0.6, fill="#f3af52") +
  labs(title = "Histogram množstva kofeínu", x = "Množstvo (v mg)", y ="Počet")

# graf 3
gg3 <- ggplot(data_filtrovanie, aes(x=data_filtrovanie[[13]])) +
  geom_bar(color="#e9ecef", alpha=0.6, fill="#f352db") +
  labs(title = "Histogram množstva alkoholu", x = "Množstvo (v oz)", y ="Počet")

# graf 4
gg4 <- ggplot(data_filtrovanie, aes(x=data_filtrovanie[[11]])) +
  geom_bar(color="#e9ecef", alpha=0.6, fill="#52acf3") +
  labs(title = "Histogram počtu zobudení", x = "Počet zobudení", y ="Počet")

# usporiadanie grafov do 2 riadkov a 2 stlpcov
grid.arrange(gg1, gg2, gg3, gg4, ncol=2, nrow=2)


Také isté grafy vykreslíme aj pre respondentov s dostatkom spánku, t. j. pre tých, ktorí spia dlhšie ako 7 hodín.

Ukážka kódu
library(gridExtra)
library(ggplot2)

riadky1<- dat[[6]]>7

data_filtrovanie1 <- dat[riadky1, ]

pocty_hodnot1 <- table(data_filtrovanie1[[14]])


# graf 1
gg1 <- ggplot(data.frame(pocty_hodnot1), aes(x = "", y = Freq, fill = names(pocty_hodnot1))) +
  geom_bar(stat = "identity", alpha=0.6) +
  coord_polar(theta = "y") +
  ggtitle("Status fajčiara") +
  labs(fill = "Hodnoty") +
  scale_fill_manual(values=c("#f37952", "#7ef352"))

# graf 2
gg2 <- ggplot(data_filtrovanie1, aes(x=data_filtrovanie1[[12]])) +
  geom_bar(color="#e9ecef", alpha=0.6, fill="#5952f3") +
  labs(title = "Histogram množstva kofeínu", x = "Množstvo (v mg)", y ="Počet")

# graf 3
gg3 <- ggplot(data_filtrovanie1, aes(x=data_filtrovanie1[[13]])) +
  geom_bar(color="#e9ecef", alpha=0.6, fill="#52dbf3") +
  labs(title = "Histogram množstva alkoholu", x = "Množstvo (v oz)", y ="Počet")

# graf 4
gg4 <- ggplot(data_filtrovanie1, aes(x=data_filtrovanie1[[11]])) +
  geom_bar(color="#e9ecef", alpha=0.6, fill="#f3e752") +
  labs(title = "Histogram počtu zobudení", x = "Počet zobudení", y ="Počet")

# usporiadanie grafov do 2 riadkov a 2 stlpcov
grid.arrange(gg1, gg2, gg3, gg4, ncol=2, nrow=2)


Teraz vieme jednoducho porovnať, či dané dáta korelujú s dĺžkou spánku. Dokážeme spozorovať nasledujúce informácie:

  • Takmer polovica respondentov s nedostatkom spánku označila hodnotu “Som fajčiar”. V druhej skupine grafov je takýchto ľudí percentuálne o dosť menej. Vo viacerých štúdiach a vedeckých článkoch bolo dokázané, že nikotín negatívne ovplyvňuje kvalitu spánku. Presnejšie vplýva na celkovú dĺžku spánku a taktiež skracuje dĺžku trvania hlbokej fázy.

  • Množstvo kofeínu je v oboch prípadoch približne rovnako zastúpene. Avšak vieme si všimnúť, že ľudí s nulovou konzumáciou kofeínu je percentuálne viacej v skupine respondentov s dostatkom spánku.

  • V prvej skupine grafov nie je veľké zastúpenie kategórie ľudí, ktorí sa cez noc ani raz nezobudili. V druhej skupine grafov je toto zastúpenie vyššie.

  • Užite alkoholu v danej situácii výrazne nekoreluje.


5.2 Analýza dĺžky fázy hlbokého spánku

Podľa doteraz už vykonaných výskumov a štúdií vieme, že nikotín skracuje dĺžku trvania hlbokej fázy spánku. V tejto kapitole ideme analyzovať, či platia tieto informácie aj v našom súbore dát.

Ukážka kódu
library(ggplot2)
library(gridExtra)

riadky<- dat[[14]]=="Yes"
data_filtrovanie <- dat[riadky, ]

graf1<-ggplot(data_filtrovanie, aes(x=data_filtrovanie[[9]])) +
    geom_bar(color="#e9ecef", alpha=0.6, fill="#b152f3") +
    labs(title = "Fajčiari", x = "Počet percent", y = "Počet") 


riadky1<- dat[[14]]=="No"
data_filtrovanie1 <- dat[riadky1, ]

graf2<-ggplot(data_filtrovanie1, aes(x=data_filtrovanie1[[9]])) +
    geom_bar(color="#e9ecef", alpha=0.6, fill="#89f352") +
    labs(title = "Nefajčiari", x = "Počet percent", y = "Počet") 

grid.arrange(graf1, graf2, ncol=2)

Na prvý pohľad vidíme istú koreláciu dĺžky hlbokého spánku závisi od užívanie nikotínu, no pozorovanie ideme overiť výpočtom priemeru tejto hodnoty pre oba prípady.


Ukážka kódu
# Výpočet hodnôt a uloženie do premennej
fajciari <- round(mean(data_filtrovanie[[9]]),2)
nefajciari <- round(mean(data_filtrovanie1[[9]]),2)

# Generovanie tabuľky pomocou kable()
tabulka <- data.frame(Fajčiari = fajciari, Nefajčiari = nefajciari)

# Výpis tabuľky v kóde R
knitr::kable(tabulka, caption="Vplyv užívania nikotínu na priemerné percento dĺžky hlbokého spánku")
Vplyv užívania nikotínu na priemerné percento dĺžky hlbokého spánku
Fajčiari Nefajčiari
47.89 55.37

Naozaj vidíme, že fajčenie negatívne oplyvňuje dĺžku hlbokého spánku, a teda môžeme potvrdiť pravdivosť doterajších výskumov.


5.3 Vplyv fyzickej aktivity

Cvičenie prispieva k pokojnému a zdravému spánku. Fyzická aktivita predlžuje čas strávený v hlbokom spánku a ten je kľúčový pre regeneráciu tela. Hlboký spánok pomáha posilňovať imunitu, podporuje zdravie srdca a reguluje stres a úzkosť (Mathhew Walker, Phd. 2017).

Ideme skúmať, či respodenti s krátkou hlbokou fázou spánku naozaj vykonávajú menej fyzickej aktivity, ako tí, čo majú spánok kvalitný. Vo všeobecnosti by mal hlboký spánok tvoriť aspoň 30 % celkového času spánku, práve preto rozdelíme respodentov do dvoch skupín: tí čo majú hlboký spánok percentuálne kratší a tí, čo ho majú dlhší.

Ukážka kódu
library(ggplot2)
library(gridExtra)

riadky<- dat[[9]]<30
data_filtrovanie <- dat[riadky, ]

graf3<-ggplot(data_filtrovanie, aes(x=data_filtrovanie[[15]])) +
    geom_bar(color="#e9ecef", alpha=0.6, fill="#f3527e") +
    labs(title = "Hlboký spánok pod 30%", x = "Počet cvičení do týždňa", y = "Počet") 


riadky1<- dat[[9]]>30
data_filtrovanie1 <- dat[riadky1, ]

graf4<-ggplot(data_filtrovanie1, aes(x=data_filtrovanie1[[15]])) +
    geom_bar(color="#e9ecef", alpha=0.6, fill="#52dbf3") +
    labs(title = "Hlboký spánok nad 30%", x = "Počet cvičení do týždňa", y = "Počet") 

grid.arrange(graf3, graf4, ncol=2)

Vidíme, že fyzická aktivita naozaj vplýva na kvalitu spánku. Po porovnaní grafov vieme jednoducho usúdiť, že ľudi, ktorí cvičia častejšie majú hlboký spánok dlhší, ako tí čo cvičia menej alebo necvičia vôbec.


6 Záver

Vďaka predchádzajúcim grafom a výpočtom sme zistili, že čiastočná spánkova deprivácia koreluje so životným štýlom, ktorý vedú jednotliví respodenti. Vo výskume mali výsledky lepšie tí ľudia, ktorí nefajčili, neužívali kofeín či vykonávali pravidelne fyzickú aktivitu. Menej často sa cez noc budili a mali výrazne dlhší spánok. Môžeme povedať, že náš cieľ bol splnený. Naozaj sme zistili čo a ako vplýva na kvalitu spánku.

References

Mathhew Walker, Phd. 2017. Why We Sleep. Scribner.