Aaron and I met with Avi to talk about the issues we were having with multiple comparisons. He suggested that Aaron re-process the data using 8 larger regions instead of 41 smaller regions. Avi gave guidance regarding brain region selection, and then I applied a Manova and Anova to look for differences in brain response on Day 2 vs. Day 1 for the control population. After looking at the control population, I apply a very similar approach to looking for differences between the diabetic population and the control population on Day 1.
I performed a manova and anova to look for significant areas of response. We see that there is a significant difference between Day 1 and Day 2 response for ALL regions, and that the thalamus responds to the changing glucose level. Bonferroni says we should look for p < 0.00625. I controlled for repeated measures for individuals by including patient ID as a random effect.
dependent.vars<-as.matrix(df_practice[,5:13])
summary(manova(dependent.vars~df_practice$Glucose.level*df_practice$Day))
## Df Pillai approx F num Df
## df_practice$Glucose.level 1 0.40584 5.3884 9
## df_practice$Day 1 0.38473 4.9329 9
## df_practice$Glucose.level:df_practice$Day 1 0.10544 0.9298 9
## Residuals 79
## den Df Pr(>F)
## df_practice$Glucose.level 71 1.314e-05 ***
## df_practice$Day 71 3.815e-05 ***
## df_practice$Glucose.level:df_practice$Day 71 0.505
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod2<-aov(dependent.vars~Glucose.level*Day, data = df_practice) #no repeated measures effect accounted for
mod1<-aov(dependent.vars~Glucose.level*Day + Error(X), data = df_practice) #accounting for repeated measures in participants with Error term
summary(mod1)
##
## Error: X
## Response Frontal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 515.1 515.08 0.4514 0.5206
## Day 1 1104.0 1104.04 0.9676 0.3541
## Glucose.level:Day 1 71.1 71.13 0.0623 0.8091
## Residuals 8 9127.8 1140.98
##
## Response OrbitalFrontal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 44.9 44.88 0.0351 0.8560
## Day 1 390.8 390.84 0.3057 0.5954
## Glucose.level:Day 1 176.3 176.29 0.1379 0.7200
## Residuals 8 10227.8 1278.48
##
## Response Motor :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 710.6 710.59 0.6000 0.4609
## Day 1 457.7 457.71 0.3864 0.5515
## Glucose.level:Day 1 1.9 1.91 0.0016 0.9690
## Residuals 8 9475.2 1184.40
##
## Response Parietal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 353.2 353.22 0.3398 0.5760
## Day 1 815.3 815.27 0.7842 0.4017
## Glucose.level:Day 1 123.1 123.06 0.1184 0.7397
## Residuals 8 8316.7 1039.58
##
## Response Temporal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 711.9 711.86 0.9410 0.3604
## Day 1 581.8 581.81 0.7691 0.4061
## Glucose.level:Day 1 4.6 4.61 0.0061 0.9397
## Residuals 8 6051.8 756.48
##
## Response Occipital :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 1567.9 1567.92 1.3269 0.2826
## Day 1 750.1 750.10 0.6348 0.4486
## Glucose.level:Day 1 12.3 12.28 0.0104 0.9213
## Residuals 8 9453.3 1181.66
##
## Response BasalGanglia :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 29.5 29.45 0.0345 0.8573
## Day 1 661.7 661.68 0.7749 0.4044
## Glucose.level:Day 1 226.4 226.37 0.2651 0.6205
## Residuals 8 6830.8 853.86
##
## Response Thalamus :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 48.3 48.30 0.0274 0.8726
## Day 1 1489.6 1489.59 0.8448 0.3849
## Glucose.level:Day 1 45.3 45.35 0.0257 0.8766
## Residuals 8 14105.5 1763.19
##
## Response InsulaAndAmygdala :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 1899.1 1899.05 3.3900 0.1029
## Day 1 154.7 154.69 0.2761 0.6135
## Glucose.level:Day 1 7.9 7.88 0.0141 0.9085
## Residuals 8 4481.6 560.20
##
##
## Error: Within
## Response Frontal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 166.43 166.43 5.2059 0.02565 *
## Day 1 2533.83 2533.83 79.2554 5.062e-13 ***
## Glucose.level:Day 1 4.09 4.09 0.1278 0.72181
## Residuals 68 2173.99 31.97
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response OrbitalFrontal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 118.90 118.90 3.8667 0.05334 .
## Day 1 1997.45 1997.45 64.9568 1.708e-11 ***
## Glucose.level:Day 1 0.28 0.28 0.0092 0.92404
## Residuals 68 2091.02 30.75
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Motor :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 3.48 3.48 0.1024 0.7500
## Day 1 2776.98 2776.98 81.8007 2.807e-13 ***
## Glucose.level:Day 1 0.16 0.16 0.0047 0.9456
## Residuals 68 2308.47 33.95
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Parietal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 0.3 0.3 0.0078 0.93001
## Day 1 3504.5 3504.5 94.1295 1.853e-14 ***
## Glucose.level:Day 1 128.8 128.8 3.4584 0.06726 .
## Residuals 68 2531.7 37.2
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Temporal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 41.58 41.58 1.4907 0.2263
## Day 1 1723.70 1723.70 61.7945 3.92e-11 ***
## Glucose.level:Day 1 7.09 7.09 0.2542 0.6158
## Residuals 68 1896.80 27.89
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Occipital :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 38.3 38.29 0.7676 0.3840
## Day 1 2664.3 2664.30 53.4148 3.934e-10 ***
## Glucose.level:Day 1 0.7 0.65 0.0130 0.9094
## Residuals 68 3391.8 49.88
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response BasalGanglia :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 680.14 680.14 26.7162 2.245e-06 ***
## Day 1 1306.79 1306.79 51.3313 7.162e-10 ***
## Glucose.level:Day 1 1.43 1.43 0.0563 0.8132
## Residuals 68 1731.14 25.46
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Thalamus :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 3059.3 3059.34 33.1284 2.260e-07 ***
## Day 1 2694.4 2694.37 29.1763 9.124e-07 ***
## Glucose.level:Day 1 4.6 4.56 0.0493 0.8249
## Residuals 68 6279.7 92.35
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response InsulaAndAmygdala :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 21.0 20.99 0.3879 0.5355
## Day 1 1205.3 1205.31 22.2720 1.222e-05 ***
## Glucose.level:Day 1 2.2 2.16 0.0399 0.8423
## Residuals 68 3680.0 54.12
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
I know John was concerned about the appropriateness of a normality assumption, so here is the Q-Q plot. It’s not perfect (particularly in the upper righthand corner), but I think it’s probably ok.
Just to be safe, I also applied a permutation test. The results come out basically the same.
library(lmPerm)
mod2<-aovp(dependent.vars~df_practice$Glucose.level*df_practice$Day, perm = "Prob") #bonferroni threshold is <0.00625
## [1] "Settings: unique SS : numeric variables centered"
summary(mod2)
## Response Frontal :
## Df R Sum Sq R Mean Sq Iter
## df_practice$Glucose.level 1 136.5 136.5 131
## df_practice$Day 1 3508.8 3508.8 5000
## df_practice$Glucose.level:df_practice$Day 1 2.6 2.6 51
## Residuals 79 12053.0 152.6
## Pr(Prob)
## df_practice$Glucose.level 0.4351
## df_practice$Day <2e-16 ***
## df_practice$Glucose.level:df_practice$Day 0.9412
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response OrbitalFrontal :
## Df R Sum Sq R Mean Sq Iter
## df_practice$Glucose.level 1 112.7 112.70 349
## df_practice$Day 1 2385.1 2385.09 5000
## df_practice$Glucose.level:df_practice$Day 1 0.1 0.09 51
## Residuals 79 12552.5 158.89
## Pr(Prob)
## df_practice$Glucose.level 0.2235
## df_practice$Day <2e-16 ***
## df_practice$Glucose.level:df_practice$Day 1.0000
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Motor :
## Df R Sum Sq R Mean Sq Iter
## df_practice$Glucose.level 1 0.2 0.2 51
## df_practice$Day 1 3426.0 3426.0 5000
## df_practice$Glucose.level:df_practice$Day 1 0.0 0.0 51
## Residuals 79 12308.4 155.8
## Pr(Prob)
## df_practice$Glucose.level 1
## df_practice$Day <2e-16 ***
## df_practice$Glucose.level:df_practice$Day 1
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Parietal :
## Df R Sum Sq R Mean Sq Iter
## df_practice$Glucose.level 1 1.9 1.9 51
## df_practice$Day 1 4365.7 4365.7 5000
## df_practice$Glucose.level:df_practice$Day 1 113.1 113.1 94
## Residuals 79 11292.5 142.9
## Pr(Prob)
## df_practice$Glucose.level 1.0000
## df_practice$Day <2e-16 ***
## df_practice$Glucose.level:df_practice$Day 0.5213
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Temporal :
## Df R Sum Sq R Mean Sq Iter
## df_practice$Glucose.level 1 62.3 62.29 293
## df_practice$Day 1 2354.5 2354.49 5000
## df_practice$Glucose.level:df_practice$Day 1 6.4 6.38 51
## Residuals 79 8593.6 108.78
## Pr(Prob)
## df_practice$Glucose.level 0.2560
## df_practice$Day <2e-16 ***
## df_practice$Glucose.level:df_practice$Day 0.8235
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Occipital :
## Df R Sum Sq R Mean Sq Iter
## df_practice$Glucose.level 1 70.8 70.8 154
## df_practice$Day 1 3617.6 3617.6 5000
## df_practice$Glucose.level:df_practice$Day 1 0.4 0.4 51
## Residuals 79 14186.9 179.6
## Pr(Prob)
## df_practice$Glucose.level 0.3961
## df_practice$Day <2e-16 ***
## df_practice$Glucose.level:df_practice$Day 0.9216
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response BasalGanglia :
## Df R Sum Sq R Mean Sq Iter
## df_practice$Glucose.level 1 667.0 667.04 5000
## df_practice$Day 1 1784.8 1784.78 5000
## df_practice$Glucose.level:df_practice$Day 1 0.2 0.15 51
## Residuals 79 9022.4 114.21
## Pr(Prob)
## df_practice$Glucose.level 0.0140 *
## df_practice$Day <2e-16 ***
## df_practice$Glucose.level:df_practice$Day 0.8431
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Thalamus :
## Df R Sum Sq R Mean Sq Iter
## df_practice$Glucose.level 1 3019.5 3019.5 5000
## df_practice$Day 1 3737.4 3737.4 5000
## df_practice$Glucose.level:df_practice$Day 1 1.7 1.7 51
## Residuals 79 20986.0 265.6
## Pr(Prob)
## df_practice$Glucose.level 0.0056 **
## df_practice$Day <2e-16 ***
## df_practice$Glucose.level:df_practice$Day 0.9020
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response InsulaAndAmygdala :
## Df R Sum Sq R Mean Sq Iter
## df_practice$Glucose.level 1 50.4 50.35 85
## df_practice$Day 1 1615.8 1615.81 5000
## df_practice$Glucose.level:df_practice$Day 1 0.9 0.93 51
## Residuals 79 9782.8 123.83
## Pr(Prob)
## df_practice$Glucose.level 0.5412
## df_practice$Day <2e-16 ***
## df_practice$Glucose.level:df_practice$Day 1.0000
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
In order to visualize the change in brain activation between day 1 and day 2, I created a dumbbell chart. You can see qualitatively how the thalamus and basal ganglia are responsive to both changes in glucose level and chnages in day, as opposed to all the other regions which are quite responsive to day only. Note that these are just the mean responses for all the members of group 1. There are no error bars/confidence intervals displayed.
Here is another comparison between Day 1 and Day 2 of the control populations.
Avi suggested that I implement a 3 way Anova so that we could look for focality of response by considering the interaction between glucose level and region of interest. When I run a 2x8x4 anova considering interactions between glucose level, region of interest, and day, there are significant differences in brain response depending on: glucose level, day, region of interest, and the interaction between region of interest and glucose level.
##
## Error: X
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 4316 4316 0.534 0.486
## Day 1 5940 5940 0.735 0.416
## Glucose.level:Day 1 215 215 0.027 0.875
## Residuals 8 64607 8076
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 886 886 14.865 0.000126 ***
## Day 1 19865 19865 333.239 < 2e-16 ***
## ROI 8 74240 9280 155.669 < 2e-16 ***
## Glucose.level:Day 1 31 31 0.519 0.471497
## Glucose.level:ROI 8 3436 430 7.205 3.33e-09 ***
## Day:ROI 8 667 83 1.400 0.193042
## Glucose.level:Day:ROI 8 103 13 0.216 0.988042
## Residuals 700 41729 60
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Because the interaction between ROI and glucose level is significant, I broke it appart with a general linear hypotheses test. I performed Tukey’s test with a Bonferroni correction. There are a bunch of significant interactions which should lend themselves to a discussion of focality in cerebral response.
m<-lmer(y~factor(Glucose.level)*ROI + (1|X), data = df_long)
summary(glht(m, linfct=mcp(ROI = "Tukey")), test = adjusted(type = "bonferroni"))
##
## Simultaneous Tests for General Linear Hypotheses
##
## Multiple Comparisons of Means: Tukey Contrasts
##
##
## Fit: lme4::lmer(formula = y ~ factor(Glucose.level) * ROI + (1 | X),
## data = df_long)
##
## Linear Hypotheses:
## Estimate Std. Error z value
## OrbitalFrontal - Frontal == 0 -8.4877 2.9583 -2.869
## Motor - Frontal == 0 -7.6689 2.9583 -2.592
## Parietal - Frontal == 0 -6.9929 2.9583 -2.364
## Temporal - Frontal == 0 -18.7529 2.9583 -6.339
## Occipital - Frontal == 0 -17.7245 2.9583 -5.991
## BasalGanglia - Frontal == 0 -16.8937 2.9583 -5.711
## Thalamus - Frontal == 0 -15.5931 2.9583 -5.271
## InsulaAndAmygdala - Frontal == 0 -34.0369 2.9583 -11.506
## Motor - OrbitalFrontal == 0 0.8188 2.9583 0.277
## Parietal - OrbitalFrontal == 0 1.4948 2.9583 0.505
## Temporal - OrbitalFrontal == 0 -10.2653 2.9583 -3.470
## Occipital - OrbitalFrontal == 0 -9.2369 2.9583 -3.122
## BasalGanglia - OrbitalFrontal == 0 -8.4060 2.9583 -2.842
## Thalamus - OrbitalFrontal == 0 -7.1054 2.9583 -2.402
## InsulaAndAmygdala - OrbitalFrontal == 0 -25.5492 2.9583 -8.636
## Parietal - Motor == 0 0.6760 2.9583 0.229
## Temporal - Motor == 0 -11.0841 2.9583 -3.747
## Occipital - Motor == 0 -10.0557 2.9583 -3.399
## BasalGanglia - Motor == 0 -9.2248 2.9583 -3.118
## Thalamus - Motor == 0 -7.9242 2.9583 -2.679
## InsulaAndAmygdala - Motor == 0 -26.3680 2.9583 -8.913
## Temporal - Parietal == 0 -11.7601 2.9583 -3.975
## Occipital - Parietal == 0 -10.7317 2.9583 -3.628
## BasalGanglia - Parietal == 0 -9.9008 2.9583 -3.347
## Thalamus - Parietal == 0 -8.6003 2.9583 -2.907
## InsulaAndAmygdala - Parietal == 0 -27.0440 2.9583 -9.142
## Occipital - Temporal == 0 1.0284 2.9583 0.348
## BasalGanglia - Temporal == 0 1.8593 2.9583 0.628
## Thalamus - Temporal == 0 3.1598 2.9583 1.068
## InsulaAndAmygdala - Temporal == 0 -15.2839 2.9583 -5.166
## BasalGanglia - Occipital == 0 0.8309 2.9583 0.281
## Thalamus - Occipital == 0 2.1314 2.9583 0.720
## InsulaAndAmygdala - Occipital == 0 -16.3123 2.9583 -5.514
## Thalamus - BasalGanglia == 0 1.3006 2.9583 0.440
## InsulaAndAmygdala - BasalGanglia == 0 -17.1432 2.9583 -5.795
## InsulaAndAmygdala - Thalamus == 0 -18.4438 2.9583 -6.235
## Pr(>|z|)
## OrbitalFrontal - Frontal == 0 0.14819
## Motor - Frontal == 0 0.34318
## Parietal - Frontal == 0 0.65116
## Temporal - Frontal == 0 8.32e-09 ***
## Occipital - Frontal == 0 7.49e-08 ***
## BasalGanglia - Frontal == 0 4.05e-07 ***
## Thalamus - Frontal == 0 4.88e-06 ***
## InsulaAndAmygdala - Frontal == 0 < 2e-16 ***
## Motor - OrbitalFrontal == 0 1.00000
## Parietal - OrbitalFrontal == 0 1.00000
## Temporal - OrbitalFrontal == 0 0.01874 *
## Occipital - OrbitalFrontal == 0 0.06458 .
## BasalGanglia - OrbitalFrontal == 0 0.16164
## Thalamus - OrbitalFrontal == 0 0.58720
## InsulaAndAmygdala - OrbitalFrontal == 0 < 2e-16 ***
## Parietal - Motor == 0 1.00000
## Temporal - Motor == 0 0.00645 **
## Occipital - Motor == 0 0.02433 *
## BasalGanglia - Motor == 0 0.06549 .
## Thalamus - Motor == 0 0.26611
## InsulaAndAmygdala - Motor == 0 < 2e-16 ***
## Temporal - Parietal == 0 0.00253 **
## Occipital - Parietal == 0 0.01030 *
## BasalGanglia - Parietal == 0 0.02943 *
## Thalamus - Parietal == 0 0.13130
## InsulaAndAmygdala - Parietal == 0 < 2e-16 ***
## Occipital - Temporal == 0 1.00000
## BasalGanglia - Temporal == 0 1.00000
## Thalamus - Temporal == 0 1.00000
## InsulaAndAmygdala - Temporal == 0 8.59e-06 ***
## BasalGanglia - Occipital == 0 1.00000
## Thalamus - Occipital == 0 1.00000
## InsulaAndAmygdala - Occipital == 0 1.26e-06 ***
## Thalamus - BasalGanglia == 0 1.00000
## InsulaAndAmygdala - BasalGanglia == 0 2.46e-07 ***
## InsulaAndAmygdala - Thalamus == 0 1.63e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- bonferroni method)
After doing a complete comparison of the control subjects, I also analyzed differences between the control group and the diabetic participants. This process was very similar as the above analysis, except I did not include patient ID as a random effect. The Anova shows that is a difference between groups, which makes sense.
The differences between groups occurs in the occipital lobe and the basal ganglia. The occipital lobe’s location in the rear of the brain aligns with Avi’s expectation that we would see effects in the rear of the brain. The basal ganglia was a significant region in the earlier comparison between Day 1 and Day 2 response, as well. The thalamus is responsive to changes in glucose level, as it was in the earlier analysis; however, it is not affected by whether a person is diabetic or not.
This dataset seems to meet the assumption of normality, so I didn’t bother to apply a permutation test.
df_compare<-subset(df, df$Day == 1)
dependent.vars<-as.matrix(df_compare[,5:13])
summary(manova(dependent.vars~df_compare$Glucose.level*df_compare$Group))
## Df Pillai approx F num Df
## df_compare$Glucose.level 1 0.44581 6.5247 9
## df_compare$Group 1 0.35010 4.3695 9
## df_compare$Glucose.level:df_compare$Group 1 0.09120 0.8140 9
## Residuals 81
## den Df Pr(>F)
## df_compare$Glucose.level 73 9.12e-07 ***
## df_compare$Group 73 0.0001393 ***
## df_compare$Glucose.level:df_compare$Group 73 0.6049450
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod2<-aov(dependent.vars~Glucose.level*Group, data = df_compare)
summary(mod2)
## Response Frontal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 217.8 217.780 2.0970 0.1515
## Group 1 11.3 11.294 0.1087 0.7424
## Glucose.level:Group 1 26.7 26.734 0.2574 0.6133
## Residuals 81 8412.2 103.855
##
## Response OrbitalFrontal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 135.1 135.064 1.3220 0.2536
## Group 1 25.4 25.355 0.2482 0.6197
## Glucose.level:Group 1 1.1 1.121 0.0110 0.9168
## Residuals 81 8275.7 102.169
##
## Response Motor :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 0.3 0.310 0.0030 0.9568
## Group 1 233.8 233.764 2.2228 0.1399
## Glucose.level:Group 1 1.3 1.302 0.0124 0.9117
## Residuals 81 8518.4 105.165
##
## Response Parietal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 3.1 3.122 0.0300 0.8629
## Group 1 98.9 98.937 0.9508 0.3324
## Glucose.level:Group 1 117.4 117.448 1.1287 0.2912
## Residuals 81 8428.8 104.059
##
## Response Temporal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 22.6 22.638 0.3023 0.5839
## Group 1 104.4 104.363 1.3937 0.2412
## Glucose.level:Group 1 42.4 42.392 0.5661 0.4540
## Residuals 81 6065.4 74.882
##
## Response Occipital :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 0.2 0.21 0.0018 0.9659
## Group 1 688.8 688.80 5.8846 0.0175 *
## Glucose.level:Group 1 88.4 88.41 0.7553 0.3874
## Residuals 81 9481.1 117.05
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response BasalGanglia :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 847.9 847.94 11.8994 0.0008941 ***
## Group 1 352.3 352.32 4.9442 0.0289640 *
## Glucose.level:Group 1 9.6 9.58 0.1344 0.7148718
## Residuals 81 5772.0 71.26
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Thalamus :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 4764.9 4764.9 30.2429 4.323e-07 ***
## Group 1 313.3 313.3 1.9883 0.1623
## Glucose.level:Group 1 177.7 177.7 1.1282 0.2913
## Residuals 81 12761.9 157.6
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response InsulaAndAmygdala :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 6.8 6.837 0.0755 0.7842
## Group 1 6.2 6.237 0.0688 0.7937
## Glucose.level:Group 1 33.4 33.406 0.3687 0.5454
## Residuals 81 7338.8 90.603
qqnorm(resid(mod2), main="Normal Q-Q Plot")
qqline(resid(mod2), col="red")
df_long<-gather(df_compare, ROI, y, Frontal:InsulaAndAmygdala, factor_key = TRUE)
mod1<-aov(y~Glucose.level*Group*ROI, data = df_long)
summary(mod1)
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 1482 1482 14.392 0.000161 ***
## Group 1 108 108 1.046 0.306866
## ROI 8 79329 9916 96.315 < 2e-16 ***
## Glucose.level:Group 1 353 353 3.424 0.064651 .
## Glucose.level:ROI 8 4517 565 5.484 9.67e-07 ***
## Group:ROI 8 1727 216 2.096 0.033976 *
## Glucose.level:Group:ROI 8 146 18 0.177 0.993978
## Residuals 729 75054 103
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
In order to consider the interaction between group and region of interest, I used the general linear hypothesis test with a Bonferroni correction again. Again we see many regions that appear correlated with each other.
m<-lm(y~factor(Glucose.level)*ROI*factor(Group), data = df_long)
summary(glht(m, linfct=mcp(ROI = "Tukey")), test = adjusted(type = "bonferroni"))
##
## Simultaneous Tests for General Linear Hypotheses
##
## Multiple Comparisons of Means: Tukey Contrasts
##
##
## Fit: lm(formula = y ~ factor(Glucose.level) * ROI * factor(Group),
## data = df_long)
##
## Linear Hypotheses:
## Estimate Std. Error t value
## OrbitalFrontal - Frontal == 0 -6.4345 4.3311 -1.486
## Motor - Frontal == 0 -7.4976 4.3311 -1.731
## Parietal - Frontal == 0 -8.7656 4.3311 -2.024
## Temporal - Frontal == 0 -17.5465 4.3311 -4.051
## Occipital - Frontal == 0 -17.6898 4.3311 -4.084
## BasalGanglia - Frontal == 0 -15.0874 4.3311 -3.483
## Thalamus - Frontal == 0 -16.0170 4.3311 -3.698
## InsulaAndAmygdala - Frontal == 0 -31.1174 4.3311 -7.185
## Motor - OrbitalFrontal == 0 -1.0631 4.3311 -0.245
## Parietal - OrbitalFrontal == 0 -2.3311 4.3311 -0.538
## Temporal - OrbitalFrontal == 0 -11.1120 4.3311 -2.566
## Occipital - OrbitalFrontal == 0 -11.2553 4.3311 -2.599
## BasalGanglia - OrbitalFrontal == 0 -8.6529 4.3311 -1.998
## Thalamus - OrbitalFrontal == 0 -9.5825 4.3311 -2.212
## InsulaAndAmygdala - OrbitalFrontal == 0 -24.6829 4.3311 -5.699
## Parietal - Motor == 0 -1.2680 4.3311 -0.293
## Temporal - Motor == 0 -10.0489 4.3311 -2.320
## Occipital - Motor == 0 -10.1922 4.3311 -2.353
## BasalGanglia - Motor == 0 -7.5898 4.3311 -1.752
## Thalamus - Motor == 0 -8.5194 4.3311 -1.967
## InsulaAndAmygdala - Motor == 0 -23.6198 4.3311 -5.453
## Temporal - Parietal == 0 -8.7809 4.3311 -2.027
## Occipital - Parietal == 0 -8.9243 4.3311 -2.060
## BasalGanglia - Parietal == 0 -6.3219 4.3311 -1.460
## Thalamus - Parietal == 0 -7.2514 4.3311 -1.674
## InsulaAndAmygdala - Parietal == 0 -22.3518 4.3311 -5.161
## Occipital - Temporal == 0 -0.1434 4.3311 -0.033
## BasalGanglia - Temporal == 0 2.4590 4.3311 0.568
## Thalamus - Temporal == 0 1.5295 4.3311 0.353
## InsulaAndAmygdala - Temporal == 0 -13.5709 4.3311 -3.133
## BasalGanglia - Occipital == 0 2.6024 4.3311 0.601
## Thalamus - Occipital == 0 1.6729 4.3311 0.386
## InsulaAndAmygdala - Occipital == 0 -13.4275 4.3311 -3.100
## Thalamus - BasalGanglia == 0 -0.9295 4.3311 -0.215
## InsulaAndAmygdala - BasalGanglia == 0 -16.0299 4.3311 -3.701
## InsulaAndAmygdala - Thalamus == 0 -15.1004 4.3311 -3.486
## Pr(>|t|)
## OrbitalFrontal - Frontal == 0 1.00000
## Motor - Frontal == 0 1.00000
## Parietal - Frontal == 0 1.00000
## Temporal - Frontal == 0 0.00204 **
## Occipital - Frontal == 0 0.00178 **
## BasalGanglia - Frontal == 0 0.01894 *
## Thalamus - Frontal == 0 0.00844 **
## InsulaAndAmygdala - Frontal == 0 6.29e-11 ***
## Motor - OrbitalFrontal == 0 1.00000
## Parietal - OrbitalFrontal == 0 1.00000
## Temporal - OrbitalFrontal == 0 0.37833
## Occipital - OrbitalFrontal == 0 0.34405
## BasalGanglia - OrbitalFrontal == 0 1.00000
## Thalamus - OrbitalFrontal == 0 0.98138
## InsulaAndAmygdala - OrbitalFrontal == 0 6.42e-07 ***
## Parietal - Motor == 0 1.00000
## Temporal - Motor == 0 0.74242
## Occipital - Motor == 0 0.68001
## BasalGanglia - Motor == 0 1.00000
## Thalamus - Motor == 0 1.00000
## InsulaAndAmygdala - Motor == 0 2.48e-06 ***
## Temporal - Parietal == 0 1.00000
## Occipital - Parietal == 0 1.00000
## BasalGanglia - Parietal == 0 1.00000
## Thalamus - Parietal == 0 1.00000
## InsulaAndAmygdala - Parietal == 0 1.16e-05 ***
## Occipital - Temporal == 0 1.00000
## BasalGanglia - Temporal == 0 1.00000
## Thalamus - Temporal == 0 1.00000
## InsulaAndAmygdala - Temporal == 0 0.06485 .
## BasalGanglia - Occipital == 0 1.00000
## Thalamus - Occipital == 0 1.00000
## InsulaAndAmygdala - Occipital == 0 0.07244 .
## Thalamus - BasalGanglia == 0 1.00000
## InsulaAndAmygdala - BasalGanglia == 0 0.00834 **
## InsulaAndAmygdala - Thalamus == 0 0.01873 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- bonferroni method)
Here is a visualization of the comparison of cerebral response separated by glucose level and group.
So the question here is, do diabetic participants look more like Day 1 controls or Day 2 controls? Below is a comparison of Day 2 controls and diabetics. Just as before, there is a significant difference for the Thalamic and Basal Ganglia response as a function of glucose level. There is also a significant difference between Day 2 controls and diabetics in every region.
df_diabetics<-subset(df, df$Group == 1)
df_Day2<-subset(df, df$Day == 2)
df_compare<-rbind(df_diabetics, df_Day2)
dependent.vars<-as.matrix(df_compare[,5:13])
summary(manova(dependent.vars~df_compare$Glucose.level*df_compare$Group))
## Df Pillai approx F num Df
## df_compare$Glucose.level 1 0.40673 5.0275 9
## df_compare$Group 1 0.55293 9.0696 9
## df_compare$Glucose.level:df_compare$Group 1 0.04786 0.3686 9
## Residuals 74
## den Df Pr(>F)
## df_compare$Glucose.level 66 3.68e-05 ***
## df_compare$Group 66 8.86e-09 ***
## df_compare$Glucose.level:df_compare$Group 66 0.946
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod2<-aov(dependent.vars~Glucose.level*Group, data = df_compare)
summary(mod2)
## Response Frontal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 341.9 341.91 2.9327 0.09099 .
## Group 1 2943.9 2943.89 25.2515 3.388e-06 ***
## Glucose.level:Group 1 11.7 11.69 0.1003 0.75237
## Residuals 74 8627.1 116.58
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response OrbitalFrontal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 166.4 166.36 1.3500 0.2490138
## Group 1 1817.8 1817.78 14.7512 0.0002568 ***
## Glucose.level:Group 1 1.7 1.68 0.0137 0.9072445
## Residuals 74 9119.0 123.23
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Motor :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 10.8 10.85 0.0802 0.7777865
## Group 1 1780.4 1780.45 13.1660 0.0005216 ***
## Glucose.level:Group 1 0.8 0.78 0.0057 0.9398067
## Residuals 74 10007.1 135.23
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Parietal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 149.2 149.17 1.1484 0.2874
## Group 1 2935.6 2935.57 22.6008 9.583e-06 ***
## Glucose.level:Group 1 0.0 0.04 0.0003 0.9853
## Residuals 74 9611.7 129.89
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Temporal :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 0.2 0.25 0.0027 0.9585293
## Group 1 1386.0 1386.05 15.2702 0.0002044 ***
## Glucose.level:Group 1 14.6 14.56 0.1604 0.6899426
## Residuals 74 6716.9 90.77
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Occipital :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 5.4 5.42 0.0326 0.85721
## Group 1 1107.6 1107.59 6.6589 0.01185 *
## Glucose.level:Group 1 92.3 92.25 0.5546 0.45879
## Residuals 74 12308.6 166.33
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response BasalGanglia :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 904.0 904.0 10.7636 0.00158 **
## Group 1 3485.4 3485.4 41.4976 1.059e-08 ***
## Glucose.level:Group 1 6.7 6.7 0.0798 0.77839
## Residuals 74 6215.3 84.0
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Thalamus :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 4643.6 4643.6 22.1566 1.144e-05 ***
## Group 1 5840.6 5840.6 27.8681 1.251e-06 ***
## Glucose.level:Group 1 195.5 195.5 0.9329 0.3373
## Residuals 74 15509.0 209.6
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response InsulaAndAmygdala :
## Df Sum Sq Mean Sq F value Pr(>F)
## Glucose.level 1 0.4 0.37 0.0045 0.9466
## Group 1 1714.4 1714.43 21.2330 1.66e-05 ***
## Glucose.level:Group 1 21.2 21.24 0.2631 0.6095
## Residuals 74 5975.0 80.74
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Quantitatively speaking, diabetics, Day 1 participants, and Day 2 participants all look different from each other in the basal ganglia and occipital regions. Diabetics and Day 1 participants look alike in the remaining 7 regions. From the figure below, we can see that generally diabetics look much more like Day 1 participants than Day 2 participants.
Beau was interested in knowing if the difference in response was simply a vertical shift (diabetics and Day 1 controls have a weaker response to changing glucose level across the board as compared to Day 2 participants), or if there was a change in SLOPE. This would indicate that there is some sort of maximum blood flow response and you “max out” at some point. In order to explore this visually, I plotted the regions that were significantly affected by change in glucose level (Thalamus and Basal Ganglia). I used both a linear regression and loess smoothing. There is not a statistcally valid way to compare loess smoothing lines, but I thought it might be a useful visual to look at slopes, particularly looking for some sort of maximum threshold in the transition from a glucose level of 55 to 45.
Visually, it doesn’t look like there’s much of a difference in slopes in the linear regression results. I also calculated the confidence intervals associated with every brain activation point in the linear regression results. When we look at these results, we see that there is no significant difference in slope between Day 1, Day 2, and diabetic responses. Between these results and the loess smoothing visual, I don’t think there’s any evidence to suggest that a max out effect exists. The ranges for blood flow response are pretty huge which is a reflection of sample size. However, given the way the smoothing looks, I don’t think this is necessarily a power issue. There may just not be a max out effect.
df_Diabetic<-as.data.frame(df_Diabetic)
df_Day1<-as.data.frame(df_Day1)
df_Day2<-as.data.frame(df_Day2)
#Diabetic linear model of Thalamic response confidence intervals
confint(lm(df_Diabetic$Thalamus~df_Diabetic$Glucose.level))
## 2.5 % 97.5 %
## (Intercept) 66.47622 78.370170
## df_Diabetic$Glucose.level55 -19.60934 -4.394544
## df_Diabetic$Glucose.level65 -34.80337 -19.588579
## df_Diabetic$Glucose.level90 -35.07619 -19.861395
#Day 1 control linear model of Thalamic response confidence intervals
confint(lm(df_Day1$Thalamus~df_Day1$Glucose.level))
## 2.5 % 97.5 %
## (Intercept) 55.98158 73.683294
## df_Day1$Glucose.level55 -11.29525 13.211666
## df_Day1$Glucose.level65 -24.45916 1.193068
## df_Day1$Glucose.level90 -26.85731 -2.350386
#Day 2 control linear model of Thalamic response confidence intervals
confint(lm(df_Day2$Thalamus~df_Day2$Glucose.level))
## 2.5 % 97.5 %
## (Intercept) 68.39289 93.469572
## df_Day2$Glucose.level55 -22.96316 11.602664
## df_Day2$Glucose.level65 -30.94395 4.519840
## df_Day2$Glucose.level90 -33.49076 1.075069
#Diabetic linear model of Basal Ganglia response confidence intervals
confint(lm(df_Diabetic$BasalGanglia~df_Diabetic$Glucose.level))
## 2.5 % 97.5 %
## (Intercept) 59.554113 68.755263
## df_Diabetic$Glucose.level55 -9.551735 2.218416
## df_Diabetic$Glucose.level65 -15.598191 -3.828040
## df_Diabetic$Glucose.level90 -15.961775 -4.191625
#Day 1 control linear model of Basal Ganglia response confidence intervals
confint(lm(df_Day1$BasalGanglia~df_Day1$Glucose.level))
## 2.5 % 97.5 %
## (Intercept) 59.57363 71.950282
## df_Day1$Glucose.level55 -10.18114 6.953556
## df_Day1$Glucose.level65 -14.87670 3.058771
## df_Day1$Glucose.level90 -15.89605 1.238648
#Day 2 control linear model of Basal Ganglia response confidence intervals
confint(lm(df_Day2$BasalGanglia~df_Day2$Glucose.level))
## 2.5 % 97.5 %
## (Intercept) 69.00507 84.804906
## df_Day2$Glucose.level55 -16.38426 5.394302
## df_Day2$Glucose.level65 -18.62520 3.719137
## df_Day2$Glucose.level90 -19.77625 2.002319