figure_3_S1.Rmd 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. ---
  2. title: "Spacek et al., 2021, Figure 3-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, include=FALSE}
  13. # This is the same file we used for Figure 1-Supplement 3. It contains the dependent variables for both, movies (Fig 1-Suppl 3) and gratings (Fig 3-Suppl 1)
  14. tib = get_data("../csv/fig1S33S1.csv")
  15. ```
  16. ```{r tidy_for_3_S1, include = FALSE}
  17. # Remove observations with NAs
  18. tb <- tib %>% drop_na(sbc)
  19. # Turn cell type (suppressed-by-contrast) into binary variable
  20. tb$sbc = ifelse(tb$sbc == TRUE, 1, 0)
  21. ```
  22. # Figure 3-Supplement 1a
  23. ## Firing rate FMIs separated by cell types
  24. ```{r fit_model_3_S1a}
  25. # A mixed-effects model with any random intercept gives singular fits,
  26. # we therefore revert to fitting an ordinary linear model
  27. lmer.3_S1a = lm(grt_meanrate ~ sbc,
  28. data = tb %>% drop_na(grt_meanrate))
  29. display(lmer.3_S1a)
  30. anova(lmer.3_S1a)
  31. ```
  32. ```{r get_predicted_average_effect_3_S1a, include=F}
  33. m_sbc0 = coef(lmer.3_S1a)[1]
  34. diffMeans = coef(lmer.3_S1a)[2]
  35. m_sbc1 = coef(lmer.3_S1a)[1] + diffMeans
  36. ```
  37. ```{r save_coefficients_3_S1a, include=FALSE}
  38. pred_means_df = data.frame("non_sbc" = m_sbc0, "sbc" = m_sbc1, row.names = "")
  39. write_csv(pred_means_df, "_stats/figure_3_S1a_pred_means.csv")
  40. ```
  41. FMI sbc: `r format(m_sbc1, digits=3, nsmall=3)` \newline
  42. FMI non-sbc: `r format(m_sbc0, digits=3, nsmall=3)` \newline
  43. n = `r nrow(tb %>% drop_na(grt_meanrate) %>% count(uid))` neurons from `r nrow(tb %>% drop_na(grt_meanrate) %>% count(mid))` mice
  44. \newpage
  45. # Figure 3-Supplement 1b
  46. ## Relation between firing rate FMI and recording depth
  47. ```{r fit_model_3S1b}
  48. # Random intercept for mice
  49. lmer.3_S1b = lmer(grt_meanrate ~ depth + (1 | mid),
  50. data = tib %>% drop_na(grt_meanrate, depth))
  51. display(lmer.3_S1b)
  52. anova(lmer.3_S1b)
  53. ```
  54. ```{r save_coefficients_3_S1b, include=FALSE}
  55. coef_df = data.frame("intercept" = fixef(lmer.3_S1b)[1], "slope" = fixef(lmer.3_S1b)[2], row.names = "")
  56. write_csv(coef_df, "_stats/figure_3_S1b_coefs.csv")
  57. ```
  58. Slope of `r format(fixef(lmer.3_S1b)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.3_S1b)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  59. n = `r nrow(tib %>% drop_na(grt_meanrate, depth) %>% count(uid))` neurons from `r nrow(tib %>% drop_na(grt_meanrate, depth) %>% count(mid))` mice
  60. \newpage
  61. # Figure 3-Supplement 1c
  62. ## Relation between firing rate FMI and direction selectivity
  63. ``` {r fit_model_3_S1c}
  64. # Random intercept for series, nested in mice
  65. lmer.3_S1c = lmer(grt_meanrate ~ dsi + (1 | sid/mid),
  66. data = tib %>% drop_na(grt_meanrate, dsi))
  67. display(lmer.3_S1c)
  68. anova(lmer.3_S1c)
  69. ```
  70. ```{r save_coefficients_3_S1c, include=FALSE}
  71. coef_df = data.frame("intercept" = fixef(lmer.3_S1c)[1], "slope" = fixef(lmer.3_S1c)[2], row.names = "")
  72. write_csv(coef_df, "_stats/figure_3_S1c_coefs.csv")
  73. ```
  74. Slope of `r format(fixef(lmer.3_S1c)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.3_S1c)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  75. n = `r nrow(tib %>% drop_na(grt_meanrate, dsi) %>% count(uid))` neurons from `r nrow(tib %>% drop_na(grt_meanrate, dsi) %>% count(mid))` mice
  76. \newpage
  77. # Figure 3-Supplement 1d
  78. ## Relation between firing rate FMI and receptive field location
  79. ``` {r fit_model_3_S1d}
  80. # Random intercept for series, nested in mice
  81. lmer.3_S1d = lmer(grt_meanrate ~ rfdist + (1 | mid/sid),
  82. data = tib %>% drop_na(grt_meanrate, rfdist))
  83. display(lmer.3_S1d)
  84. anova(lmer.3_S1d)
  85. ```
  86. ```{r save_coefficients_3_S1d,include=FALSE}
  87. # store results in file
  88. coef_df = data.frame("intercept" = fixef(lmer.3_S1d)[1], "slope" = fixef(lmer.3_S1d)[2], row.names = "")
  89. write_csv(coef_df, "_stats/figure_3_S1d_coefs.csv")
  90. ```
  91. Slope of `r format(fixef(lmer.3_S1d)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.3_S1d)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  92. n = `r nrow(tib %>% drop_na(grt_meanrate, rfdist) %>% count(uid))` neurons from `r nrow(tib %>% drop_na(grt_meanrate, rfdist) %>% count(mid))` mice
  93. \newpage
  94. # Figure 3-Supplement 1e
  95. ## Relation between firing rate FMI and firing rate
  96. ``` {r, fit_model_3_S1e}
  97. # Random intercept for series, nested in mice
  98. lmer.3_S1e = lmer(grt_meanrate ~ grt_meanrate_raw + (1 | mid/sid),
  99. data = tib %>% drop_na(grt_meanrate, grt_meanrate_raw))
  100. display(lmer.3_S1e)
  101. anova(lmer.3_S1e)
  102. ```
  103. ```{r save_coefficients_3_S1e, include=F}
  104. coef_df = data.frame("intercept" = fixef(lmer.3_S1e)[1], "slope" = fixef(lmer.3_S1e)[2], row.names = "")
  105. write_csv(coef_df, "_stats/figure_3_S1e_coefs.csv")
  106. ```
  107. Slope of `r format(fixef(lmer.3_S1e)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.3_S1e)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  108. n = `r nrow(tib %>% drop_na(grt_meanrate, grt_meanrate_raw) %>% count(uid))` neurons from `r nrow(tib %>% drop_na(grt_meanrate, grt_meanrate_raw) %>% count(mid))` mice
  109. \newpage
  110. # Figure 3-Supplement 1f
  111. ## Burst ratio FMIs separated by cell types
  112. ```{r fit_model_3_S1f}
  113. # Random intercept for series
  114. lmer.3_S1f = lmer(grt_meanburstratio ~ sbc + (1 | sid),
  115. data = tb %>% drop_na(grt_meanburstratio))
  116. display(lmer.3_S1f)
  117. anova(lmer.3_S1f)
  118. ```
  119. ```{r get_predicted_average_effect_3_S1f, include=F}
  120. m_sbc0 = fixef(lmer.3_S1f)[1]
  121. diffMeans = fixef(lmer.3_S1f)[2]
  122. m_sbc1 = fixef(lmer.3_S1f)[1] + diffMeans
  123. ```
  124. ```{r, save_coefficients_3_S1f, include=F}
  125. pred_means_df = data.frame("non_sbc" = m_sbc0, "sbc" = m_sbc1, row.names = "")
  126. write_csv(pred_means_df, "_stats/figure_3_S1f_pred_means.csv")
  127. ```
  128. FMI sbc: `r format(m_sbc1, digits=3, nsmall=3)` \newline
  129. FMI non-sbc: `r format(m_sbc0, digits=3, nsmall=3)` \newline
  130. n = `r nrow(tb %>% drop_na(grt_meanburstratio) %>% count(uid))` neurons from `r nrow(tb %>% drop_na(grt_meanburstratio) %>% count(mid))` mice
  131. \newpage
  132. # Figure 3-Supplement 1g
  133. ## Relation between burst ratio FMI and recording depth
  134. ```{r fit_model_3_S1g}
  135. # Random intercept for series, nested in mice
  136. lmer.3_S1g = lmer(grt_meanburstratio ~ depth + (1 | mid/sid),
  137. data = tib %>% drop_na(grt_meanburstratio, depth))
  138. display(lmer.3_S1g)
  139. anova(lmer.3_S1g)
  140. ```
  141. ```{r save_coefficients_3S1g, include=FALSE}
  142. # store results in file
  143. coef_df = data.frame("intercept" = fixef(lmer.3_S1g)[1], "slope" = fixef(lmer.3_S1g)[2], row.names = "")
  144. write_csv(coef_df, "_stats/figure_3_S1g_coefs.csv")
  145. ```
  146. Slope of `r format(fixef(lmer.3_S1g)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.3_S1g)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  147. n = `r nrow(tib %>% drop_na(grt_meanburstratio, depth) %>% count(uid))` neurons from `r nrow(tib %>% drop_na(grt_meanburstratio, depth) %>% count(mid))` mice
  148. \newpage
  149. # Figure 3-Supplement 1h
  150. ## Relation between burst ratio FMI and direction selectivity
  151. ``` {r, fit_model_3_S1h}
  152. # Random intercept for series, nested in mice
  153. lmer.3_S1h = lmer(grt_meanburstratio ~ dsi + (1 | mid/sid),
  154. data = tib %>% drop_na(grt_meanburstratio, dsi))
  155. display(lmer.3_S1h)
  156. anova(lmer.3_S1h)
  157. ```
  158. ```{r, save_coefficients_3_S1h, include=FALSE}
  159. coef_df = data.frame("intercept" = fixef(lmer.3_S1h)[1], "slope" = fixef(lmer.3_S1h)[2], row.names = "")
  160. write_csv(coef_df, "_stats/figure_3_S1h_coefs.csv")
  161. ```
  162. Slope of `r format(fixef(lmer.3_S1h)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.3_S1h)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  163. n = `r nrow(tib %>% drop_na(grt_meanburstratio, dsi) %>% count(uid))` neurons from `r nrow(tib %>% drop_na(grt_meanburstratio, dsi) %>% count(mid))` mice
  164. \newpage
  165. # Figure 3-Supplement 1i
  166. ## Relation between burst ratio FMI and receptive field location
  167. ``` {r, fit_model_3_S1i}
  168. # Random intercept for series, nested in mice
  169. lmer.3_S1i = lmer(grt_meanburstratio ~ rfdist + (1 | mid/sid),
  170. data = tib %>% drop_na(grt_meanburstratio, rfdist))
  171. display(lmer.3_S1i)
  172. anova(lmer.3_S1i)
  173. ```
  174. ```{r, save_coefficients_3_S1i, include=FALSE}
  175. coef_df = data.frame("intercept" = fixef(lmer.3_S1i)[1], "slope" = fixef(lmer.3_S1i)[2], row.names = "")
  176. write_csv(coef_df, "_stats/figure_3_S1i_coefs.csv")
  177. ```
  178. Slope of `r format(fixef(lmer.3_S1i)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.3_S1i)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  179. n = `r nrow(tib %>% drop_na(grt_meanburstratio, rfdist) %>% count(uid))` neurons from `r nrow(tib %>% drop_na(grt_meanburstratio, rfdist) %>% count(mid))` mice
  180. \newpage
  181. # Figure 3-Supplement 1j
  182. ## Relation between burst ratio FMI and burst ratio
  183. ``` {r, fit_model_3_S1j}
  184. # Random intercept for series, nested in mice
  185. lmer.3_S1j = lmer(grt_meanburstratio ~ grt_meanburstratio_raw + (1 | mid/sid),
  186. data = tib %>% drop_na(grt_meanburstratio, grt_meanburstratio_raw))
  187. display(lmer.3_S1j)
  188. anova(lmer.3_S1j)
  189. ```
  190. ```{r, save_coefficients, include=FALSE}
  191. coef_df = data.frame("intercept" = fixef(lmer.3_S1j)[1], "slope" = fixef(lmer.3_S1j)[2], row.names = "")
  192. write_csv(coef_df, "_stats/figure_3S1j_coefs.csv")
  193. ```
  194. Slope of `r format(fixef(lmer.3_S1j)[2], digits=2, nsmall=2)` $\pm$ `r format(2 * se.fixef(lmer.3_S1j)[2], digits=2, nsmall=2)` (95\%-confidence interval) \newline
  195. n = `r nrow(tib %>% drop_na(grt_meanburstratio, grt_meanburstratio_raw) %>% count(uid))` neurons from `r nrow(tib %>% drop_na(grt_meanburstratio, grt_meanburstratio_raw) %>% count(mid))` mice