Skip to content

Commit 1563c27

Browse files
committed
tume chonge correlation ++
1 parent 19e6c4b commit 1563c27

File tree

2 files changed

+347
-0
lines changed

2 files changed

+347
-0
lines changed

20170109_tube_change_and_var/script.R

+347
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ library(scopr)
44
library(ggetho)
55
library(sleepr)
66
library(gtools)
7+
library(magrittr)
8+
library(corrr)
9+
library(dplyr)
710
source("../ggplot_themes.R")
811

912

@@ -89,9 +92,353 @@ ggplot(stat_dt, aes(quiet_days_02_07, quiet_days_08_13, colour = sex, shape=sex,
8992
geom_smooth(method="lm")+
9093
geom_point(size=2, alpha=.5) + labs(x="Quiescence before tube change", y="Quiescence after tube change") +
9194
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
92100

93101
#~ scale_fill_manual(values=FEMALE_MALE_PALETTE) +
94102
#~ scale_colour_manual(values=FEMALE_MALE_PALETTE)
95103

96104
dev.off()
97105

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
Binary file not shown.

0 commit comments

Comments
 (0)