@@ -4,6 +4,9 @@ library(scopr)
4
4
library(ggetho )
5
5
library(sleepr )
6
6
library(gtools )
7
+ library(magrittr )
8
+ library(corrr )
9
+ library(dplyr )
7
10
source(" ../ggplot_themes.R" )
8
11
9
12
@@ -89,9 +92,353 @@ ggplot(stat_dt, aes(quiet_days_02_07, quiet_days_08_13, colour = sex, shape=sex,
89
92
geom_smooth(method = " lm" )+
90
93
geom_point(size = 2 , alpha = .5 ) + labs(x = " Quiescence before tube change" , y = " Quiescence after tube change" ) +
91
94
generic_theme
95
+
96
+ ggplot(stat_dt , aes(quiet_days_02_04 , quiet_days_08_13 , colour = sex , shape = sex , fill = sex )) +
97
+ geom_smooth(method = " lm" )+
98
+ geom_point(size = 2 , alpha = .5 ) + labs(x = " Quiescence before tube change" , y = " Quiescence after tube change" ) +
99
+ generic_theme
92
100
93
101
# ~ scale_fill_manual(values=FEMALE_MALE_PALETTE) +
94
102
# ~ scale_colour_manual(values=FEMALE_MALE_PALETTE)
95
103
96
104
dev.off()
97
105
106
+
107
+ # ################ behavioural paths
108
+
109
+
110
+ dt [,x_rel : = ifelse(xmv(region_id ) > 10 , 1 - x , x )]
111
+
112
+ norm_x <- function (x ){
113
+ min_x <- quantile(na.omit(x ),probs = 0.01 )
114
+ x <- x - min_x
115
+ max_x <- quantile(na.omit(x ),probs = 0.99 )
116
+ x / max_x
117
+ }
118
+ dt [, x_rel : = norm_x(x_rel ), by = id ]
119
+
120
+ dt_ord_2 <- dt [,
121
+ {
122
+ dd <- copy(.SD [, .(t , x_rel , moving )])
123
+ dd [, t : = (floor(t / 60 ))* 60 ]
124
+ dd [,
125
+ .(
126
+ x_rel = mean(x_rel ),
127
+ walked_dist = sum(abs(diff(x_rel ))),
128
+ behaviour = ifelse(all(! moving ),1 ,2 )
129
+ ),
130
+ by = " t" ]
131
+ },
132
+ by = " id" ]
133
+
134
+
135
+ dt_ord_2 [, behaviour : = ifelse(behaviour != 1 , (walked_dist > .25 ) + 2 , 1 )]
136
+ dt_ord_2 [, behaviour : = ordered(c(" q" ," m" ," w" )[behaviour ], levels = c(" q" ," m" ," w" ))]
137
+ dt_ord_2 [, micro.mov. : = (behaviour == " m" )]
138
+ dt_ord_2 [, walking : = (behaviour == " w" )]
139
+ dt_ord_2 [, quiescent : = (behaviour == " q" )]
140
+
141
+
142
+
143
+
144
+ # ~ dt_ord_2[, befr := ifelse(t < days(7) | t > days(8), before, NA)]
145
+
146
+ dt_ord_2 [, day : = floor(t / days(1 ))]
147
+
148
+
149
+ tern_dt <- na.omit(dt_ord_2 )[,
150
+ {
151
+ dd <- copy(.SD [, .(t , x_rel ,behaviour )])
152
+ dd [, hour : = (floor(t / hours(.25 )) * .25 ) %% 24 ]
153
+ dd [,
154
+ .(
155
+ value = c(as.vector(table(.SD [,behaviour ])/ .N ), mean(x_rel )),
156
+ behaviour = c(levels(behaviour )," x_rel" )
157
+ ),
158
+ by = " hour" ]
159
+ },
160
+ by = " id,day" ]
161
+
162
+
163
+
164
+ tern_dt [, behaviour : = factor (behaviour , levels = c(" q" ," m" ," w" ," x_rel" ))]
165
+ setkeyv(tern_dt ," id" )
166
+ setbehavr(tern_dt , dt_ord_2 [meta = T ])
167
+
168
+
169
+
170
+
171
+ tern_dt_wide <- behavr(data.table(reshape(tern_dt [! (behaviour %in% c(" x_rel" , " entropy" ))],
172
+ timevar = " behaviour" ,
173
+ idvar = c(" id" , " hour" , " day" ),
174
+ direction = " wide" ), key = " id" ),
175
+ tern_dt [meta = T ])
176
+
177
+ setnames(tern_dt_wide , c(" value.q" , " value.m" , " value.w" ),c(" q" ," m" ," w" ))
178
+ tern_dt_wide <- rejoin(tern_dt_wide )
179
+
180
+
181
+ day_set_map <- c(" before_1" , " before_2" ," after_1" , " after_2" )[c(1 ,2 ,1 ,2 ,1 ,2 ,NA ,4 ,3 ,4 ,3 ,4 ,3 )]
182
+
183
+ tern_dt_wide [, set : = day_set_map [day ]]
184
+
185
+
186
+
187
+ # ~ tern_dt_before <- tern_dt[befr==T]
188
+ # ~ setkeyv(tern_dt_before,"id")
189
+ # ~ setbehavr(tern_dt_before, dt_ord_2[meta=T])
190
+ # ~ tern_dt_before[, befr := NULL]
191
+
192
+ # ~ tern_dt_after <- tern_dt[befr==F]
193
+ # ~ setkeyv(tern_dt_after,"id")
194
+ # ~ setbehavr(tern_dt_after, dt_ord_2[meta=T])
195
+ # ~ tern_dt_after[, befr := NULL]
196
+
197
+
198
+ # ~ tern_dt_wide_before <- behavr(data.table(reshape(tern_dt_before[!(behaviour %in% c("x_rel", "entropy"))],
199
+ # ~ timevar = "behaviour",
200
+ # ~ idvar = c("id", "hour"),
201
+ # ~ direction = "wide"), key="id"),
202
+ # ~ tern_dt_before[meta=T])
203
+
204
+ # ~ tern_dt_wide_after <- behavr(data.table(reshape(tern_dt_after[behaviour != "x_rel"],
205
+ # ~ timevar = "behaviour",
206
+ # ~ idvar = c("id", "hour"),
207
+ # ~ direction = "wide"), key="id"),
208
+ # ~ tern_dt_after[meta=T])
209
+
210
+
211
+ # ~ setnames(tern_dt_wide_before, c("value.q", "value.m", "value.w"),c("q","m","w"))
212
+ # ~ setnames(tern_dt_wide_after, c("value.q", "value.m", "value.w"),c("q","m","w"))
213
+
214
+
215
+ # ~ tern_dt_wide_after <- rejoin(tern_dt_wide_after)
216
+ # ~ tern_dt_wide_before <- rejoin(tern_dt_wide_before)
217
+
218
+ # ## clustering:
219
+
220
+
221
+ path_divergeance <- function (d1 , d2 ){
222
+ valid_t <- intersect(d1 $ hour , d2 $ hour )
223
+ d1 <- d1 [hour %in% valid_t ][,.(q ,m ,w ),keyby = hour ][, - " hour" ]
224
+ d2 <- d2 [hour %in% valid_t ][,.(q ,m ,w ),keyby = hour ][, - " hour" ]
225
+ a <- (rowSums(abs(d1 - d2 )))
226
+ bc <- rowSums(sqrt(d1 * d2 ))
227
+ bc <- ifelse(bc == 0 , 1 , bc )
228
+ bd <- - log(bc )
229
+ return (mean(bd ))
230
+ }
231
+
232
+
233
+ tern_dt_wide <- tern_dt_wide [,.(
234
+ q = mean(q ),
235
+ m = mean(m ),
236
+ w = mean(w )
237
+ ),by = " id,set,hour" ]
238
+
239
+
240
+ tern_dt_wide <- dt [,.(id ,sex ),meta = T ][tern_dt_wide ]
241
+
242
+
243
+ set.seed(3212 )
244
+
245
+ make_dist_data <- function (s , n_sim = 5000 ){
246
+ tdt <- tern_dt_wide [sex == s ]
247
+ uids <- unique(tdt $ id )
248
+
249
+ print(s )
250
+
251
+ self_diff_set_dists <- function (set_1 , set_2 ){
252
+ print(c(set_1 , set_2 ))
253
+ sapply(uids , function (i ){
254
+ path_divergeance(tdt [set == set_1 & id == i ], tdt [set == set_2 & id == i ])
255
+ })
256
+ }
257
+
258
+ out <- list (
259
+ b1_b2 = self_diff_set_dists(" before_1" , " before_2" ),
260
+ a1_a2 = self_diff_set_dists(" after_1" , " after_2" ),
261
+ a1_b1 = self_diff_set_dists(" after_1" , " before_1" ),
262
+ a2_b2 = self_diff_set_dists(" after_2" , " before_2" )
263
+ )
264
+
265
+ samples <- matrix (sample(uids , replace = T , size = n_sim * 2 ), nrow = 2 )
266
+
267
+ out $ h_a1_b1 <- mapply(FUN = function (i , j ){
268
+ path_divergeance(tdt [set == " before_1" & id == i ],
269
+ tdt [set == " after_1" & id == j ])
270
+ }, i = samples [1 ,], j = samples [2 ,]
271
+ )
272
+ # ~ out$h_a2_b2 <- mapply(FUN =function(i, j){
273
+ # ~ path_divergeance(tdt[set == "before_2" & id==i],
274
+ # ~ tdt[set == "after_2" & id==j])
275
+ # ~ }, i = samples[1,], j= samples[2,]
276
+ # ~ )
277
+
278
+
279
+ # ~ out$h_b1_b2 <- mapply(FUN =function(i, j){
280
+ # ~ path_divergeance(tdt[set == "before_1" & id==i],
281
+ # ~ tdt[set == "before_2" & id==j])
282
+ # ~ }, i = samples[1,], j= samples[2,]
283
+ # ~ )
284
+ out $ h_a1_a2 <- mapply(FUN = function (i , j ){
285
+ path_divergeance(tdt [set == " after_1" & id == i ],
286
+ tdt [set == " after_2" & id == j ])
287
+ }, i = samples [1 ,], j = samples [2 ,]
288
+ )
289
+
290
+
291
+
292
+
293
+ out2 <- rbindlist(
294
+ lapply(names(out ), function (n ){
295
+ data.table(distance = out [[n ]],
296
+ set = n ,
297
+ sex = s )
298
+ })
299
+ )
300
+ out2
301
+ }
302
+
303
+ m <- make_dist_data(s = " M" )
304
+ f <- make_dist_data(s = " F" )
305
+ d <- rbind(m , f )
306
+
307
+ d [ ,group : = ifelse(set %like % " h_" , " expected" , " observed" )]
308
+ d [ ,group : = factor (group ,level = c(" observed" , " expected" ))]
309
+ d [, set : = gsub(" h_" , " " , set )]
310
+
311
+
312
+ pl_dst <- ggplot(d [set %like % " a1_" ], aes(y = distance , x = interaction(group , set ), fill = sex , alpha = group , linetype = group )) +
313
+ geom_violin() +
314
+ # geom_jitter(data=d[group=="observed"]) +
315
+ stat_summary(fun.y = " mean" , geom = " point" , shape = 4 , size = 1 , colour = " black" )+
316
+ stat_summary(fun.data = " mean_cl_boot" , geom = " errorbar" ,colour = " black" , width = 0.2 )+
317
+ facet_grid(sex ~ . ) +
318
+ scale_y_log10(breaks = c(.02 , .05 , .1 ,.2 , .5 ), name = " Distance" ) +
319
+ scale_x_discrete(name = " " ,
320
+ labels = c(" observed.a1_a2" = bquote(A [1 ]* ' ,' * A [2 ]),
321
+ " expected.a1_a2" = bquote(H [0 ](A [1 ]* ' ,' * A [2 ])),
322
+ " observed.a1_b1" = bquote(A [1 ]* ' ,' * B [1 ]),
323
+ " expected.a1_b1" = bquote(H [0 ](A [1 ]* ' ,' * B [1 ]))
324
+ )
325
+ )+
326
+ scale_alpha_manual(values = c(1 ,0.5 ))
327
+
328
+ scale_fill_manual()
329
+ values = c(" grey40" , " grey70" ))
330
+
331
+
332
+ library(cowplot )
333
+ library(boot )
334
+
335
+ boot_dt <- d [d [, .(expected = mean(distance )), by = " group,sex,set" ][group == " expected" , - " group" ], on = c(" sex" ," set" )][group == " observed" ]
336
+
337
+ boot_dt [, diff_dist : = distance - expected ]
338
+
339
+ mean_fun <- function (data , i ){
340
+ - mean(boot_dt [i , diff_dist ])
341
+ }
342
+
343
+ bo <- boot_dt [, {
344
+ bo <- boot(.SD , statistic = mean_fun , R = 5000 )
345
+ out <- as.data.table(boot.ci(bo , conf = 0.95 , type = " basic" )$ basic )
346
+ out
347
+ }
348
+ , by = " sex,set" ]
349
+
350
+ bo [boot_dt [, .(dist = - mean(diff_dist )), by = " sex,set" ], on = c(" sex" ," set" )]
351
+
352
+
353
+ bo_res <- bo [boot_dt [, .(dist = - mean(diff_dist )), by = " sex,set" ], on = c(" sex" ," set" )]
354
+
355
+
356
+ pl_a <- ggetho(dt , aes(y = ! moving , fill = sex ))+
357
+ stat_pop_etho(method = mean_cl_boot ) +
358
+ scale_y_continuous(name = " P(immobile)" ) +
359
+ geom_rect(data = data.table(xmin = days(7 ), xmax = days(8 ), ymin = 0 , ymax = .9 ),
360
+ aes(xmin = xmin ,xmax = xmax ,ymin = ymin ,ymax = ymax ), size = 3 , alpha = .5 , inherit.aes = F ) +
361
+ stat_ld_annotations() + facet_grid(status ~ . ) +
362
+ scale_x_days(limits = c(days(1 ),days(13 )), breaks = days(1 : 6 ) * 2 )
363
+
364
+
365
+ tern_dt [, set : = day_set_map [day ]]
366
+
367
+
368
+ tern_dt
369
+
370
+ x_given_q_dt <- dt_ord_2 [quiescent == T , .(behaviour = " x_given_q" ,value = mean(x_rel )), by = " id,day" ]
371
+
372
+ day_dt <- tern_dt [,.(value = mean(value )), by = " id,day,behaviour" ]
373
+ day_lst_dt <- split(day_dt , by = " behaviour" )
374
+ day_lst_dt $ x_given_q <- x_given_q_dt
375
+ day_dt <- rbindlist(day_lst_dt )
376
+
377
+ day_dt <- dt [meta = T ][day_dt , on = " id" ]
378
+ ref <- day_dt [day == 1 , .(id = id , ref = value , behaviour = behaviour )]
379
+ day_dt <- na.omit(ref [day_dt , on = c(" id" ," behaviour" )])
380
+
381
+
382
+ to_boot <- function (data , i ){
383
+ rho <- cor.test(data [i ]$ value ,data [i ]$ ref , method = " spearman" , exact = FALSE )$ estimate
384
+ }
385
+
386
+ foo <- function (data ){
387
+
388
+ rho <- to_boot(data , 1 : nrow(data ))
389
+ bo <- boot(data , statistic = to_boot , R = 1000 )
390
+ out <- as.data.table(boot.ci(bo , conf = 0.95 , type = " basic" )$ basic )
391
+ out [, rho : = rho ]
392
+ }
393
+
394
+ data.table(day = 1 , rho = 1 )
395
+ all_corr_dt <- day_dt [day > 1 & day < 13 ,foo(.SD ), by = " day,sex,behaviour" ]
396
+ day_1_cor <- data.table(day = 1 , conf = NA , V2 = NA , V3 = NA , V4 = 1 , V5 = 1 , rho = 1 )
397
+ all_corr_dt <- all_corr_dt [,rbind(.SD , day_1_cor ), by = " sex,behaviour" ]
398
+
399
+ pl_corr <- ggplot(all_corr_dt [behaviour != " x_rel" ], aes(day * days(1 ) + hours(12 ), rho , colour = sex , fill = sex )) +
400
+ # geom_ribbon(aes(ymin=V4, ymax=V5), alpha=.3, colour=NA ) +
401
+ # all_corr_dt
402
+ geom_bar(stat = " identity" , position = " dodge" ) +
403
+ geom_errorbar(aes(ymin = V4 , ymax = V5 ), alpha = .3 , position = " dodge" , colour = " black" ) +
404
+ geom_hline(yintercept = 0 , linetype = 2 ) +
405
+ facet_grid(behaviour ~ . ) +
406
+ scale_y_continuous(name = expression(rho )) +
407
+ scale_x_days(limits = c(days(1 ),days(13 )), breaks = days(1 : 6 ) * 2 )
408
+ # pl_corr
409
+
410
+
411
+ plot_grid(pl_a , pl_corr , nrow = 2 , labels = LETTERS [1 : 2 ])
412
+
413
+ # ~ dt_scal <- na.omit(tern_dt)[, .(value= mean(value)), by="set,behaviour,id"]
414
+
415
+ # ~ dt_scal_wide <- reshape(dt_scal,timevar="set",idvar=c("id","behaviour"), direction="wide")
416
+ # ~ dt_scal_wide <- dt_scal_wide[dt[meta=T], on="id"]
417
+
418
+
419
+
420
+
421
+ # ~ tdt <- copy(dt_scal_wide)
422
+ # ~ tdt2 <- copy(dt_scal_wide)
423
+ # ~ tdt[, y:=value.before_2]
424
+ # ~ tdt[, group:="before_2"]
425
+
426
+ # ~ tdt2[, y:=value.after_1]
427
+ # ~ tdt2[, group:="after_1"]
428
+ # ~ tdt <- rbind(tdt,tdt2)
429
+
430
+ # ~ layers <- c(geom_point(),
431
+ # ~ geom_smooth(method="lm"),
432
+ # ~ facet_grid(group ~ behaviour),
433
+ # ~ scale_x_continuous(limits=c(0,1)),
434
+ # ~ scale_y_continuous(limits=c(0,1)))
435
+
436
+ # ~ pl_corr <- ggplot(tdt, aes(value.before_1, y, colour=sex)) + layers
437
+
438
+ # ~ pl_corr <- plot_grid(pl_b1_b2, pl_b1_a1, ncol=2)
439
+
440
+ # ~ plot_grid(pl_a, pl_dst, rel_heights = c(1,2), nrow=2)
441
+ # ~ plot_grid(plot_grid(pl_a, pl_dst, rel_heights = c(1,2), nrow=2),
442
+ # ~ pl_corr, nrow=2,rel_widths=c(4,2)
443
+ # ~ )
444
+ tern_dt
0 commit comments