In this post, I briefly discuss another life metric from my log - stress score. I also share some interesting insights I have discovered so far.
Scientific Measures of Stress
The most common stress measurement methods fall under one of the following categories:
The psychological approach relies on self-assessment via questionnaires. The Perceived Stress Scale and Profile of Mood States are perhaps the most popular measures in research. Unfortunately, most of these questionnaires are lengthy and time-consuming. The results also tend to be subjective.
The chemical approach measures levels of stress hormones (cortisol, adrenaline) in saliva, blood, or sweat. Unfortunately, this approach tends to be cumbersome and requires special kits. It’s not suitable for continuous “on the go” tracking.
Finally, the biometric methods use vital signs (heart rate variability, breathing rate) as quantitative measures of stress. While the HRV-based stressed measurement is considered a gold standard, tracking HRV continuously in real time is extremely challenging. Most of the established health and fitness trackers measure HRV only during the sleep.
The respiratory rate is a less common objective metric of stress that can actually be captured continuously. The Spire tracker looks extremely promising in that regard, and I m am considering trying it out in the nearest future.
Tracking Stress in My Log
To track stress in my log, I use a visual analog scale with values ranging from -5 to 5:
It’s not ideal, but it does its job, quickly capturing stress levels at any given moment throughout the day. This is how my average daily stress levels looked like in 2019:
Some Interesting Insights from Daily Log Data
Since I track my stress levels throughtout the day, I can examine various temporal patterns. For example, I can create a heatmap that breaks down stress by days of the week and dayparts:
strheatmap<-daypartdata %>% select(wkday,daypart,stress) %>% group_by(wkday,daypart) %>% summarise(stress=mean(stress)) %>% ungroup() %>% mutate(wkday=factor(wkday,levels=c("Mon","Tue","Wed","Thu","Fri","Sat","Sun"))) ggplot(strheatmap,aes(x=wkday,y=daypart, fill = stress))+geom_tile()+ scale_fill_gradient(low="green", high="red")+ ggtitle("Average Stress by Weekday/Daypart")
According to this map, my evenings and Sundays tend to be relatively stress-free. Monday and Friday afternoons, on the other hand, tend to be more stressful.
I can also look at how situations affect my stress. I always thought that socialization makes me anxious. But the data tells otherwise:
> mod<-lm(stressdt~.,data=stressit) > > tidy(mod) # A tibble: 9 x 5 term estimate std.error statistic p.value <chr> <dbl> <dbl> <dbl> <dbl> 1 (Intercept) 0.0146 0.0126 1.16 0.245 2 active 0.0220 0.0135 1.63 0.103 3 passive -0.0304 0.0178 -1.71 0.0879 4 favorable -0.118 0.0193 -6.12 0.00000000117 5 unfavorable 0.260 0.0435 5.96 0.00000000304 6 social 0.0244 0.0167 1.46 0.143 7 solo -0.00149 0.0164 -0.0913 0.927 8 atypical 0.00590 0.0155 0.380 0.704 9 typical -0.0473 0.0153 -3.09 0.00206 >
As you can see, my stress is driven mostly by unfavorability of the situations. Social context does not have any impact whatsoever. I do, however, tend to be less stressed in typical and favorable situations, which should not come as a surprise.
Despite its subjective nature, my current stress metric works fine and I will continue using it in my logs until I find a more passive and objective alternative.