this is a more detailed description and run-through of the workflow combining Directed Acyclical Graphs (DAG) and Bayesian analysis for Ecological Momentary Assessment (EMA) data presented at the SAA 2025 in Leuven
(1) Estimand: how does mood affect craving
Teasing apart the effect of mood and stress on craving is difficult. We will try to isolate this relation better with the help of DAGs and Bayesian analysis.
(2) Derivation of DAG from previous research and theory
A stressor leads to 1) physiological reactions (including the endocrine and nervous system, especially the hypothalamic-pituitary-adrenal (HPA) axis (McEwen, 2007) cardiovascular system (Brotman et al., 2007); gastro-intestinal system (Bonaz, 2016), 2) the individual’s experience of how “stressful” they perceived this event to be (Roxburgh, 2011), and 3) constraints on the individual’s daily patterns (e.g. work stress limiting the time to eat; (Almeida et al., 2009; O’Connor et al., 2008)). The kind of stressor we are concerned with here is often referred to as daily hassles but also expands to chronic strains as opposed to significant life events (Roxburgh, 2011). Moreover, we only consider negative stress (distress), as opposed to positive (eustress) or neutral (neustress) kinds of stressors. Through the individual’s experience of the stressful event, the stressor affects their mood. In particular, the mood should shift more to the negative due to a stressful event, this may include elements like anger, frustration, fear (Van Eck et al., 1998). While this connection exists on the momentary level, it is moderated by an individual’s trait tendency to experience stressors in a certain way, such as their coping resources (Roxburgh, 2011) Naturally, negative mood is not only governed by experience of stressors, but also by other non-stressful events and internal states. We do not observe them in this study, which is why they are denoted as “unobserved (U)”. The physiological stressor-reaction also involves a temporary downregulation of hunger-sensation (Theilade et al., 2021). Mood also drives physiological activation. A more readily measurable correlate of endocrine activation may be the subjective energetic arousal, measurable with EMA tools. Crucially, mood has effects on eating-related variables: Positive and/or negative mood may increase craving (Aulbach et al., 2025). This momentary relationship is moderated by an individual’s trait tendency to crave more when experiencing certain moods or emotions (Meule et al., 2018). In addition, negative mood affects hunger sensation (Swami et al., 2022). Hunger itself – or what individuals report as hunger – is related to craving since the hunger-sensation and craving are difficult to discern but also because the bodily hunger-signals trigger learned responses to seek satisfying foods (Ombrato & Phillips, 2021; Stevenson et al., 2024).
the resulting DAG
back-door paths
what do we want to learn? The relation between mood and
craving, independently of stress.
However, there are back-door paths connecting craving with mood. We need
to close these. Following the arrows in the DAG, we can identify the
following back-door paths:
1) Mood <- PeS -> Craving;
2) Mood <- PeS <- PhS -> Hunger -> Craving;
3) Mood <- PeS -> Stressor -> PhS -> Hunger ->
Craving;
4) Mood <- PeS <- Stressor -> PhS -> PeS ->
Craving.
Conditioning on PeS + Hunger closes the back-door paths. We choose this option since the subjective stress-experience, PeS, is reported by the subjects. PhS on the other hand was not measured and is therefore no option.
(3) Generating simulated data based on Structural Causal Model
Variables:
V = {Stressor, PeS, PhS, Mood, Craving, Hunger}
unobserved variables:
U = {USt, UPeS, UPhS,UM,UC, UH}
Functions:
F = {fSt,fPeS, fPhS, fM, fC, fH}
fStressor: Stressor = USt
fPhS: PhS = UPhS + b * Stressor + f * Mood
fPeS: PeS = UPeS + a * Stressor + c * PhS
fMood: Mood = UM + d * PeS fHunger: Hunger = UH + h * PhS
fCraving: Craving = UC + e * PeS + i * Hunger + g * Mood
with this generative model, we can simluate data in R
setting up R
#the libraries we need
library(extraDistr)
library(brms)
library(rstan)
library(ggplot2)
library(gridExtra)
# some STAN settings
options(mc.cores = parallel::detectCores())
rstan_options(auto_write = TRUE)
unobserved causes / exogenous variables
weights / paths
sings and therefore direction of effect set here (see the DAG)
endogenous variables
calculated based on the functions above
#fStressor:
Stressor = UStressor
#fPeS:
PeS = UPeS + a * Stressor # + c * PhS
#fMood:
Mood = UMood + d * PeS
#fPhS:
PhS = UPhS + b * Stressor + f * Mood
#PeS - adding PhS after calculating it (needed to first calculate mood)
PeS = PeS + c* PhS
#fHunger:
Hunger = UHunger + h * PhS
#fCraving:
Craving = UCraving + e * PeS + i * Hunger + g * Mood
checking whether the values are in an expected range
## [1] 0.33
## [1] 0.4725816
## [1] -2.668895
## [1] 6.372154
## [1] -1.34623
## [1] 3.093578
## [1] -1.598449
## [1] 3.220808
## [1] 9.168833
## [1] 23.79071
rescaling variables to be between 0 and 100, in line with our collected EMA data
smallest = min(c(Stressor,PeS, PhS, Hunger, Craving, Mood))
largest = max(c(Stressor,PeS, PhS, Hunger, Craving, Mood))
Stressor_r = (Stressor - smallest) / (largest - smallest) * 100
PeS_r = (PeS - smallest) / (largest - smallest) * 100
PhS_r = (PhS - smallest) / (largest - smallest) * 100
Mood_r = (Mood - smallest) / (largest - smallest) * 100
Craving_r = (Craving - smallest) / (largest - smallest) * 100
Hunger_r = (Hunger - smallest) / (largest - smallest) * 100
putting together the variables in a dataframe
DFs = data.frame(Stressor=Stressor,PeS=PeS,PhS=PhS,Mood=Mood,Craving=Craving,Hunger=Hunger,
UStressor=UStressor, UPeS=UPeS, UPhS=UPhS, UMood=UMood, UCraving=UCraving,
Stressor_r=Stressor_r,PeS_r=PeS_r,PhS_r=PhS_r,Mood_r=Mood_r,Craving_r=Craving_r,Hunger_r=Hunger_r,
UStressor=UStressor, UPeS=UPeS, UPhS=UPhS, UMood=UMood, UCraving=UCraving,
a=a,b=b,c=c,d=d,e=e,f=f,g=g,h=h,i=i)
(4) Creating statistical model and testing it on simulated data
finding sensible priors
first, plotting the simulated data, to get a feeling for the range of to-be-expected values
#simple plot:
#ggplot(DFs,aes(x=Craving_r))+geom_density()+theme_light()
#plot with quantiles:
dens <- density(DFs$Craving_r)
temp <- data.frame(x=dens$x, y=dens$y)
probs <- c(0, 0.25, 0.5, 0.75, 1)
quantiles <- quantile(DFs$Craving_r, prob=probs)
temp$quant <- factor(findInterval(temp$x,quantiles))
ggplot(temp, aes(x,y)) + geom_line() + geom_ribbon(aes(ymin=0, ymax=y, fill=quant)) + scale_fill_brewer()+labs(title="Density of craving, with quantiles shaded in")+theme_light()
-> prior of Normal(mean = 50, SD = 25) would describe that well
formulating priors according to brms synatx
## prior class coef group resp dpar nlpar lb ub
## (flat) b
## (flat) b Mood
## (flat) b PeS
## student_t(3, 42.6, 22.4) Intercept
## student_t(3, 0, 22.4) sigma 0
## source
## default
## (vectorized)
## (vectorized)
## default
## default
Bayesian model
- for unconditioned model, just M –> C
bm1s = brm(Craving_r ~ Mood_r, prior = priors, data=DFs, iter=2000,file_refit="on_change",file = "bm1s_ESENa")
summary(bm1s,prob=0.9)
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: Craving_r ~ Mood_r
## Data: DFs (Number of observations: 100)
## Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
## total post-warmup draws = 4000
##
## Population-Level Effects:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## Intercept 265.79 12.74 245.21 287.12 1.00 3957 2907
## Mood_r -6.47 0.37 -7.09 -5.87 1.00 3962 2990
##
## Family Specific Parameters:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## sigma 10.87 0.81 9.66 12.30 1.00 3650 2743
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
- conditioning on PeS and Hunger, as planned by analysing the DAG
bm2s = brm(Craving_r ~ Mood_r + PeS_r + Hunger_r, prior = priors, data=DFs, iter=2000,file_refit="on_change",file = "bm2s_ESENa")
summary(bm2s,prob=0.9)
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: Craving_r ~ Mood_r + PeS_r + Hunger_r
## Data: DFs (Number of observations: 100)
## Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
## total post-warmup draws = 4000
##
## Population-Level Effects:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## Intercept -57.61 5.91 -67.33 -47.80 1.00 2525 2322
## Mood_r 1.43 0.08 1.30 1.56 1.00 2915 2271
## PeS_r -1.64 0.07 -1.75 -1.52 1.00 2579 2207
## Hunger_r 2.81 0.07 2.69 2.93 1.00 2479 2239
##
## Family Specific Parameters:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## sigma 0.92 0.07 0.82 1.03 1.00 3045 2323
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
-> the simulated value of Mood is recovered well -> the priors work well
Fitting model to collected data
Loading empirical data
The data is already preprocessed. Since it is still unpublished, I can not share it yet - apologies for that!
## X ID signal date PeS Stressor mood craving hunger
## 1 1 BURI1006 1 2025-02-26 08:33:31 14 1 65.00000 20 20
## 2 2 BURI1006 2 2025-02-26 11:00:21 30 1 77.16667 27 16
## 3 3 BURI1006 3 2025-02-26 13:35:12 79 1 67.00000 31 15
## 4 4 BURI1006 4 2025-02-26 16:00:17 80 1 62.66667 63 19
## 5 5 BURI1006 5 2025-02-26 18:41:15 58 1 66.83333 25 12
## 6 6 BURI1006 6 2025-02-26 21:35:32 63 1 64.66667 16 13
brief descriptives
##
## AEMR0604 AGDM0608 AGUR0711 AKMC1108 ANFB0306 ANMN1211 ATMR0905 AYOR0906
## 168 168 168 168 185 168 168 168
## BRJR1202 BRMR0506 BURI1006 CAMC0209 CRAD0809 CRBR1102 CRDE1205 CRJS0211
## 168 168 168 168 168 168 168 168
## CRMC0706 DRGR0605 DRPT0203 EABÖ0805 EgEg0609 EKAD0104 FTMH0710 GBJR1007
## 168 168 168 168 168 168 168 168
## GRKR0901 GSMC0205 HIHI1107 HISE1109 HITB0705 HTHL0209 JDJC0807 JSEW0806
## 168 168 168 168 168 168 168 168
## KRBR0104 KRTO0601 KTMR0603 LRVT0204 MAJO27 MCMN0212 MNDE0606 MNHR0409
## 168 168 168 168 168 168 168 168
## MNKR0506 MNWL0907 MRAO0309 MRDM0209 MRKR0212 MRNK1011 MRPT0412 NNJR1108
## 168 168 162 168 168 168 168 168
## PLHL1109 PTRL0202 RNGR0808 SAMA0601 SBPT0509 SLEW0810 SLHR1002 SLMR0201
## 168 160 168 168 168 146 130 168
## SLRB0105 SLSE0710 SSCR0206 SSFA0902 SSJR0206 SSPT0405 SSTO0508 TNAD0712
## 168 168 168 168 168 168 160 168
## TUHN0307 UERL0203 URSE0104 VRMC08
## 168 168 168 148
## [1] 68
fitting model
simple fixed effects model
bm1 = brm(craving ~ mood, prior = priors, data=DF,
iter=2000,file_refit="on_change",file = "bm1_ESENa")
## Warning: Rows containing NAs were excluded from the model.
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: craving ~ mood
## Data: DF (Number of observations: 9787)
## Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
## total post-warmup draws = 4000
##
## Population-Level Effects:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## Intercept 38.52 1.11 36.68 40.33 1.00 3836 3116
## mood -0.15 0.02 -0.18 -0.12 1.00 3921 3077
##
## Family Specific Parameters:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## sigma 28.95 0.21 28.60 29.29 1.00 4187 2547
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
bm2 = brm(craving ~ mood + PeS + hunger, prior = priors, data=DF,
iter=2000,file_refit="on_change",file = "bm2_ESENa")
## Warning: Rows containing NAs were excluded from the model.
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: craving ~ mood + PeS + hunger
## Data: DF (Number of observations: 9787)
## Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
## total post-warmup draws = 4000
##
## Population-Level Effects:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## Intercept 8.260 1.326 6.039 10.411 1.001 3623 2519
## mood -0.004 0.017 -0.031 0.024 1.001 3703 3071
## PeS 0.101 0.011 0.083 0.120 1.000 3610 3073
## hunger 0.593 0.009 0.578 0.607 1.001 5030 2452
##
## Family Specific Parameters:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## sigma 23.340 0.167 23.066 23.612 1.001 4447 3159
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
plot model
conditional effects for fixed effects model
cond_effs_bm1=conditional_effects(bm1,
effects="mood",int_conditions=seq(0,100,1),
#spaghetti = T,
ndraws = 60,
prob=0.9,
re_formula = NA)
CE_DF_bm1 = cond_effs_bm1[["mood"]]
p1 = ggplot(CE_DF_bm1, aes(x = mood, y = estimate__)) +
geom_ribbon(aes(ymin = lower__, ymax = upper__),alpha = 0.15,fill = "steelblue") +
geom_line(linewidth = 3,colour="firebrick") +
labs(x = "Mood",y = "Craving") + # title = "Conditional effect of mood on craving"
ylim(c(20,40))+
theme_light()
cond_effs_bm2=conditional_effects(bm2,
effects="mood",int_conditions=seq(0,100,1),
#spaghetti = T,
ndraws = 60,
prob=0.9,
re_formula = NA)
CE_DF_bm2 = cond_effs_bm2[["mood"]]
p2 = ggplot(CE_DF_bm2, aes(x = mood, y = estimate__)) +
geom_ribbon(aes(ymin = lower__, ymax = upper__),alpha = 0.15,fill = "steelblue" ) +
geom_line(linewidth = 3,colour="firebrick") +
labs(x = "Mood",y = "Craving") + #title = "Conditional effect of mood on craving"
ylim(c(20,40))+
theme_light()
p = grid.arrange(p1,p2,
nrow=1,ncol=2)
with grouped effects
first adding to the priors
## Warning: Rows containing NAs were excluded from the model.
## prior class coef group resp dpar nlpar lb ub
## (flat) b
## (flat) b mood
## student_t(3, 20, 29.7) Intercept
## student_t(3, 0, 29.7) sd 0
## student_t(3, 0, 29.7) sd ID 0
## student_t(3, 0, 29.7) sd Intercept ID 0
## student_t(3, 0, 29.7) sigma 0
## source
## default
## (vectorized)
## default
## default
## (vectorized)
## (vectorized)
## default
## prior class coef group resp dpar nlpar lb ub source
## normal(50, 25) Intercept <NA> <NA> user
## normal(0, 10) b <NA> <NA> user
## cauchy(0, 10) sigma <NA> <NA> user
## cauchy(0, 10) sd <NA> <NA> user
then fitting the model using the additional prior for the variance between the intercepts.
bm3 = brm(craving ~ mood + (1|ID), prior = priors_var_interc,
data=DF, iter=2000,file_refit="on_change",file = "bm3_ESENa")
## Warning: Rows containing NAs were excluded from the model.
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: craving ~ mood + (1 | ID)
## Data: DF (Number of observations: 9787)
## Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
## total post-warmup draws = 4000
##
## Group-Level Effects:
## ~ID (Number of levels: 68)
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## sd(Intercept) 15.563 1.321 13.565 17.869 1.020 322 576
##
## Population-Level Effects:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## Intercept 30.347 2.129 26.817 33.848 1.008 250 617
## mood -0.016 0.018 -0.046 0.013 1.000 3639 2982
##
## Family Specific Parameters:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## sigma 24.433 0.181 24.135 24.734 1.002 4589 2471
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
bm4 = brm(craving ~ mood + PeS + hunger + (1|ID), prior = priors_var_interc,
data=DF, iter=2000,file_refit="on_change",file = "bm4_ESENa")
## Warning: Rows containing NAs were excluded from the model.
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: craving ~ mood + PeS + hunger + (1 | ID)
## Data: DF (Number of observations: 9787)
## Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
## total post-warmup draws = 4000
##
## Group-Level Effects:
## ~ID (Number of levels: 68)
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## sd(Intercept) 12.111 1.045 10.501 13.952 1.014 242 470
##
## Population-Level Effects:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## Intercept 11.637 1.929 8.386 14.801 1.010 248 923
## mood 0.002 0.017 -0.026 0.031 1.002 3408 3011
## PeS 0.031 0.011 0.013 0.049 1.000 3320 2679
## hunger 0.546 0.008 0.532 0.559 1.000 4211 3113
##
## Family Specific Parameters:
## Estimate Est.Error l-90% CI u-90% CI Rhat Bulk_ESS Tail_ESS
## sigma 20.242 0.147 20.007 20.490 1.001 5772 2507
##
## Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
## and Tail_ESS are effective sample size measures, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
-> same direction as with fixed effect only smaller magnitude
plotting conditional effects for both
cond_effs_bm3=conditional_effects(bm3,
effects="mood",int_conditions=seq(0,100,1),
#spaghetti = T,
ndraws = 60,
#prob=0.9,
re_formula = NULL)
CE_DF = cond_effs_bm3[["mood"]]
ggplot(CE_DF, aes(x = mood, y = estimate__)) +
geom_ribbon(aes(ymin = lower__, ymax = upper__),alpha = 0.15,fill = "steelblue" ) +
geom_line(linewidth = 3,colour="firebrick") +
labs(x = "Mood",y = "Craving",
title = "Conditional effect of mood on craving") +
theme_light()
cond_effs_bm4=conditional_effects(bm4,
effects="mood",int_conditions=seq(0,100,1),
#spaghetti = T,
ndraws = 60,
prob=0.9,
re_formula = NULL)
CE_DF = cond_effs_bm4[["mood"]]
ggplot(CE_DF, aes(x = mood, y = estimate__)) +
geom_ribbon(aes(ymin = lower__, ymax = upper__),alpha = 0.15,fill = "steelblue" ) +
geom_line(linewidth = 3,colour="firebrick") +
labs(x = "Mood",y = "Craving",
title = "Conditional effect of mood on craving") +
theme_light()
So much for the Bayesian analysis with brms in R.
(6) Revise DAG and reuse
Given the small coefficient of mood when accounting for other causes, it is worth considering whether there should be a path from mood to craving. It is possible that the effect we see when not conditioning on other causes is actually due to other variables (e.g. PeS). This could be a starting point for further analyses and future experiments.
The updated DAG can be used for further analyses: e.g. What is the effect of hunger on craving, controlling for other causes?
Furthermore, future analyses can use more informed priors. For instance, the prior for fixed effects was relatively broad. Based on the small coefficients, this expectation can be updated by reducing the standard deviation of the Normal prior for the fixed effects coefficients.
Wrap up
Feel free to contact me with any questions, comments and corrections.
## R version 4.3.1 (2023-06-16 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19045)
##
## Matrix products: default
##
##
## locale:
## [1] LC_COLLATE=German_Austria.utf8 LC_CTYPE=German_Austria.utf8
## [3] LC_MONETARY=German_Austria.utf8 LC_NUMERIC=C
## [5] LC_TIME=German_Austria.utf8
##
## time zone: Europe/Vienna
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] gridExtra_2.3 ggplot2_3.5.0 rstan_2.32.5 StanHeaders_2.32.5
## [5] brms_2.20.4 Rcpp_1.0.12 extraDistr_1.10.0
##
## loaded via a namespace (and not attached):
## [1] tidyselect_1.2.1 farver_2.1.1 dplyr_1.1.4
## [4] loo_2.7.0 fastmap_1.1.1 tensorA_0.36.2.1
## [7] shinystan_2.6.0 promises_1.2.1 shinyjs_2.1.0
## [10] digest_0.6.34 estimability_1.5.1 mime_0.12
## [13] lifecycle_1.0.4 ellipsis_0.3.2 magrittr_2.0.3
## [16] posterior_1.5.0 compiler_4.3.1 rlang_1.1.3
## [19] sass_0.4.9 tools_4.3.1 igraph_2.0.3
## [22] utf8_1.2.4 yaml_2.3.8 knitr_1.45
## [25] labeling_0.4.3 bridgesampling_1.1-2 htmlwidgets_1.6.4
## [28] pkgbuild_1.4.4 RColorBrewer_1.1-3 plyr_1.8.9
## [31] dygraphs_1.1.1.6 abind_1.4-5 miniUI_0.1.1.1
## [34] withr_3.0.0 grid_4.3.1 stats4_4.3.1
## [37] fansi_1.0.6 xts_0.13.2 xtable_1.8-4
## [40] colorspace_2.1-0 inline_0.3.19 emmeans_1.10.3
## [43] scales_1.3.0 gtools_3.9.5 cli_3.6.2
## [46] mvtnorm_1.2-4 rmarkdown_2.26 generics_0.1.3
## [49] RcppParallel_5.1.7 rstudioapi_0.15.0 reshape2_1.4.4
## [52] cachem_1.0.8 stringr_1.5.1 shinythemes_1.2.0
## [55] bayesplot_1.11.1 parallel_4.3.1 matrixStats_1.2.0
## [58] base64enc_0.1-3 vctrs_0.6.5 Matrix_1.6-5
## [61] jsonlite_1.8.8 crosstalk_1.2.1 jquerylib_0.1.4
## [64] glue_1.7.0 codetools_0.2-19 DT_0.32
## [67] distributional_0.4.0 stringi_1.8.3 gtable_0.3.4
## [70] later_1.3.2 QuickJSR_1.1.3 munsell_0.5.1
## [73] tibble_3.2.1 colourpicker_1.3.0 pillar_1.9.0
## [76] htmltools_0.5.7 Brobdingnag_1.2-9 R6_2.5.1
## [79] evaluate_0.23 shiny_1.8.0 lattice_0.21-8
## [82] highr_0.10 markdown_1.12 backports_1.4.1
## [85] threejs_0.3.3 httpuv_1.6.14 bslib_0.6.1
## [88] rstantools_2.4.0 coda_0.19-4.1 nlme_3.1-162
## [91] checkmate_2.3.1 xfun_0.42 zoo_1.8-12
## [94] prettydoc_0.4.1 pkgconfig_2.0.3
References:
Almeida, D. M., McGonagle, K., & King, H. (2009). Assessing Daily Stress Processes in Social Surveys by Combining Stressor Exposure and Salivary Cortisol. Biodemography and Social Biology, 55(2), 219–237. https://doi.org/10.1080/19485560903382338
Aulbach, M. B., Bamberg, C., Reichenberger, J., Arend, A.-K., & Blechert, J. (2025). Bidirectional associations between affect and food craving within and between individuals: A mega-analysis. Appetite, 209, 107936. https://doi.org/10.1016/j.appet.2025.107936
Bonaz, B. (2016). Stress and the Gastrointestinal System. In C. Constantinescu, R. Arsenescu, & V. Arsenescu (Eds.), Neuro-Immuno-Gastroenterology (pp. 123–156). Springer International Publishing. https://doi.org/10.1007/978-3-319-28609-9_7
Brotman, D. J., Golden, S. H., & Wittstein, I. S. (2007). The cardiovascular toll of stress. The Lancet, 370(9592), 1089–1100. https://doi.org/10.1016/S0140-6736(07)61305-1
McEwen, B. S. (2007). Physiology and Neurobiology of Stress and Adaptation: Central Role of the Brain. Physiological Reviews, 87(3), 873–904. https://doi.org/10.1152/physrev.00041.2006
Meule, A., Reichenberger, J., & Blechert, J. (2018). Development and Preliminary Validation of the Salzburg Emotional Eating Scale. Frontiers in Psychology, 9, 88. https://doi.org/10.3389/fpsyg.2018.00088
O’Connor, D. B., Jones, F., Conner, M., McMillan, B., & Ferguson, E. (2008). Effects of daily hassles and eating style on eating behavior. Health Psychology, 27(1, Suppl), S20–S31. https://doi.org/10.1037/0278-6133.27.1.S20
Ombrato, M. D., & Phillips, E. (2021). The Mind of the Hungry Agent: Hunger, Affect and Appetite. Topoi, 40(3), 517–526. https://doi.org/10.1007/s11245-020-09733-y
Roxburgh, S. (2011). Stressors and experienced stress. The Sage Handbook of Mental Health and Illness, 147–178.
Stevenson, R. J., Yeomans, M. R., & Francis, H. M. (2024). Human hunger as a memory process. Psychological Review, 131(1), 174–193. https://doi.org/10.1037/rev0000413
Swami, V., Hochstöger, S., Kargl, E., & Stieger, S. (2022). Hangry in the field: An experience sampling study on the impact of hunger on anger, irritability, and affect. PLOS ONE, 17(7), e0269629. https://doi.org/10.1371/journal.pone.0269629
Theilade, S., Christensen, M. B., Vilsbøll, T., & Knop, F. K. (2021). An overview of obesity mechanisms in humans: Endocrine regulation of food intake, eating behaviour and common determinants of body weight. Diabetes, Obesity and Metabolism, 23(S1), 17–35. https://doi.org/10.1111/dom.14270
Van Eck, M., Nicolson, N. A., & Berkhof, J. (1998). Effects of stressful daily events on mood states: Relationship to global perceived stress. Journal of Personality and Social Psychology, 75(6), 1572–1585. https://doi.org/10.1037/0022-3514.75.6.1572