I've measured my training load, steps and positive/negative emotions to find out if physical activity increases my mood.
I've assessed my emotions using PANAS questionnaire, step count using Oura ring and training load using session RPE approach on a daily basis.
Physical activity significantly increases my positive emotions and decrease negative emotions. 1 hour of moderate intensity training / 10 000 steps is enough to get a valuable effect.
There is a some scientific evidence that exercise and intraday activity may increase mood.
The purpose of this observational data analysis (n=1) is to find if sRPE training load and steps can increase positive affect and decrease negative affect.
Adult male (n=1) anthropometrics was described in previous article
From 2020-09-19 to 2021-08-26 (294 days) daily training load (session RPE) and positive affect domain of PANAS was assessed.
Positive Affect of PANAS consists of 10 items with 5-point LikeRT, same for Negative Affect
Sum of 10 items defines the Positive Affect score, ranging from 10 to 50 which was used in analysis.
Physical activity was calculated by using sRPE approach, described here. In a short, a time duration and Rating of Perceived Exertion on a 10-item scale was assessed for each physical activity (walking, running, cycling etc) withing 10 minutes after cessation. Multiplication of RPE and duration is a sRPE score in arbitrary units. Sum of all activities sRPE scores for given day was used in analysis. Daily step count were measured by Oura ring and multiplied by 0.85. It is important to note that sRPE approach includes daily steps.
Subjective sleep quality, mood, depression, anxiety, stress, fatigue and sleepiness was assessed by a popular in scientific research questionnaires described in previous experiment
The data summary shown below
rpe (sRPE) in arbitrary units
Linear regression, Positive Affect
effect | p-adjusted | effect size | |
sRPE, m | 0.01032 | <0.0001* | moderate |
Steps | 0.000345 | <0.0001* | weak |
We can see a slope of 0.01 increase in Positive Affect scale for each additional 1 au of sRPE. Confidence for slope is very narrow [0.0104,0.0106] and effect size is Moderate.
Most of the days physical activity (sRPE) is about 110 au (median). 1 hour training with RPE score of 6 will add a 60 * 6 = 360 au of sRPE, which results in increasing Positive Affect by 360 * 0.01 = 3.6 points.
Also we can see a slope of 0.00034 increase in Positive Affect scale for each additional 1 step or a 0.34 for each 1000 steps. Confidence for slope is very narrow [0.000341 0.000348] and effect size is Weak.
Even with weak effect size, additional 3.4 Positive Affect points for 10 000 steps day seems to be valuable.
Linear regression, Negative Affect
effect | p-adjusted | effect size | |
sRPE, m | -0.0029 | <0.0008* | weak |
Steps | -0.000152 | <0.0001* | weak |
We can see a slope of 0.003 decrease in Negative Affect scale for each additional 1 au of sRPE. Confidence for slope is very narrow [-0.00298,-0.00287] and effect size is Weak.
Even with weak effect size, 1 hour training with RPE score of 6 will add a 60 * 6 = 360 au of sRPE, which results in decreasing Negative Affect by 360 * 0.003 = 1.1 points, which seems to be valueable.
Also we can see a slope of -0.000152 decrease in Negative Affect scale for each additional 1 step or a -0.15 for each 1000 steps. Confidence Interval for slope is very narrow
[-0.000154,-0.000150] and effect size is Weak.
Even with weak effect size, decrease by -1.5 in Negative Affect points for 10 000 steps day seems to be valuable.
The main result of this experiment is a statistically significant association between physical activity and positive/negative emotions with a moderate/weak effect sizes.
Increasing Positive Affect by 3-4 points by adding medium intensive training or getting 10 000 steps per day is seems to be a beneficial for general mood and happyness. My most positive days is PA from 33 to 36, average day is 29 - 30 and just 1 good training or a lot of walking during average day pushing my mood into most positive days. Same applies for Negative affect.
In conclusion, these results points me to keep my training load at high levels but at the same keeping eye in overtraining. In this paradigm, knowing how not to overtrain becomes very important. During non-training taking a 10k steps per day seems to be important.
Limitations:
Welcome for questions, suggestions and critics in comments below.
Data is fully available here
library(effectsize)
library(lubridate)
library(ggplot2)
ggplotRegression <- function (fit) {
require(ggplot2)
ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) +
geom_point() +
stat_smooth(method = "lm", col = "red") +
labs(title = paste("Adj R2 = ",signif(summary(fit)$adj.r.squared, 5),
"Intercept =",signif(fit$coef[[1]],5 ),
" Slope =",signif(fit$coef[[2]], 5),
" P =",signif(summary(fit)$coef[2,4], 5)))
}
tlpa <- read.csv("https://blog.kto.to/uploads/pa-na-rpe-sick-food-step-sauna-meditation.csv")
tlpa <- tlpa[!is.na(tlpa$`pa`),]
tlpa <- tlpa[!is.na(tlpa$`steps`),]
tlpa <- tlpa[!is.na(tlpa$`rpe`),]
summary(tlpa)
l <- lm(cbind(pa, na) ~ rpe, data=tlpa)
summary(anova(l))
s <- summary(l); s
interpret_r2(s$`Response pa`$adj.r.squared[1])
interpret_r2(s$`Response na`$adj.r.squared[1])
confint(l , level = 0.05)
l2 <- lm(cbind(pa, na) ~ steps, data=tlpa)
summary(anova(l2))
s2 <- summary(l2); s2
interpret_r2(s2$`Response pa`$adj.r.squared[1])
interpret_r2(s2$`Response na`$adj.r.squared[1])
confint(l2 , level = 0.05)
ggplotRegression(lm(pa ~ rpe, data=tlpa))
ggplotRegression(lm(na ~ rpe, data=tlpa))
ggplotRegression(lm(pa ~ steps, data=tlpa))
ggplotRegression(lm(na ~ steps, data=tlpa))
p.adjust(c(
s$`Response pa`$coefficients[,4][2],
s2$`Response pa`$coefficients[,4][2]), method="BH")
p.adjust(c(
s$`Response na`$coefficients[,4][2],
s2$`Response na`$coefficients[,4][2]), method="BH")Response pa :
Call:
lm(formula = pa ~ rpe, data = tlpa)
Residuals:
Min 1Q Median 3Q Max
-12.4210 -1.8578 0.5336 2.5439 6.5682
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 27.407285 0.314102 87.256 < 2e-16 ***
rpe 0.010327 0.001432 7.211 4.78e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.441 on 292 degrees of freedom
Multiple R-squared: 0.1512, Adjusted R-squared: 0.1483
F-statistic: 52 on 1 and 292 DF, p-value: 4.784e-12
Response na :
Call:
lm(formula = na ~ rpe, data = tlpa)
Residuals:
Min 1Q Median 3Q Max
-3.2189 -1.2638 -0.2921 0.9587 7.7486
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 10.3237482 0.1899149 54.36 < 2e-16 ***
rpe -0.0029268 0.0008659 -3.38 0.000823 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.081 on 292 degrees of freedom
Multiple R-squared: 0.03765, Adjusted R-squared: 0.03436
F-statistic: 11.43 on 1 and 292 DF, p-value: 0.0008232
> interpret_r2(s$`Response pa`$adj.r.squared[1])
[1] "moderate"
(Rules: cohen1988)
> interpret_r2(s$`Response na`$adj.r.squared[1])
[1] "weak"
(Rules: cohen1988)
> confint(l , level = 0.05)
47.5 % 52.5 %
pa:(Intercept) 27.387571327 27.426997900
pa:rpe 0.010236981 0.010416739
na:(Intercept) 10.311828971 10.335667352
na:rpe -0.002981136 -0.002872449
Response pa :
Call:
lm(formula = pa ~ steps, data = tlpa)
Residuals:
Min 1Q Median 3Q Max
-12.0922 -2.0026 0.4722 2.7355 7.2354
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.620e+01 5.230e-01 50.101 < 2e-16 ***
steps 3.449e-04 5.632e-05 6.124 2.95e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.516 on 292 degrees of freedom
Multiple R-squared: 0.1138, Adjusted R-squared: 0.1108
F-statistic: 37.5 on 1 and 292 DF, p-value: 2.946e-09
Response na :
Call:
lm(formula = na ~ steps, data = tlpa)
Residuals:
Min 1Q Median 3Q Max
-3.5856 -1.4795 -0.3122 1.0827 7.2452
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.113e+01 3.044e-01 36.564 < 2e-16 ***
steps -1.523e-04 3.278e-05 -4.646 5.12e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.047 on 292 degrees of freedom
Multiple R-squared: 0.06885, Adjusted R-squared: 0.06566
F-statistic: 21.59 on 1 and 292 DF, p-value: 5.117e-06
> interpret_r2(s2$`Response pa`$adj.r.squared[1])
[1] "weak"
(Rules: cohen1988)
> interpret_r2(s2$`Response na`$adj.r.squared[1])
[1] "weak"
(Rules: cohen1988)
> confint(l2 , level = 0.05)
47.5 % 52.5 %
pa:(Intercept) 26.1705630993 26.2362117240
pa:steps 0.0003413584 0.0003484280
na:(Intercept) 11.1120868616 11.1502995095
na:steps -0.0001543843 -0.0001502692
>
> p.adjust(c(
+ s$`Response pa`$coefficients[,4][2],
+ s2$`Response pa`$coefficients[,4][2]), method="BH")
rpe steps
9.568641e-12 2.945706e-09
>
>
> p.adjust(c(
+ s$`Response na`$coefficients[,4][2],
+ s2$`Response na`$coefficients[,4][2]), method="BH")
rpe steps
8.231683e-04 1.023378e-05
RStudio version 1.3.959 and R version 4.0.2 was user for a simple linear regression model and to calculate slopes and p-values.
P-adjusted is p-value adjusted for multiple comparisons by method of Benjamini, Hochberg, and Yekutieli.
Effect sizes based on adjusted R2, Cohen's 1988 rules