Mental ill-health is a rising problem, specifically among university students. It has been shown that quality sleep and good sleep hygiene practices can act as protective factors against mental ill-health, while poor sleep quality and poor sleep hygiene practices can act as risk factors for mental ill-health. However, there is not much established research on the relationship between the variables, especially utilizing objective, non-self-report measures of sleep quality. This study aims to explore that relationship in a sample of college students at a public education institution in New York enrolled in high-stress research programs. The primary research question this study aims to address is: What is the relationship between frequency of sleep hygiene behaviors and MUSE-S sleep score? Participants completed a pre-assessment survey, using a 12-item version of the 19-item Sleep Hygiene Questionnaire (Gellis & Lichstein, 2009). They then wore a MUSE-S sleep headband for 7 nights, using a daily survey to self-report their sleep score as a measure of sleep quality. They then completed the post-assessment to examine self-reported sleep hygiene over the participation period. Across six correlations, associations between sleep hygiene behaviors and sleep quality were weak (r = –.39 to .04) and nonsignificant (p = .054 to .997, contrasting the theory driving the study. The small sample size of this study and the limited scope of students in a specific program at a specific university limit the generalizability of these results and indicate areas for improvement in future studies that may lead to different results.
Keywords
sleep hygiene, MUSE headband, sleep score, college students, lifestyle mental health
1 Introduction
In recent years, rates of psychopathology have been rising among university students, with an average of 33.6% and 39.0% of students experiencing depressive and anxious symptoms, respectively (Li et al., 2022), including a notable rise in mental distress, which stands as one of the most pressing health challenges of the 21st century in the U.S. among both youth and adults (Choudhry et al., 2016). Mental distress also leads to a wide range of harm for both individuals who are suffering and to the community at large, including emotional harm as well as somatic symptoms such as insomnia, headaches, and lack of energy (Belay et al., 2021).
Adequate sleep has been linked to greater emotional regulation, cognitive performance, and life satisfaction (Palmer & Alfano, 2017), highlighting the importance of sleep in our everyday lives, especially concerning mental health. Additionally, prior research has shown that higher levels of quality sleep are associated with improvements in emotional well-being among young adults (Bodziony & Stetson, 2024). However, much of the existing literature relies primarily on self-reported measures, which may be limited by recall bias and subjective reporting, highlighting the need for novel research to incorporate objective biological measures to more accurately capture sleep behaviors and their influence on mental health outcomes. Further research also must consider specific social locations, such as minoritized status and socioeconomic status, among others, that may cause certain groups and individuals to be more at risk for experiencing mental distress and mental ill-health (CDC, 2025). Early health behaviors often have an impact on long-term outcomes, so it is crucial to encourage consistent sleep during adolescence and young adulthood to lead to improvements in long-term mental health outcomes.
1.1Knowns and Unknowns
Due to the pervasiveness of mental distress — a subjective sense of discomfort, mental anguish, perceived lack of control, anxiety, or stress (CDC, 2025) — it is essential to address health behaviors such as sleep not only to reduce symptoms of distress but also to actively support well-being — defined as positive mood, life satisfaction, engagement, and meaning (Seligman, 2002). Research has shown that sleep quality and duration are significant predictors of mental health outcomes, and poor sleep hygiene is associated with increased mental distress (Dinis, 2018). Therefore, high-quality sleep may serve as a protective factor for college students with low mental well-being, while poor-quality sleep would serve as a risk factor. An ecological model is essential for understanding healthy adolescent development, as it emphasizes the importance of considering cultural and environmental contexts and recognizes that healthy development is shaped by a dynamic interaction of risk and protective factors (Kia-Keating et al., 2011).
While we know the importance of both sleep quality and sleep hygiene as risk and protective factors for mental health outcomes, we do not know how these two separate assessments of sleep relate. The relationship between sleep hygiene behaviors and sleep quality continues to be an area of significant inquiry within sleep research. Studies have found that the frequency of engaging in healthy sleep hygiene behaviors also leads to increases in indicators of quality sleep, such as scores of 5 or higher on the Pittsburgh Sleep Quality Index (PSQI) (Tsai et al., 2016). Further, a positive relationship has been established between frequency of poor sleep hygiene practices and frequency of insomnia symptoms (Lukowski and Tsukerman, 2021), indicating an association between sleep quality and sleep hygiene behaviors. However, there is a lack of research connecting sleep hygiene behaviors to the MUSE-S sleep score as an objective measure of sleep quality, specifically.
1.2Research Aims
The primary gap is a methodological gap due to the limited number of studies examining the biological data of participants’ sleep throughout the night. Though self-reported data is a relatively effective way of assessing quality of sleep, it can be subjective, whereas physiological data captured through the MUSE-S headband, such as brainwaves and sleep score, provide objective indicators aligned with different units of analysis, as emphasized by the National Institute of Mental Health’s (NIMH) Research Domain Criteria (RDoC) framework (Michelini et. al., 2021). Additionally, there is a lack of existing research regarding sleep hygiene behaviors, specifically, and their relationship to sleep quality, especially objective measures of sleep quality. Thus, this study takes an exploratory approach, aiming to: 1) utilize objective measures of sleep quality, 2) examine sleep hygiene behaviors of participants, and 3) assess the associations between objective sleep quality measures and self-reported sleep hygiene behaviors, with the hypothesis that as the frequency of poor sleep hygiene behaviors increases, the MUSE-S sleep score will decrease. The primary research question this study aims to address is: What is the relationship between frequency of sleep hygiene behaviors and MUSE-S sleep score?
2 Methods
2.1Participants and Sampling
The study was approved by the Institutional Review Board of a public higher education institution in New York. Research was conducted ethically to protect the rights, welfare, confidentiality, and privacy of participants. Also, participants were informed of the project and provided their consent before beginning the survey. Participants were eligible to participate if they were at least 18 years of age and were students at Binghamton University participating in a high-stress academic program, such as the First-Year Research Immersion (FRI) program or the Summer Research Immersion (SRI) program. Individuals were recruited either in person or virtually; they were shown either an informational presentation or an informational video, respectively, explaining the study and its purposes. They were informed of the requirements of participation, as well as the potential benefits and harms associated with participating. Potential participants were then given access to a Google form to provide consent and express interest if they still wished to participate in the study.
Data were collected via survey using Qualtrics. Participants completed a day-one pre-assessment survey, taking approximately 15 minutes, in which they filled out information on their sleep hygiene behaviors in the past week. They then wore a MUSE-S headband during sleep for seven days, using a daily Qualtrics survey to transfer their data from the MUSE app as collected by the headband. Finally, at the end of their seven-day participation, participants completed a day-seven Qualtrics survey — similar to the day-one survey — with how often they participated in each of a number of sleep hygiene behaviors in the past week, during their seven-day participation period.
2.2Measures
Sleep hygiene, broadly referred to as “a set of behaviors that influence the quality of one’s sleep”, was measured via self-report using the 19-item Sleep Hygiene Questionnaire (Gellis & Lichstein, 2009). The measure, as used in our study, captures 4 items of activating or arousing activities near bedtime (e.g., “Worried, planned, or thought about important matters at bedtime”); 4 items of use of the bed for activities other than sleep (e.g., “Read in bed”); and 4 items of environmental characteristics (e.g., “Slept in a room with an uncomfortable nighttime temperature”) for a total of 12 items in which respondents indicate the number of days in the past week they have engaged in each item’s activity. Each item for sleep hygiene was averaged to produce a composite score. (Specifically, the score for each item was added and then divided by the number of items for the measure.)
Additionally, sleep data was collected using the MUSE-S headband. This piece of technology monitors participants’ sleep stages, time spent in each sleep stage, how quickly they fall asleep, time asleep, how frequently they wake up in the night, slow wave intensity, restoration points, sleep position, stillness, heart rate, and, most importantly for this specific report, overall sleep score. For the purposes of this study, the overall sleep score as measured by the MUSE-S represents a biological measure of sleep quality.
2.3Data Analysis Plan
Data were analyzed using R to calculate descriptive statistical measures — including means, medians, standard deviations, and ranges — and to visualize relationships among sleep hygiene items and composite sleep scores across the study period. Data from the pre- and post-assessment surveys, as well as the daily surveys, were imported into Posit Cloud, cleaned, and merged using participant identifiers such as survey password. Variable names were tidied, numeric vectors were ensured, and relevant items were recoded as needed.
Composite scores were calculated for three sleep hygiene items of particular interest for this analysis, including “Worried, planned, or thought about important matters at bedtime” (Gellis & Lichstein, 2009), or Bedtime Worrying (SH_11), “Lounged around in bed” (Gellis & Lichstein, 2009) or Bed Lounging (SH_14), and “Slept in a room that was too bright” (Gellis & Lichstein, 2009) or Bright Bedtime Environment (SH_19). These items were selected as representations of each of the three subcategories of sleep hygiene items collected in this study — items of activating or arousing activities near bedtime, items involving the use of the bed for activities other than sleep, and items assessing environmental characteristics, respectively. Composite scores were created for each of these items at both pre- and post-assessment, and a composite measure of sleep score was also created for overall sleep quality. Cronbach’s alpha was computed for each composite to assess internal consistency and confirm that averaging items provided meaningful scores. Normality of composite scores was evaluated via histograms, and participants with incomplete responses or missing consent were excluded.
Bivariate associations between sleep hygiene items and composite sleep scores were examined using Pearson correlations, with scatterplots and regressions lines indicating 95% confidence intervals used to visualize trends. A Violin plot with overlaid boxplots was generated to compare distributions of these sleep hygiene scores across the two different time points measured. Exploratory analyses examined changes in sleep hygiene behaviors and their relation to overall sleep quality. All data cleaning, variable transformation, reliability assessments, and visualizations were conducted in using tidyverse and supporting packages, ensuring full reproducibility of the workflow.
2.4 Load
Show the code
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.1 ✔ stringr 1.5.2
✔ ggplot2 4.0.0 ✔ tibble 3.3.0
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.1.0
── 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
Show the code
library(psych)
Attaching package: 'psych'
The following objects are masked from 'package:ggplot2':
%+%, alpha
Show the code
library(knitr)library(tibble)library(dplyr)library(tidyr)library(scales) # for number formatting like comma()
Attaching package: 'scales'
The following objects are masked from 'package:psych':
alpha, rescale
The following object is masked from 'package:purrr':
discard
The following object is masked from 'package:readr':
col_factor
Show the code
library(english) # to convert numbers to words
Attaching package: 'english'
The following object is masked from 'package:scales':
ordinal
Show the code
library(stringr) # for text functions like str_c()#source: Importing Data Once (Hei & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/import-once.html
2.5 Import Data
2.5.1 Day 1 & 7
Show the code
library(readxl)# Import Excel fileday17data <-read_excel("day17_clean.xlsx",col_names =TRUE)day17data[day17data ==-99] <-NAday17data[day17data ==-50] <-NA#source: Importing Data Once (Hei & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/import-once.html#explanation: all -99 and -50 data will be treated as missing data
New names:
• `HEARTRATE` -> `HEARTRATE...39`
• `HEARTRATE` -> `HEARTRATE...43`
Show the code
dailydata[dailydata ==-99] <-NAdailydata[dailydata ==-50] <-NA#source: Importing Data Once (Hei & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/import-once.html#explanation: all -99 and -50 data will be treated as missing data
2.5.3 Convert Long to Wide for Day 1 & 7 Surveys
Show the code
library(tidyr)## Convert to wide formatwide_17data <- day17data %>%pivot_wider(id_cols = PASSWORD,names_from = SURVEYDAY, values_from =c(`SH _8`, `SH_9`, `SH_10`, `SH _11`, `SH _12`, `SH _13`, `SH _14`, `SH _15`, `SH_16`, `SH _17`, `SH_18`, `SH _19`), names_glue ="{.value}_T{SURVEYDAY}" )#source: Tidying your Data (McCarty et. al., 2025): https://shanemccarty.github.io/FRIplaybook/tidyr.html#explanation: Convert long format data to wide format to allow for within-person analyses with one row per participant
2.5.4 Convert Long to Wide for Daily Survey
Show the code
library(tidyr)## Convert to wide formatwide_dailydata <- dailydata %>%pivot_wider(id_cols = PASSWORD,names_from = DAY,values_from =c(SLEEPSCORE), names_glue ="{.value}_T{DAY}" )#source: Tidying your Data (McCarty et. al., 2025): https://shanemccarty.github.io/FRIplaybook/tidyr.html#explanation: Convert long format data to wide format to allow for within-person analyses with one row per participant
2.5.5 Import Clean Daily Data
Show the code
library(readxl)# Import Excel filewide_dailydata_clean <-read_excel("daily_survey_clean.xlsx",col_names =TRUE)#source: Importing Data Once (Hei & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/import-once.html#explanation: Manually entered wide daily data into an excel file that was then imported, due to R removing necessary data when cleaning
2.5.6 Join Data Sets
Show the code
library(readxl)library(dplyr)#| label: join-datasets#source: https://dplyr.tidyverse.org/reference/mutate-joins.html#day17data ## primary - Day 1/7#wide_dailydata_clean ## secondary - daily# Select only the variables you need from secondary dataset, then joincombined <- wide_17data %>%left_join( wide_dailydata_clean %>%select("PASSWORD", "SLEEPSCORE_T1", "SLEEPSCORE_T2", "SLEEPSCORE_T3", "SLEEPSCORE_T4", "SLEEPSCORE_T5", "SLEEPSCORE_T6", "SLEEPSCORE_T7"),by ="PASSWORD" )#explanation: This code joins together the necessary sleep score data taken from the daily survey with the data from the day 1/7 survey.
2.6 Tidy
2.6.1 Remove Spaces from Variable Names in Day 1/7 Survey
Show the code
names(wide_17data) <-gsub(" ", "", names(wide_17data))#source: Wickham, Hadley & Grolemund, Garrett. R for Data Science (2e) — Chapter 12: “Tibbles.”#explanation: Some of the variables had spaces in the names which was messing up data analysis, which this code was used to clean
2.6.2 Change to Numeric Vectors
Show the code
combined <- combined %>%mutate(across(where(is.list), ~sapply(., function(x) if (is.null(x)) NAelse x[1])))#source: https://dcl-prog.stanford.edu/list-columns.html#explanation: Columns were consisiting of lists and not numeric vectors, so this was run to convert to numeric vectors.
2.6.3 Remove Spaces from Variable Names in Combined Data Set
Show the code
names(combined) <-gsub(" ", "", names(combined))#source: Wickham, Hadley & Grolemund, Garrett. R for Data Science (2e) — Chapter 12: “Tibbles.”#explanation: Some of the variables had spaces in the names which was messing up data analysis, which this code was used to clean
2.7 Transform
2.7.1 Assign Labels to Sleep Hygiene Items at Time 1 and Time 2
Show the code
combined <- combined %>%filter(!is.na(SH_8_T1)) %>%mutate( SH_8_T1 ==case_when( SH_8_T1 ==0~"0 Days", SH_8_T1 ==1~"1 Day", SH_8_T1 ==2~"2 Days", SH_8_T1 ==3~"3 Days", SH_8_T1 ==4~"4 Days", SH_8_T1 ==5~"5 Days", SH_8_T1 ==6~"6 Days", SH_8_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_8_T2)) %>%mutate( SH_8_T2 ==case_when( SH_8_T2 ==0~"0 Days", SH_8_T2 ==1~"1 Day", SH_8_T2 ==2~"2 Days", SH_8_T2 ==3~"3 Days", SH_8_T2 ==4~"4 Days", SH_8_T2 ==5~"5 Days", SH_8_T2 ==6~"6 Days", SH_8_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_9_T1)) %>%mutate( SH_9_T1 ==case_when( SH_9_T1 ==0~"0 Days", SH_9_T1 ==1~"1 Day", SH_9_T1 ==2~"2 Days", SH_9_T1 ==3~"3 Days", SH_9_T1 ==4~"4 Days", SH_9_T1 ==5~"5 Days", SH_9_T1 ==6~"6 Days", SH_9_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_9_T2)) %>%mutate( SH_9_T2 ==case_when( SH_9_T2 ==0~"0 Days", SH_9_T2 ==1~"1 Day", SH_9_T2 ==2~"2 Days", SH_9_T2 ==3~"3 Days", SH_9_T2 ==4~"4 Days", SH_9_T2 ==5~"5 Days", SH_9_T2 ==6~"6 Days", SH_9_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_10_T1)) %>%mutate( SH_10_T1 ==case_when( SH_10_T1 ==0~"0 Days", SH_10_T1 ==1~"1 Day", SH_10_T1 ==2~"2 Days", SH_10_T1 ==3~"3 Days", SH_10_T1 ==4~"4 Days", SH_10_T1 ==5~"5 Days", SH_10_T1 ==6~"6 Days", SH_10_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_10_T2)) %>%mutate( SH_10_T2 ==case_when( SH_10_T2 ==0~"0 Days", SH_10_T2 ==1~"1 Day", SH_10_T2 ==2~"2 Days", SH_10_T2 ==3~"3 Days", SH_10_T2 ==4~"4 Days", SH_10_T2 ==5~"5 Days", SH_10_T2 ==6~"6 Days", SH_10_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_11_T1)) %>%mutate( SH_11_T1 ==case_when( SH_11_T1 ==0~"0 Days", SH_11_T1 ==1~"1 Day", SH_11_T1 ==2~"2 Days", SH_11_T1 ==3~"3 Days", SH_11_T1 ==4~"4 Days", SH_11_T1 ==5~"5 Days", SH_11_T1 ==6~"6 Days", SH_11_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_11_T2)) %>%mutate( SH_11_T2 ==case_when( SH_11_T2 ==0~"0 Days", SH_11_T2 ==1~"1 Day", SH_11_T2 ==2~"2 Days", SH_11_T2 ==3~"3 Days", SH_11_T2 ==4~"4 Days", SH_11_T2 ==5~"5 Days", SH_11_T2 ==6~"6 Days", SH_11_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_12_T1)) %>%mutate( SH_12_T1 ==case_when( SH_12_T1 ==0~"0 Days", SH_12_T1 ==1~"1 Day", SH_12_T1 ==2~"2 Days", SH_12_T1 ==3~"3 Days", SH_12_T1 ==4~"4 Days", SH_12_T1 ==5~"5 Days", SH_12_T1 ==6~"6 Days", SH_12_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_12_T2)) %>%mutate( SH_12_T2 ==case_when( SH_12_T2 ==0~"0 Days", SH_12_T2 ==1~"1 Day", SH_12_T2 ==2~"2 Days", SH_12_T2 ==3~"3 Days", SH_12_T2 ==4~"4 Days", SH_12_T2 ==5~"5 Days", SH_12_T2 ==6~"6 Days", SH_12_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_13_T1)) %>%mutate( SH_13_T1 ==case_when( SH_13_T1 ==0~"0 Days", SH_13_T1 ==1~"1 Day", SH_13_T1 ==2~"2 Days", SH_13_T1 ==3~"3 Days", SH_13_T1 ==4~"4 Days", SH_13_T1 ==5~"5 Days", SH_13_T1 ==6~"6 Days", SH_13_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_13_T2)) %>%mutate( SH_13_T2 ==case_when( SH_13_T2 ==0~"0 Days", SH_13_T2 ==1~"1 Day", SH_13_T2 ==2~"2 Days", SH_13_T2 ==3~"3 Days", SH_13_T2 ==4~"4 Days", SH_13_T2 ==5~"5 Days", SH_13_T2 ==6~"6 Days", SH_13_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_14_T1)) %>%mutate( SH_14_T1 ==case_when( SH_14_T1 ==0~"0 Days", SH_14_T1 ==1~"1 Day", SH_14_T1 ==2~"2 Days", SH_14_T1 ==3~"3 Days", SH_14_T1 ==4~"4 Days", SH_14_T1 ==5~"5 Days", SH_14_T1 ==6~"6 Days", SH_14_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_14_T2)) %>%mutate( SH_14_T2 ==case_when( SH_14_T2 ==0~"0 Days", SH_14_T2 ==1~"1 Day", SH_14_T2 ==2~"2 Days", SH_14_T2 ==3~"3 Days", SH_14_T2 ==4~"4 Days", SH_14_T2 ==5~"5 Days", SH_14_T2 ==6~"6 Days", SH_14_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_15_T1)) %>%mutate( SH_15_T1 ==case_when( SH_15_T1 ==0~"0 Days", SH_15_T1 ==1~"1 Day", SH_15_T1 ==2~"2 Days", SH_15_T1 ==3~"3 Days", SH_15_T1 ==4~"4 Days", SH_15_T1 ==5~"5 Days", SH_15_T1 ==6~"6 Days", SH_15_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_15_T2)) %>%mutate( SH_15_T2 ==case_when( SH_15_T2 ==0~"0 Days", SH_15_T2 ==1~"1 Day", SH_15_T2 ==2~"2 Days", SH_15_T2 ==3~"3 Days", SH_15_T2 ==4~"4 Days", SH_15_T2 ==5~"5 Days", SH_15_T2 ==6~"6 Days", SH_15_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_16_T1)) %>%mutate( SH_16_T1 ==case_when( SH_16_T1 ==0~"0 Days", SH_16_T1 ==1~"1 Day", SH_16_T1 ==2~"2 Days", SH_16_T1 ==3~"3 Days", SH_16_T1 ==4~"4 Days", SH_16_T1 ==5~"5 Days", SH_16_T1 ==6~"6 Days", SH_16_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_16_T2)) %>%mutate( SH_16_T2 ==case_when( SH_16_T2 ==0~"0 Days", SH_16_T2 ==1~"1 Day", SH_16_T2 ==2~"2 Days", SH_16_T2 ==3~"3 Days", SH_16_T2 ==4~"4 Days", SH_16_T2 ==5~"5 Days", SH_16_T2 ==6~"6 Days", SH_16_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_17_T1)) %>%mutate( SH_17_T1 ==case_when( SH_17_T1 ==0~"0 Days", SH_17_T1 ==1~"1 Day", SH_17_T1 ==2~"2 Days", SH_17_T1 ==3~"3 Days", SH_17_T1 ==4~"4 Days", SH_17_T1 ==5~"5 Days", SH_17_T1 ==6~"6 Days", SH_17_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_17_T2)) %>%mutate( SH_17_T2 ==case_when( SH_17_T2 ==0~"0 Days", SH_17_T2 ==1~"1 Day", SH_17_T2 ==2~"2 Days", SH_17_T2 ==3~"3 Days", SH_17_T2 ==4~"4 Days", SH_17_T2 ==5~"5 Days", SH_17_T2 ==6~"6 Days", SH_17_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_18_T1)) %>%mutate( SH_18_T1 ==case_when( SH_18_T1 ==0~"0 Days", SH_18_T1 ==1~"1 Day", SH_18_T1 ==2~"2 Days", SH_18_T1 ==3~"3 Days", SH_18_T1 ==4~"4 Days", SH_18_T1 ==5~"5 Days", SH_18_T1 ==6~"6 Days", SH_18_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_18_T2)) %>%mutate( SH_18_T2 ==case_when( SH_18_T2 ==0~"0 Days", SH_18_T2 ==1~"1 Day", SH_18_T2 ==2~"2 Days", SH_18_T2 ==3~"3 Days", SH_18_T2 ==4~"4 Days", SH_18_T2 ==5~"5 Days", SH_18_T2 ==6~"6 Days", SH_18_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_19_T1)) %>%mutate( SH_19_T1 ==case_when( SH_19_T1 ==0~"0 Days", SH_19_T1 ==1~"1 Day", SH_19_T1 ==2~"2 Days", SH_19_T1 ==3~"3 Days", SH_19_T1 ==4~"4 Days", SH_19_T1 ==5~"5 Days", SH_19_T1 ==6~"6 Days", SH_19_T1 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
Show the code
combined <- combined %>%filter(!is.na(SH_19_T2)) %>%mutate( SH_19_T2 ==case_when( SH_19_T2 ==0~"0 Days", SH_19_T2 ==1~"1 Day", SH_19_T2 ==2~"2 Days", SH_19_T2 ==3~"3 Days", SH_19_T2 ==4~"4 Days", SH_19_T2 ==5~"5 Days", SH_19_T2 ==6~"6 Days", SH_19_T2 ==7~"7 Days" ) )#source: https://fripublichealth.quarto.pub/zerosum/report-preview.html#introduction, r manual#explanation: Assign labels to each response option for all sleep hygiene items.
2.7.2 Remove NAs
Show the code
combined[combined =="NA"] <-NA#source: https://stackoverflow.com/questions/3357743/replacing-character-values-with-na-in-a-data-frame#explanation: Register all N/A responses in the combined data set as "NA" in R
2.7.3 Create Composite Score For Sleep Hygiene at Day 1 and Day 7
2.7.3.1 Sleep Hygiene Day 1 Composite
Show the code
library(psych)SH_T1_keys <-list(SLEEPHYGIENE_T1 =c("SH_8_T1", "SH_9_T1", "SH_10_T1", "SH_11_T1", "SH_12_T1", "SH_13_T1", "SH_14_T1", "SH_15_T1", "SH_16_T1", "SH_17_T1", "SH_18_T1", "SH_19_T1"))#source: Creating Composite Scorex from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html#explanation: A composite score for sleep hygiene at day 1 was created to create an average sleep hygiene score for each participant based on their score for each item at day 1. This step creates keys for scoring.
Show the code
library(psych)# Using scoreItems() - recommended: SH_T1SH_T1_scores <-scoreItems(SH_T1_keys, combined)#source: Creating Composite Scores from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html
# Add to dataframecombined$SH_T1 <- composite_T1_scores[, "SLEEPHYGIENE_T1"]#source: Creating Composite Scores from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html#explanation: This final step adds the composite sleep score to the combined data frame
Show the code
scoreItems(keys = SH_T1_keys, items = combined)
Call: scoreItems(keys = SH_T1_keys, items = combined)
(Unstandardized) Alpha:
SLEEPHYGIENE_T1
alpha 0.23
Standard errors of unstandardized Alpha:
SLEEPHYGIENE_T1
ASE 0.23
Average item correlation:
SLEEPHYGIENE_T1
average.r 0.025
Median item correlation:
SLEEPHYGIENE_T1
0.029
Guttman 6* reliability:
SLEEPHYGIENE_T1
Lambda.6 0.69
Signal/Noise based upon av.r :
SLEEPHYGIENE_T1
Signal/Noise 0.3
Scale intercorrelations corrected for attenuation
raw correlations below the diagonal, alpha on the diagonal
corrected correlations above the diagonal:
SLEEPHYGIENE_T1
SLEEPHYGIENE_T1 0.23
Average adjusted correlations within and between scales (MIMS)
[1] 0.02
Average adjusted item x scale correlations within and between scales (MIMT)
[1] 0.33
In order to see the item by scale loadings and frequency counts of the data
print with the short option = FALSE
Show the code
#source: Creating Composite Scores from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html#explanation: This allows us to examine whether the scores on each sleep hygiene item accurately reflects the total composite sleep hygiene score at day 1.
2.7.3.2 Visualize Normality Histogram for Sleep Hygiene at Day 1
Show the code
library(ggplot2)ggplot(combined, mapping =aes(x = SH_T1)) +geom_histogram(binwidth =1, color ="black") +xlab("Sleep Hygiene at Day 1")
Show the code
#source: datacamp, ggplot2 cheat sheet#explanation: Check to see if sleep hygiene scores at day 1 are normally distributed.
2.7.3.3 Sleep Hygiene Day 7 Composite
Show the code
library(psych)SH_T2_keys <-list(SLEEPHYGIENE_T2 =c("SH_8_T2", "SH_9_T2", "SH_10_T2", "SH_10_T2", "SH_12_T2", "SH_13_T2", "SH_14_T2", "SH_15_T2", "SH_16_T2", "SH_17_T2", "SH_18_T2", "SH_19_T2"))#source: Creating Composite Scorex from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html#explanation: A composite score for sleep hygiene at day 1 was created to create an average sleep hygiene score for each participant based on their score for each item at day 1. This step creates keys for scoring.
Show the code
library(psych)# Using scoreItems() - recommended: SH_T2SH_T2_scores <-scoreItems(SH_T2_keys, combined)#source: Creating Composite Scores from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html
# Add to dataframecombined$SH_T2 <- composite_T2_scores[, "SLEEPHYGIENE_T2"]#source: Creating Composite Scores from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html#explanation: This final step adds the composite sleep score to the combined data frame
Show the code
scoreItems(keys = SH_T2_keys, items = combined)
Call: scoreItems(keys = SH_T2_keys, items = combined)
(Unstandardized) Alpha:
SLEEPHYGIENE_T2
alpha 0.57
Standard errors of unstandardized Alpha:
SLEEPHYGIENE_T2
ASE 0.15
Average item correlation:
SLEEPHYGIENE_T2
average.r 0.11
Median item correlation:
SLEEPHYGIENE_T2
0.083
Guttman 6* reliability:
SLEEPHYGIENE_T2
Lambda.6 0.75
Signal/Noise based upon av.r :
SLEEPHYGIENE_T2
Signal/Noise 1.3
Scale intercorrelations corrected for attenuation
raw correlations below the diagonal, alpha on the diagonal
corrected correlations above the diagonal:
SLEEPHYGIENE_T2
SLEEPHYGIENE_T2 0.57
Average adjusted correlations within and between scales (MIMS)
[1] 0.11
Average adjusted item x scale correlations within and between scales (MIMT)
[1] 0.43
In order to see the item by scale loadings and frequency counts of the data
print with the short option = FALSE
Show the code
#source: Creating Composite Scores from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html#explanation: This allows us to examine whether the scores on each sleep hygiene item accurately reflects the total composite sleep hygiene score at day 7.
2.7.3.4 Visualize Normality Histogram for Sleep Hygiene at Day 7
Show the code
library(ggplot2)ggplot(combined, mapping =aes(x = SH_T2)) +geom_histogram(binwidth =1, color ="black") +xlab("Sleep Hygiene at Day 7")
Show the code
#source: datacamp, ggplot2 cheat sheet#explanation: Check to see if sleep hygiene scores at day 7 are normally distributed.
2.7.4 Create Composite Score for Sleep Scores
Show the code
library(psych)SLEEPSCORE_keys <-list(SLEEPSCORE =c("SLEEPSCORE_T2", "SLEEPSCORE_T3", "SLEEPSCORE_T4", "SLEEPSCORE_T5", "SLEEPSCORE_T6", "SLEEPSCORE_T7"))#source: Creating Composite Scorex from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html#explanation: A composite score for sleep score was created to create an average sleep score for each participant based on their sleep score for each individual night of sleep during data collection. This step creates keys for scoring.#note: remove T1 because all NAs
Show the code
combined[unlist(SLEEPSCORE_keys)] <-lapply(combined[unlist(SLEEPSCORE_keys)], function(x) as.numeric(as.character(x)))#source: https://r4ds.hadley.nz/data-transform.html#explanation: Originally listed as character vectors, so must be changed to numeric vectors
Show the code
library(psych)# Using scoreItems() - recommended: SLEEPSCORESLEEPSCORE_scores <-scoreItems(SLEEPSCORE_keys, combined)#source: Creating Composite Scores from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html
# Add to dataframecombined$SLEEPSCORE <- composite_SLEEPSCORE_scores[, "SLEEPSCORE"]#source: Creating Composite Scores from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html#explanation: This final step adds the composite sleep score to the combined data frame
Number of categories should be increased in order to count frequencies.
Call: scoreItems(keys = SLEEPSCORE_keys, items = combined)
(Unstandardized) Alpha:
SLEEPSCORE
alpha 0.51
Standard errors of unstandardized Alpha:
SLEEPSCORE
ASE 0.19
Average item correlation:
SLEEPSCORE
average.r 0.15
Median item correlation:
SLEEPSCORE
0.13
Guttman 6* reliability:
SLEEPSCORE
Lambda.6 0.55
Signal/Noise based upon av.r :
SLEEPSCORE
Signal/Noise 1
Scale intercorrelations corrected for attenuation
raw correlations below the diagonal, alpha on the diagonal
corrected correlations above the diagonal:
SLEEPSCORE
SLEEPSCORE 0.51
Average adjusted correlations within and between scales (MIMS)
[1] 0.15
Average adjusted item x scale correlations within and between scales (MIMT)
[1] 0.55
In order to see the item by scale loadings and frequency counts of the data
print with the short option = FALSE
Show the code
#source: Creating Composite Scores from Multi-Item Measures (McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/composite.html#explanation: This allows us to examine whether the sleep scores for each individual day accurately reflects the total composite sleep score.
2.7.5 Visualize Normality Histogram for Sleep Score
Show the code
library(ggplot2)ggplot(combined, mapping =aes(x = SLEEPSCORE)) +geom_histogram(binwidth =1, color ="black")
Show the code
#source: datacamp, ggplot2 cheat sheet#explanation: Check to see if sleep scores are normally distributed.
3 Results
3.1 Summary of Sleep Hygiene and Sleep Quality Variables
Before examining associations between sleep hygiene behaviors and sleep quality, descriptive statistics, including means, medians, standard deviations, and ranges were calculated for the three sleep hygiene items at pre- and post-assessment as well as for the composite sleep score. Bedtime Worrying and Bed Lounging showed moderate variability across the sample, with means generally falling between 2.8 and 4.9 across time points. In contrast, Bright Bedtime Environment scores were low, with medians of 0 at both assessments, indicating that most participants rarely slept under conditions that were too bright. Composite sleep scores demonstrated higher consistency and less variability than the individual behavior items. Overall, the descriptive results suggest that participants tended to report relatively healthy sleep environments, with more variation observed in cognitive habits, such as worrying, and behavioral tendencies, such as lounging.
3.1.1 Descriptive Statistics for 3 Sleep Hygiene Items
3.1.1.1 Means
Show the code
mean(combined$SH_11_T1)
[1] 4.88
Show the code
#source: datacamp#explanation: calculate mean of bedtime worrying at day 1
Show the code
mean(combined$SH_11_T2)
[1] 3.92
Show the code
#source: datacamp#explanation: calculate mean of bedtime worrying at day 7
Show the code
mean(combined$SH_14_T1)
[1] 4.2
Show the code
#source: datacamp#explanation: calculate mean of bed lounging at day 1
Show the code
mean(combined$SH_14_T2)
[1] 2.8
Show the code
#source: datacamp#explanation: calculate mean of bed lounging at day 7
Show the code
mean(combined$SH_19_T1)
[1] 0.72
Show the code
#source: datacamp#explanation: calculate mean of bright bedttime environment at day 1
Show the code
mean(combined$SH_19_T2)
[1] 1
Show the code
#source: datacamp#explanation: calculate mean of bright bedttime environment at day 7
Show the code
mean(combined$SLEEPSCORE)
[1] 72.60667
Show the code
#source: datacamp#explanation: calculate mean of composite sleep score
3.1.1.2 Standard Deviations
Show the code
sd(combined$SH_11_T1)
[1] 2.06801
Show the code
#source: datacamp#explanation: calculate standard deviation of bedtime worrying at day 1
Show the code
sd(combined$SH_11_T2)
[1] 2.215852
Show the code
#source: datacamp#explanation: calculate standard deviation of bedtime worrying at day 7
Show the code
sd(combined$SH_14_T1)
[1] 2.43242
Show the code
#source: datacamp#explanation: calculate standard deviation of bed lounging at day 1
Show the code
sd(combined$SH_14_T2)
[1] 2.27303
Show the code
#source: datacamp#explanation: calculate standard deviation of bed lounging at day 7
Show the code
sd(combined$SH_19_T1)
[1] 1.275408
Show the code
#source: datacamp#explanation: calculate standard deviation of bright bedtime environment at day 1
Show the code
sd(combined$SH_19_T2)
[1] 1.683251
Show the code
#source: datacamp#explanation: calculate standard deviation of bright bedtime environment at day 7
Show the code
sd(combined$SLEEPSCORE)
[1] 6.304784
Show the code
#source: datacamp#explanation: calculate standard deviation of composite sleep score
3.1.1.3 Medians
Show the code
median(combined$SH_11_T1)
[1] 5
Show the code
#source: datacamp#explanation: calculate median of bedtime worrying at day 1
Show the code
median(combined$SH_11_T2)
[1] 4
Show the code
#source: datacamp#explanation: calculate median of bedtime worrying at day 7
Show the code
median(combined$SH_14_T1)
[1] 4
Show the code
#source: datacamp#explanation: calculate median of bed lounging at day 1
Show the code
median(combined$SH_14_T2)
[1] 2
Show the code
#source: datacamp#explanation: calculate median of bed lounging at day 7
Show the code
median(combined$SH_19_T1)
[1] 0
Show the code
#source: datacamp#explanation: calculate median of bright bedtime environment at day 1
Show the code
median(combined$SH_19_T2)
[1] 0
Show the code
#source: datacamp#explanation: calculate median of bright bedtime environment at day 7
Show the code
median(combined$SLEEPSCORE)
[1] 74.16667
Show the code
#source: datacamp#explanation: calculate median of composite sleep score
3.1.1.4 Ranges
Show the code
range(combined$SH_11_T1)
[1] 0 7
Show the code
#source: datacamp#explanation: calculate range of bedtime worrying at day 1
Show the code
range(combined$SH_11_T2)
[1] 0 7
Show the code
#source: datacamp#explanation: calculate range of bedtime worrying at day 7
Show the code
range(combined$SH_14_T1)
[1] 0 7
Show the code
#source: datacamp#explanation: calculate range of bed lounging at day 1
Show the code
range(combined$SH_14_T2)
[1] 0 7
Show the code
#source: datacamp#explanation: calculate range of bed lounging at day 7
Show the code
range(combined$SH_19_T1)
[1] 0 4
Show the code
#source: datacamp#explanation: calculate range of bright bedtime environment at day 1
Show the code
range(combined$SH_19_T2)
[1] 0 7
Show the code
#source: datacamp#explanation: calculate range of bright bedtime environment at day 7
Show the code
range(combined$SLEEPSCORE)
[1] 60.25000 83.33333
Show the code
#source: datacamp#explanation: calculate range of composite sleep score
3.2 Bedtime Worrying at Day 1 and 7 with Sleep Score
3.2.1 Bedtime Worrying at Day 1 vs. Sleep Score
Figure 1 shows a scatterplot of Bedtime Worrying at Day 1 (SH_11_T1) and composite sleep score. A majority of the sample (n = 13) scored 4.5 or above this for sleep hygiene item, with only 4 participants scoring below 4.5. Scores were somewhat clustered at the higher end, with sleep score ranges from approximately 60 to 82. Visual inspection of the scatterplot suggests no clear trend between these two variables, which was confirmed with a Pearson correlation which showed a very weak negative association that was not statistically significant (r = -.07, p = .756).
Show the code
SH_11_T1_vs_SS <-ggplot(data = combined,mapping =aes(x = SH_11_T1,y = SLEEPSCORE)) +geom_point() +geom_smooth(method ="lm") +xlab("Bedtime Worrying at Day 1") +ylab("Sleep Score")SH_11_T1_vs_SS
`geom_smooth()` using formula = 'y ~ x'
Figure 1. Relationship Between Bedtime Worrying at Day 1 and Sleep Score. A scatterplot displays individual participants’ sleep scores plotted against their values for Bedtime Worrying at Day 1, with a linear regression line and 95% confidence band overlaid. The fitted line shows a very slight negative slope, indicating no meaningful association between Bedtime Worrying at Day 1 and overall sleep score.
Show the code
#source: Visualize in ggplot (Silhavy & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/ggplot2.html#explanation: create scatter plot to visualize the relationship between bedtime worrying at day 1 vs. sleep score
Pearson's product-moment correlation
data: combined$SH_11_T1 and combined$SLEEPSCORE
t = -0.31378, df = 23, p-value = 0.7565
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.4488401 0.3385772
sample estimates:
cor
-0.06528813
Show the code
#source: https://www.r-bloggers.com/2021/10/pearson-correlation-in-r/, https://www.onlinespss.com/pearson-correlation-in-r/#explanation: calculate pearson correlation to quantify the strength of the relationship between bedtime worrying at day 1 and sleep score
3.2.2 Bedtime Worrying at Day 7 vs. Sleep Score
Figure 2 presents the same relationship at Day 7. Here, bedtime worrying scores were more variable, with a few participants reporting lower worrying scores. The scatterplot shows a slight downward slope, indicating a weak negative correlation that was confirmed by calculating a Pearson correlation; however this relationship was also nonsignificant (r = -.29, p = .156).
Show the code
SH_11_T2_vs_SS <-ggplot(data = combined,mapping =aes(x = SH_11_T2,y = SLEEPSCORE)) +geom_point() +geom_smooth(method ="lm") +xlab("Bedtime Worrying at Day 7") +ylab("Sleep Score")SH_11_T2_vs_SS
`geom_smooth()` using formula = 'y ~ x'
Figure 2. Relationship Between Bedtime Worrying at Day 7 and Sleep Score. A scatterplot displays individual participants’ sleep scores plotted against their values for Bedtime Worrying at Day 7, with a linear regression line and 95% confidence band overlaid. The fitted line shows a slight downward slope, indicating a weak negative relationship between Bedtime Worrying at Day 7 and sleep score.
Show the code
#source: Visualize in ggplot (Silhavy & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/ggplot2.html#explanation: create scatter plot to visualize the relationship between bedtime worrying at day 7 vs. sleep score
Pearson's product-moment correlation
data: combined$SH_11_T2 and combined$SLEEPSCORE
t = -1.465, df = 23, p-value = 0.1565
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.6161496 0.1164266
sample estimates:
cor
-0.292144
Show the code
#source: https://www.r-bloggers.com/2021/10/pearson-correlation-in-r/, https://www.onlinespss.com/pearson-correlation-in-r/#explanation: calculate pearson correlation to quantify the strength of the relationship between bedtime worrying at day 7 and sleep score
3.3 Bed Lounging at Day 1 and 7 with Sleep Score
3.3.1 Bed Lounging at Day 1 vs. Sleep Score
Figure 3 depicts a scatterplot of Bed Lounging at Day 1 (SH_14_T1) and sleep score. Most participants scored in the midrange, with few scoring higher or lower. The scatterplot shows a slight negative slope, suggesting a very weak negative relationship with sleep score. This observation was also represented through a nonsignificant Pearson correlation (r = -.19, p = .352).
Show the code
SH_14_T1_vs_SS <-ggplot(data = combined,mapping =aes(x = SH_14_T1,y = SLEEPSCORE)) +geom_point() +geom_smooth(method ="lm") +xlab("Bed Lounging at Day 1") +ylab("Sleep Score")SH_14_T1_vs_SS
`geom_smooth()` using formula = 'y ~ x'
Figure 3. Association between Bed Lounging at Day 1 (T1) and overall sleep score. Each point represents an individual participant’s score for Bed Lounging at Day 1 plotted against their corresponding composite sleep score. A simple linear regression line with 95% confidence interval (grey band) is overlaid to illustrate the overall trend, which shows a slight negative association between Bed Lounging at Day 1 and sleep score.
Show the code
#source: Visualize in ggplot (Silhavy & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/ggplot2.html#explanation: create scatter plot to visualize the relationship between bed lounging at day 1 vs. sleep score
Pearson's product-moment correlation
data: combined$SH_14_T1 and combined$SLEEPSCORE
t = -0.94905, df = 23, p-value = 0.3525
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.5472774 0.2177046
sample estimates:
cor
-0.1941253
Show the code
#source: https://www.r-bloggers.com/2021/10/pearson-correlation-in-r/, https://www.onlinespss.com/pearson-correlation-in-r/#explanation: calculate pearson correlation to quantify the strength of the relationship between bed lounging at day 1 and sleep score
3.3.2 Bed Lounging at Day 7 vs. Sleep Score
Similarly, figure 4 represents a visualization of the relationship between Bed Lounging at Day 7 (SH_14_T2) and sleep score through a scatterplot. Scores were more evenly spread at this post-assessment observation, but the scatterplot indicates virtually no association between bed lounging and sleep score, confirmed by a nonsignificant Pearson correlation (r = .00, p = .997).
Show the code
SH_14_T2_vs_SS <-ggplot(data = combined,mapping =aes(x = SH_14_T2,y = SLEEPSCORE)) +geom_point() +geom_smooth(method ="lm") +xlab("Bed Lounging at Day 7") +ylab("Sleep Score")SH_14_T2_vs_SS
`geom_smooth()` using formula = 'y ~ x'
Figure 4. Scatterplot showing the association between Bed Lounging at Day 7 scores and sleep score. A linear regression line with a 95% confidence interval indicates no meaningful relationship between Bed Lounging at Day 7 and participants’ sleep scores.
Show the code
#source: Visualize in ggplot (Silhavy & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/ggplot2.html#explanation: create scatter plot to visualize the relationship between bed lounging at day 7 vs. sleep score
Pearson's product-moment correlation
data: combined$SH_14_T2 and combined$SLEEPSCORE
t = 0.0027887, df = 23, p-value = 0.9978
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.3946401 0.3956215
sample estimates:
cor
0.0005814914
Show the code
#source: https://www.r-bloggers.com/2021/10/pearson-correlation-in-r/, https://www.onlinespss.com/pearson-correlation-in-r/#explanation: calculate pearson correlation to quantify the strength of the relationship between bed lounging at day 7 and sleep score
3.4 Bright Bedtime Environment at Day 1 and 7 with Sleep Score
3.4.1 Bright Bedtime Environment at Day 1 vs. Sleep Score
Figure 5 illustrates Bright Bedtime Environment at Day 1 (SH_19_T1) versus composite sleep score. Notably, a majority of participants (n = 13) noted no exposure to bright environments at bedtime (score = 0), with only 4 participants scoring 0.5 or higher. The scatterplot shows no meaningful pattern, and the Pearson Correlation indicates a nonsignificant, very weak positive association with sleep score in this sample (r = .04, p = .845).
Show the code
SH_19_T1_vs_SS <-ggplot(data = combined,mapping =aes(x = SH_19_T1,y = SLEEPSCORE)) +geom_point() +geom_smooth(method ="lm") +xlab("Bright Bedtime Environment at Day 1") +ylab("Sleep Score")SH_19_T1_vs_SS
`geom_smooth()` using formula = 'y ~ x'
Figure 5. Association between Bright Bedtime Environment at Day 1 and Sleep Score. A scatterplot shows individual participant scores of Bright Bedtime Environment at Day 1 plotted against their sleep scores, with a linear regression line and 95% confidence interval. The model indicates no meaningful linear relationship between Bright Bedtime Environment at Day 1 and overall sleep score.
Show the code
#source: Visualize in ggplot (Silhavy & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/ggplot2.html#explanation: create scatter plot to visualize the relationship between bright bedtime environment at day 1 vs. sleep score
Pearson's product-moment correlation
data: combined$SH_19_T1 and combined$SLEEPSCORE
t = 0.19681, df = 23, p-value = 0.8457
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.3599587 0.4291815
sample estimates:
cor
0.04100424
Show the code
#source: https://www.r-bloggers.com/2021/10/pearson-correlation-in-r/, https://www.onlinespss.com/pearson-correlation-in-r/#explanation: calculate pearson correlation to quantify the strength of the relationship between bright bedtime environment at day 1 and sleep score
3.4.2 Bright Bedtime Environment at Day 7 vs. Sleep Score
At Day 7 (SH_19_T2), shown in Figure 6, only 7 participants scored above 0 for this sleep hygiene item, with a majority (n = 10) indicating, similar to the pre-assessment, that they did not sleep in an environment that was too bright over the previous 7 days. The scatterplot suggests a slight downward trend, reflecting a weak to moderate negative correlation with sleep score; however this result did not reach statistical significance (r = -.39, p = .054).
Show the code
SH_19_T2_vs_SS <-ggplot(data = combined,mapping =aes(x = SH_19_T2,y = SLEEPSCORE)) +geom_point() +geom_smooth(method ="lm") +xlab("Bright Bedtime Environment at Day 7") +ylab("Sleep Score")SH_19_T2_vs_SS
`geom_smooth()` using formula = 'y ~ x'
Figure 6. Relationship between Bright Bedtime Environment at Day 7 and sleep score. The scatterplot illustrates individual values for Bright Bedtime Environment at Day 7 versus sleep score, with a fitted linear regression line and confidence band showing a modeate negative association between Bright Bedtime Environment at Day 7 and sleep quality.
Show the code
#source: Visualize in ggplot (Silhavy & McCarty, 2025): https://shanemccarty.github.io/FRIplaybook/ggplot2.html#explanation: create scatter plot to visualize the relationship between bright bedtime environment at day 7 vs. sleep score
Pearson's product-moment correlation
data: combined$SH_19_T2 and combined$SLEEPSCORE
t = -2.0232, df = 23, p-value = 0.05483
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.679467030 0.007607986
sample estimates:
cor
-0.3886914
Show the code
#source: https://www.r-bloggers.com/2021/10/pearson-correlation-in-r/, https://www.onlinespss.com/pearson-correlation-in-r/#explanation: calculate pearson correlation to quantify the strength of the relationship between bright bedtime environment at day 7 and sleep score
Because of the non-significant p-values of all of the correlations between these three sleep hygiene items at pre- and post-assessment and composite sleep score, and because all of their confidence intervals contain zero, the null hypothesis that sleep hygiene behaviors are not associated with sleep score fails to be rejected.
3.5Sleep Hygiene at Pre- and Post-Assessment
3.5.1 3 Sleep Hygiene Items at Day 1 and Day 7
To examine changes in sleep hygiene behavior over time, data was cleaned to remove any missing values, and only the relevant sleep hygiene and sleep score variables were included. Figure 7 represents violin plots of SH_11, SH_14, and SH_19 from pre-assessment to post-assessment. These plots show that distributions of Bedtime Worrying and Bed Lounging were relatively broad, while Bright Bedtime Environment scores were concentrated near zero at both time points. Median scores appeared largely stable across time points, with no pronounced shifts.
Show the code
SHplotdata <-data.frame(Score =c(combined$SH_11_T1, combined$SH_11_T2, combined$SH_14_T1, combined$SH_14_T2, combined$SH_19_T1, combined$SH_19_T2),Group =rep(c("SH_11_T1", "SH_11_T2","SH_14_T1", "SH_14_T2","SH_19_T1", "SH_19_T2"),each =nrow(combined)))#source: r 4 data science manual#explanation: make data frame for data to be plotted
Show the code
library(dplyr)SHplotdata <- SHplotdata %>%mutate(SH =sub("_T[12]", "", Group), # e.g., SH_11, SH_14, SH_19Time =sub(".*_T", "T", Group) # T1 or T2 ) %>%mutate(Time =factor(Time, levels =c("T1", "T2")),SH =factor(SH, levels =c("SH_11", "SH_14", "SH_19")) )#source: r 4 data science manual#explanation: create variables to group the plot by
Show the code
library(ggplot2)plot_3SH_changes <-ggplot(SHplotdata,aes(x =interaction(SH, Time), # combination like "SH_11.T1", "SH_11.T2", etc.y = Score,fill = SH)) +geom_violin(trim =TRUE, position =position_nudge(x =0.15)) +geom_boxplot(width = .1,outlier.shape =NA,position =position_nudge(x =-0.15)) +geom_point(position =position_nudge(x =-0.35),alpha =0.6) +scale_fill_manual(name ="Sleep Hygiene Item",values =c("SH_11"="#673888","SH_14"="#ef4f91","SH_19"="#c79dd7" )) +scale_x_discrete(labels =c("SH_11.T1"="Bedtime Worring at Day 1","SH_11.T2"="Bedtime Worring at Day 7","SH_14.T1"="Bed Lounging at Day 1","SH_14.T2"="Bed Lounging at Day 7","SH_19.T1"="Bright Bedtime Environment at Day 1","SH_19.T2"="Bright Bedtime Environment at Day 7" )) +labs(title ="Change in Sleep Hygiene Scores from Day 1 to Day 7",x ="Condition × Time",y ="Score (0 Days to 7 Days)") +theme_minimal(base_size =14) +theme(axis.text.x =element_text(angle =45, hjust =1),plot.margin =margin(t =10, r =10, b =10, l =25))plot_3SH_changes
Figure 7. Change in SH scores from Day 1 (T1) to Day 7 (T2) across three SH conditions: Bedtime worrying (SH_11), Bed Lounging (SH_14), and Bright Bedtime Environment (SH_19). Violin plots display the distribution of scores (0–7 days), with overlaid boxplots indicating medians and interquartile ranges and jittered points representing individual participant data.
Show the code
#source: Visualizing pre/post score (Sava, 2025): https://shanemccarty.github.io/FRIplaybook/violin.html#explanation: create violin plot to visualize the 3 sleep hygiene items at day 1 and day 7
Show the code
ggsave("plots/plot7_3SH.png", plot = plot_3SH_changes,width =10, height =8, dpi =300)#explanation: save the plot to the "plots" folder
3.5.2 Correlations for Sleep Hygiene at Day 1 and 7 vs. Sleep Score
Additionally, Pearson correlations were calculated to assess the relationship between composite sleep hygiene scores for pre- and post-assessment and composite sleep score. At pre-assessment, there was a nonsignificant, very weak positive association between sleep hygiene scores and sleep scores (r = .04, p = .826), and at post-assessment there was a nonsignificant, weak negative association between these two variables (r = -.20, p = .339). These results suggest that in this sample, composite sleep hygiene scores were not related to composite sleep quality.
Pearson's product-moment correlation
data: combined$SH_T1 and combined$SLEEPSCORE
t = 0.22156, df = 23, p-value = 0.8266
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.3554636 0.4333775
sample estimates:
cor
0.0461492
Show the code
#source: https://www.r-bloggers.com/2021/10/pearson-correlation-in-r/, https://www.onlinespss.com/pearson-correlation-in-r/#explanation: calculate pearson correlation to quantify the strength of the relationship between composite sleep hygiene score at day 1 and composite sleep score
Pearson's product-moment correlation
data: combined$SH_T2 and combined$SLEEPSCORE
t = -0.97611, df = 23, p-value = 0.3392
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.5511416 0.2124272
sample estimates:
cor
-0.1994444
Show the code
#source: https://www.r-bloggers.com/2021/10/pearson-correlation-in-r/, https://www.onlinespss.com/pearson-correlation-in-r/#explanation: calculate pearson correlation to quantify the strength of the relationship between composite sleep hygiene score at day 7 and composite sleep score
4 Discussion
The primary aim of this study was to examine whether behavioral sleep hygiene practices were associated with sleep quality among university students participating in a structured research program. Contrary to our hypothesis and the health promotion and prevention model — which suggests that engaging in health-supportive behaviors should protect against poor outcomes (Kia-Keating et al., 2011) — no significant correlations were found between sleep hygiene scores and objective sleep quality as measured by the MUSE-S headband. Thus, the null hypothesis is not rejected, suggesting that behavioral sleep hygiene does not influence sleep quality in this sample.
These findings must be interpreted in context. This study was conducted with a small, homogenous cohort from a single university program, limiting statistical power and variability in sleep hygiene behaviors. As such, the absence of a significant association does not necessarily indicate that sleep hygiene has no relationship with sleep quality; instead, it may reflect sampling limitations. Additionally, while the health promotion and prevention model would predict better sleep among individuals who engage in healthy sleep behaviors, the current results suggest that behavioral intentions or self-reported practices may not consistently translate into measurable physiological sleep outcomes in this population.
These findings should be understood in light of the broader public health context outlined in the introduction. As noted earlier, university students are experiencing rising rates of mental distress (Choudhry et al., 2016), and high-quality sleep is increasingly recognized as a protective factor for emotional well-being, cognitive functioning, and long-term mental health (Bodziony & Stetson, 2024; Palmer & Alfano, 2017). This study was designed to address the methodological gap in the literature by pairing a self-report sleep hygiene measure with the MUSE-S device in order to capture physiological sleep quality aligned with the NIMH’s RDoC framework (Michelini et. al., 2021). Although our hypothesis was not supported, the absence of a significant association between sleep hygiene and MUSE-S sleep score underscores the complexity of sleep as a health behavior and suggests that subjective perceptions of “good sleep habits” may not uniformly translate into measurable physiological benefits — at least within short observational periods among college students. Rather than contradicting the broader literature linking sleep and well-being, these findings may instead highlight the importance of both accurate self-monitoring and sufficient time for behavioral change to meaningfully influence biological sleep outcomes.
4.1Physiological Vs. Self-Report Measures
A key feature of this study was the integration of an older, self-report sleep hygiene questionnaire with modern wearable sleep technology. The discrepancy between these measures may be due to several factors. Self-reported sleep hygiene relies on perception, recall accuracy, and subjective interpretation of habits, which may not fully capture the consistency or quality of sleep behaviors. Participants may overestimate their adherence due to social desirability or misjudge the quality of their routines. In contrast, the MUSE-S provides continuous, objective physiological data, capturing sleep duration and quality moment-to-moment. Therefore, it is plausible that while participants believed they engaged in strong sleep hygiene practices, these behaviors were not sufficient to materially influence their physiological sleep outcomes. It is also possible that the components most strongly affecting sleep physiology (e.g., stress, caffeine timing, circadian rhythm stability) were not fully reflected in the self-report instrument used.
4.2Pre- and Post-Assessment Differences
While correlations across both pre- and post-assessments were non-significant, slight directional variation was observed, with sleep hygiene behaviors becoming more predictive of sleep quality at time 2 (Table 2). One potential explanation for these shifts is that, prior to the study, participants were not actively tracking or reflecting on their sleep habits, leading to less accurate or less intentional self-reporting. Participating in a week-long sleep study likely increased awareness of individual sleep behaviors, which may have either improved reporting accuracy or prompted participants to modify their behaviors in real time. In other words, being monitored may have influenced both perception and action — a “measurement reactivity” effect commonly observed in behavioral research. As such, the post-assessment correlations may capture more accurate self-monitoring and/or early behavior change attempts, even if those changes were not yet sufficient to produce measurable improvements in physiological sleep metrics.
4.2.1Broader Implications
Although this study did not find support for a protective relationship between sleep hygiene and sleep outcomes, it highlights the growing importance of integrating subjective and objective measures in behavioral health research. University students face unique stressors and irregular schedules, which may blunt the effects of even well-intentioned sleep hygiene behaviors. These findings may therefore encourage public health and campus wellness initiatives to move beyond education alone and incorporate structured sleep support interventions, such as behavioral coaching, stress-reduction programs, and more.
4.2.2Limitations
This study is limited by its small, program-specific sample, and the use of one self-report scale alongside one physiological metric. Additionally, sleep hygiene behaviors were not experimentally manipulated, meaning that causal conclusions cannot be drawn. Despite these limitations, the study demonstrates feasibility of wearable-integrated sleep research in undergraduate settings and highlights key methodological considerations for future work.
4.2.3Future Directions
Future research should recruit larger and more diverse student samples to improve generalizability and statistical power. Researchers may also benefit from incorporating multi-method sleep assessments, such as ecological momentary assessment, sleep diaries, or actigraphy, to bridge self-report and physiological measures. A novel next step would be to experimentally manipulate specific sleep hygiene behaviors — such as consistent wake times or evening screen-use reductions — to determine whether objective sleep improvements follow. If given the opportunity to extend this research, we would conduct a semester-long randomized intervention pairing behavioral sleep hygiene training with wearable feedback, allowing for real-time correction and assessment of sleep behavior change over time.