figure_5_S1.Rmd 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. ---
  2. title: "Spacek et al., 2021, Figure 5 Supplement-1"
  3. output: pdf_document
  4. ---
  5. ```{r setup, include=FALSE}
  6. knitr::opts_chunk$set(echo = TRUE)
  7. library(arm)
  8. library(lmerTest)
  9. library(tidyverse)
  10. source('get_data.R')
  11. ```
  12. ```{r read_data_5_S1ab, include=FALSE}
  13. tib = get_data("../csv/fig5.csv")
  14. ```
  15. ```{r tidy_for_5_S1ab, include = FALSE}
  16. # Get relevant conditions, turn locomotion state into a binary predictor
  17. tb = tib %>% filter(opto == "FALSE") %>% filter(st8 == "run" | st8 == "sit") %>% mutate(run = ifelse(st8 == "run", 1, 0))
  18. # 'Signal-to-noise ratio', and 'mean peak width' are not computed on a trial-by-trial basis. In the csv-file,
  19. # these two measures are therefore identical across trials, so we simply pull out the first trial of each neuron
  20. tbab = tb %>% select(mid, sid, eid, uid, mseu, run, snr, meanpkw) %>% distinct(mseu, run, .keep_all = TRUE)
  21. ```
  22. # Figure 5-Supplement 1a
  23. ## Effect of locomotion state on signal-to-noise ratio (SNR)
  24. ```{r fit_model_5_S1a}
  25. # Random intercept for neurons,
  26. # random intercept for experiments, nested in series
  27. lmer.5_S1a = lmer(snr ~ run + (1 | uid) + (1 | sid/eid),
  28. data = tbab %>% drop_na(snr))
  29. display(lmer.5_S1a)
  30. anova(lmer.5_S1a)
  31. ```
  32. ```{r predicted_average_effect_5_S1a, include=F}
  33. mSit = fixef(lmer.5_S1a)[1]
  34. diffMeans = fixef(lmer.5_S1a)[2]
  35. mRun = fixef(lmer.5_S1a)[1] + diffMeans
  36. ```
  37. SNR locomotion: `r format(mRun, digits=2, nsmall=2)` \newline
  38. SNR sitting: `r format(mSit, digits=2, nsmall=2)` \newline
  39. n = `r nrow(tb %>% drop_na(snr) %>% count(uid))` neurons from `r nrow(tb %>% drop_na(snr) %>% count(mid))` mice
  40. \newpage
  41. # Figure 5-Supplement 1b
  42. ## Effect of locomotion state on mean peak width
  43. ```{r fit_model_5_S1b}
  44. # Random for neurons,
  45. # random intercept for series
  46. lmer.5_S1b = lmer(meanpkw ~ run + (1 | uid) + (1 | sid),
  47. data = tbab %>% drop_na(meanpkw))
  48. display(lmer.5_S1b)
  49. anova(lmer.5_S1b)
  50. ```
  51. ```{r predicted_average_effect_5_S1b, include=F}
  52. mSit = fixef(lmer.5_S1b)[1]
  53. diffMeans = fixef(lmer.5_S1b)[2]
  54. mRun = fixef(lmer.5_S1b)[1] + diffMeans
  55. ```
  56. Mean peak width running: `r format(mRun, digits=2, nsmall=2)` \newline
  57. Mean peak width sitting: `r format(mSit, digits=2, nsmall=2)` \newline
  58. n = `r nrow(tb %>% drop_na(meanpkw) %>% count(uid))` neurons from `r nrow(tb %>% drop_na(meanpkw) %>% count(mid))` mice
  59. \newpage
  60. # Figure 5-Supplement 1c
  61. ## Relation between firing rate RMI and burst ratio RMI
  62. ```{r read_data_5_S1cdefg, include=FALSE}
  63. tib = get_data("../csv/mviRMI.csv")
  64. ```
  65. ```{r tidy_for_5_S1cdefg, include=FALSE}
  66. tb <- tib %>% filter(opto == 'FALSE')
  67. ```
  68. ```{r fit_model_5_S1c}
  69. # Remove outliers
  70. tb_clean <- tb %>% filter(meanburstratio < 0.99 & meanburstratio > -0.99)
  71. # Random intercept for neurons,
  72. # random intercept for experiments, nested in series
  73. lmer.5_S1_c = lmer(meanburstratio ~ meanrate + (1 | uid) + (1 | sid/eid),
  74. data = tb_clean %>% drop_na(meanburstratio, meanrate))
  75. display(lmer.5_S1_c)
  76. anova(lmer.5_S1_c)
  77. ```
  78. ```{r save_coefficients_5_S1c, include=FALSE}
  79. coef_df = data.frame("intercept" = fixef(lmer.5_S1_c)[1], "slope" = fixef(lmer.5_S1_c)[2], row.names = "")
  80. write_csv(coef_df, "_stats/figure_5_S1c_coefs.csv")
  81. ```
  82. Slope of `r format(fixef(lmer.5_S1_c)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.5_S1_c)[2], digits=2, nsmall=2)` (95-\% confidence interval) \newline
  83. n = `r nrow(tb_clean %>% drop_na(meanburstratio, meanrate) %>% count(uid))` neurons from `r nrow(tb_clean %>% drop_na(meanburstratio, meanrate) %>% count(mid))` mice
  84. \newpage
  85. # Figure 5-Supplement 1d
  86. ## Relation between firing rate RMI and sparseness RMI
  87. ```{r fit_model_5_S1d}
  88. # Random intercept for neurons,
  89. # random intercept for experiments, nested in series
  90. lmer.5_S1_d = lmer(spars ~ meanrate + (1 | uid) + (1 | sid/eid),
  91. data = tb %>% drop_na(spars, meanrate))
  92. display(lmer.5_S1_d)
  93. anova(lmer.5_S1_d)
  94. ```
  95. ```{r save_coefficients_5_S1d, include=FALSE}
  96. coef_df = data.frame("intercept" = fixef(lmer.5_S1_d)[1], "slope" = fixef(lmer.5_S1_d)[2], row.names = "")
  97. write_csv(coef_df, "_stats/figure_5_S1d_coefs.csv")
  98. ```
  99. Slope of `r format(fixef(lmer.5_S1_d)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.5_S1_d)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  100. n = `r nrow(tb %>% drop_na(spars, meanrate) %>% count(uid))` neurons from `r nrow(tb %>% drop_na(spars, meanrate) %>% count(mid))` mice
  101. \newpage
  102. # Figure 5-Supplement 1e
  103. ## Relation between firing rate RMI and reliability RMI
  104. ```{r fit_model_5_S1e}
  105. # Random intercept for neurons,
  106. # random intercept for experiments, nested in series,nested in mice
  107. lmer.5_S1e = lmer(rel ~ meanrate + (1 | uid) + (1 | mid/sid/eid),
  108. data = tb %>% drop_na(rel, meanrate))
  109. display(lmer.5_S1e)
  110. anova(lmer.5_S1e)
  111. ```
  112. ```{r store_coefficients_5_S1e, include=F}
  113. coef_df = data.frame("intercept" = fixef(lmer.5_S1e)[1], "slope" = fixef(lmer.5_S1e)[2], row.names = "")
  114. write_csv(coef_df, "_stats/figure_5_S1e_coefs.csv")
  115. ```
  116. Slope of `r format(fixef(lmer.5_S1e)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.5_S1e)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  117. n = `r nrow(tb %>% drop_na(rel, meanrate) %>% count(uid))` neurons from `r nrow(tb %>% drop_na(rel, meanrate) %>% count(mid))` mice
  118. \newpage
  119. # Figure 5-Supplement 1f
  120. ## Relation between firing rate RMI and SNR RMI
  121. ```{r fit_model_5_S1f}
  122. # Random intercept for neurons,
  123. # random intercept for experiments, nested in series
  124. lmer.5_S1f = lmer(snr ~ meanrate + (1 | uid) + (1 | sid/eid),
  125. data = tb %>% drop_na(snr, meanrate))
  126. display(lmer.5_S1f)
  127. anova(lmer.5_S1f)
  128. ```
  129. ```{r store_coefficents_5_S1f, include=F}
  130. coef_df = data.frame("intercept" = fixef(lmer.5_S1f)[1], "slope" = fixef(lmer.5_S1f)[2], row.names = "")
  131. write_csv(coef_df, "_stats/figure_5_S1f_coefs.csv")
  132. ```
  133. Slope of `r format(fixef(lmer.5_S1f)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.5_S1f)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  134. n = `r nrow(tb %>% drop_na(snr, meanrate) %>% count(uid))` neurons from `r nrow(tb %>% drop_na(snr, meanrate) %>% count(mid))` mice
  135. \newpage
  136. # Figure 5-Supplement 1g
  137. ## Relation between firing rate RMI and peak width RMI
  138. ```{r fit_model_5_S1g}
  139. # Random intercept for mice
  140. lmer.5_S1g = lmer(meanpkw ~ meanrate + (1 | mid),
  141. data = tb %>% drop_na(meanpkw, meanrate))
  142. display(lmer.5_S1g)
  143. anova(lmer.5_S1g)
  144. ```
  145. ```{r store_coefficients_5_S1g, include=FALSE}
  146. coef_df = data.frame("intercept" = fixef(lmer.5_S1g)[1], "slope" = fixef(lmer.5_S1g)[2], row.names = "")
  147. write_csv(coef_df, "_stats/figure_5_S1g_coefs.csv")
  148. ```
  149. Slope of `r format(fixef(lmer.5_S1g)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.5_S1g)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  150. n = `r nrow(tb %>% drop_na(meanpkw, meanrate) %>% count(uid))` neurons from `r nrow(tb %>% drop_na(meanpkw, meanrate) %>% count(mid))` mice
  151. \newpage
  152. # Figure 5-Supplement 1h
  153. # Distributions of eye position variability, separated by locomotion state
  154. ```{r read_data_5_S1h, include=FALSE}
  155. tib = get_data("../csv/ipos_st8.csv")
  156. # Turn locomotion state into a binary predictor
  157. tb = tib %>% mutate(run = ifelse(st8 == "run", 1, 0))
  158. # 'Standard deviation of eye position is not computed on a trial-by-trial basis. In the csv-file,
  159. # this measure is therefore identical across trials, so we simply pull out the first trial of each experiment
  160. tbh = tb %>% select(mid, sid, eid, mse, run, std_xpos_cross) %>% distinct(mse, run, .keep_all = TRUE)
  161. ```
  162. ```{r fit_model_5_S1h}
  163. # Random intercept for series
  164. lmer.5_S1h = lmer(std_xpos_cross ~ run + (1 | sid),
  165. data = tbh %>% drop_na(std_xpos_cross))
  166. display(lmer.5_S1h)
  167. anova(lmer.5_S1h)
  168. ```
  169. ```{r predicted_average_effect_5_S1h, include=F}
  170. mSit = fixef(lmer.5_S1h)[1]
  171. diffMeans = fixef(lmer.5_S1h)[2]
  172. mRun = fixef(lmer.5_S1h)[1] + diffMeans
  173. ```
  174. Locomotion: mean eye position standard deviation of `r format(mRun, digits=2, nsmall=2)` (95\%-confidence interval) \newline
  175. Sitting: mean eye position standard deviation of `r format(mSit, digits=2, nsmall=2)` \newline
  176. n = `r nrow(tbh %>% drop_na(std_xpos_cross) %>% count(eid))` experiments from `r nrow(tbh %>% drop_na(std_xpos_cross) %>% count(mid))` mice
  177. \newpage
  178. # Figure 5-Supplement 1i
  179. # Relation between locomotion effects on eye position variability and firing rate variability
  180. ```{r read_data_5_S1i, include=FALSE}
  181. tib = get_data("../csv/iposmi.csv")
  182. ```
  183. ```{r fit_model_5_S1i}
  184. # Random effect of experiment, units partially crossed
  185. lmer.5_S1i = lmer(relrmi ~ iposrmi + (1 | uid),
  186. data = tib %>% drop_na(relrmi, iposrmi))
  187. display(lmer.5_S1i)
  188. anova(lmer.5_S1i)
  189. ```
  190. ```{r save_coefficients_5_S1i, include=FALSE}
  191. coef_df = data.frame("intercept" = fixef(lmer.5_S1i)[1], "slope" = fixef(lmer.5_S1i)[2], row.names = "")
  192. write_csv(coef_df, "_stats/figure_5_S1i_coefs.csv")
  193. ```
  194. Slope of `r format(fixef(lmer.5_S1i)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.5_S1i)[2], digits=2, nsmall=2)` (95\%-confidence interval)
  195. ```{r assess_coefficient, include = FALSE}
  196. foo = tib %>% filter(iposrmi != "NA")
  197. sd_ipos = sd(foo$iposrmi)
  198. # expected difference in rel RMI corresponding to a 1-sd difference in eye pos signm
  199. exp_diff = fixef(lmer.5_S1i)[2] * sd_ipos
  200. print(paste("The expected difference in relRMI corresponding to a 1 standard deviation difference in eyePosSigmaRMI is ", format(exp_diff, digits=2)))
  201. ```
  202. Expected difference in reliability RMI corresponding to a 1 standard deviation difference in eye position $\sigma$ RMI is `r format(exp_diff, digits=2, nsmall=2)`, the standard deviation of the residuals is `r format(sigma(lmer.5_S1i), digits=2, nsmall=2)`. \newline \newline
  203. n = `r nrow(tib %>% drop_na(relrmi, iposrmi) %>% count(uid))` neurons from `r nrow(tib %>% drop_na(relrmi, iposrmi) %>% count(mid))` mice