truscan_files <- list.files(path = "./data/raw/truscan", pattern = "\\.E0",
full.names = TRUE)
data_list <- lapply(truscan_files, function(x) {
dat <- read.table(x, header = FALSE, sep = " ", dec = ",", skip = 2)
full_dat <- read.table(gsub("E0", "R0", x), header = TRUE, sep = " ",
dec = ",", skip = 1)
col_names <- read.table(x, header = FALSE, sep = " ", dec = ",",
skip = 1, nrows = 1)
col_dat <- col_names[1, , drop = TRUE]
col_dat <- col_dat[!is.na(col_dat) & !col_dat %in% c("-", "VP")]
col_dat[col_dat == "MOVES"] <- "VP_MOVES"
colnames(dat) <- col_dat
dat$file <- basename(x)
dat$nrow <- nrow(full_dat)
dat$max.points <- max(full_dat$Point)
dat$max.dist <- max(dat$FP_DISTANCE[dat$Point %in% 1:5])
dat$total.dist <- dat$FP_DISTANCE[dat$Point %in% "totals"]
dat
return(dat)
})
# merge data with different columns
cnms <- unique(unlist(lapply(data_list, names)))
data_list2 <- lapply(data_list, function(X) {
nms <- names(X)
if (length(nms) != length(cnms))
for (i in cnms[!cnms %in% nms]) {
X <- data.frame(X, NA, stringsAsFactors = FALSE, check.names = FALSE)
names(X)[ncol(X)] <- i
}
return(X)
})
truscan_data <- do.call("rbind", data_list2)
# remove other columns
truscan_data <- truscan_data[, sapply(truscan_data, function(x) sum(is.na(x))/nrow(truscan_data)) ==
0]
# keep only first 5 min
truscan_data <- truscan_data[truscan_data$Point %in% 1:5, ]
# experiment label
truscan_data$experiment <- gsub("\\.E01|\\.E02", "", truscan_data$file)
truscan_data$total_distance <- truscan_data$FP_DISTANCE
# + truscan_data$MARGIN_DISTANCE + truscan_data$CENTER_DISTANCE
# + truscan_data$VP_DISTANCE
# truscan_data$total_distance <- truscan_data$MARGIN_DISTANCE +
# truscan_data$CENTER_DISTANCE
truscan_data$min <- as.character(truscan_data$Point)
anymz_data <- read.csv("./data/raw/anymaze/Resultados Recorido por minuto.csv")
anymz_data$experiment <- gsub("aro|aros", "A", anymz_data$Animal)
names(anymz_data)[6:10] <- paste0("min", 1:5)
anymz_data$experiment <- as.character(anymz_data$experiment)
anymz_data$experiment[anymz_data$experiment == "TS-S1-4A"] <- "TS-S1-3A"
anymz_data$experiment[anymz_data$experiment == "TS-S3-1A"] <- "TS-S3-2A"
anymz_data <- data.frame(xtabs(cbind(min1, min2, min3, min4, min5) ~
experiment, anymz_data))
anymz_data <- anymz_data[order(anymz_data$experiment, anymz_data$Var2),
]
anymz_data$min <- gsub("min", "", anymz_data$Var2)
names(anymz_data)[3] <- "ANMZ_distance"
anymz_data$TRSC_distance <- sapply(1:nrow(anymz_data), function(x) {
dists <- truscan_data$total_distance[truscan_data$min == anymz_data$min[x] &
truscan_data$experiment == anymz_data$experiment[x]]
if (length(dists) == 0)
dists <- NA
return(dists)
})
anymz_data$file <- sapply(1:nrow(anymz_data), function(x) {
dists <- truscan_data$file[truscan_data$min == anymz_data$min[x] &
truscan_data$experiment == anymz_data$experiment[x]]
if (length(dists) == 0)
dists <- NA
return(dists)
})
anymz_data$filas <- sapply(1:nrow(anymz_data), function(x) {
dists <- truscan_data$nrow[truscan_data$min == anymz_data$min[x] &
truscan_data$experiment == anymz_data$experiment[x]]
if (length(dists) == 0)
dists <- NA
return(dists)
})
anymz_data$maximo_muestras <- sapply(1:nrow(anymz_data), function(x) {
dists <- truscan_data$max.points[truscan_data$min == anymz_data$min[x] &
truscan_data$experiment == anymz_data$experiment[x]]
if (length(dists) == 0)
dists <- NA
return(dists)
})
anymz_data$maximo_distancia <- sapply(1:nrow(anymz_data), function(x) {
dists <- truscan_data$max.dist[truscan_data$min == anymz_data$min[x] &
truscan_data$experiment == anymz_data$experiment[x]]
if (length(dists) == 0)
dists <- NA
return(dists)
})
anymz_data$distancia_total <- sapply(1:nrow(anymz_data), function(x) {
dists <- truscan_data$total.dist[truscan_data$min == anymz_data$min[x] &
truscan_data$experiment == anymz_data$experiment[x]]
if (length(dists) == 0)
dists <- NA
return(dists)
})
Cruces de cuadrante leidos a mano
slm_files <- list.files(path = "./data/raw/solomon_2nd", pattern = "xlsx$",
full.names = TRUE)
out <- lapply(slm_files, function(x) {
# print(x)
a <- as.data.frame(read_excel(x, sheet = "SPSS", skip = 17))
a <- a[1:2, 2:ncol(a)]
a <- a[, a[1, ] == "F"]
df <- data.frame(Experimento = gsub("macro| |\\.xlsx", "", basename(x)),
min = colnames(a), cruces = as.numeric(unlist(a[2, , drop = TRUE])))[1:5,
]
return(df)
})
slmn_data_cruces <- do.call(rbind, out)
slmn_data_cruces$Experimento <- gsub("aro|aros", "A", slmn_data_cruces$Experimento)
slmn_data_cruces$Experimento[slmn_data_cruces$Experimento == "TS-S1-4A"] <- "TS-S1-3A"
slmn_data_cruces$Experimento[slmn_data_cruces$Experimento == "TS-S3-1A"] <- "TS-S3-2A"
write.csv(slmn_data_cruces, "./data/processed/slmn_data_cruces.csv",
row.names = FALSE)
slmn_data_cruces <- read.csv("./data/processed/slmn_data_cruces.csv")
anymz_data$SLM_distance <- sapply(1:nrow(anymz_data), function(x) {
dists <- slmn_data_cruces$cruces[slmn_data_cruces$min == anymz_data$min[x] &
slmn_data_cruces$Experimento == anymz_data$experiment[x]]
if (length(dists) == 0)
dists <- NA
return(dists)
})
Anymaze vs Truscan
ggplot(anymz_data, aes(y = TRSC_distance, x = ANMZ_distance)) + geom_point() +
geom_smooth(method = "lm", se = FALSE) + labs(x = "Distancia del Anymaze",
y = "Distancia del Truscan") + theme_classic()
## [1] "correlacion:"
## [1] 0.3081292
Anymaze vs Solomon
ggplot(anymz_data, aes(y = TRSC_distance, x = SLM_distance)) + geom_point() +
geom_smooth(method = "lm", se = FALSE) + labs(x = "Distancia del Anymaze",
y = "Distancia del Solomon") + theme_classic()
## [1] "correlacion:"
## [1] 0.3965539
# normalize within experiment
cors <- lapply(unique(anymz_data$experiment), function(x) {
X <- anymz_data[anymz_data$experiment == x, ]
cr <- cor(X$ANMZ_distance, X$TRSC_distance)
cr2 <- cor(X$ANMZ_distance, X$SLM_distance)
cr3 <- cor(X$TRSC_distance, X$SLM_distance)
df <- data.frame(Experimento = as.character(x), Correlacion.ANMZ.TRSC = cr,
Correlacion.ANMZ.SLM = cr2, Correlacion.TRSC.SLM = cr3, archivo = X$file[1],
filas = X$filas[1], muestras = X$maximo_muestras[1], distancia_total = X$distancia_total[1],
maxima_distancia = X$maximo_distancia[1], stringsAsFactors = FALSE)
return(df)
})
df <- do.call(rbind, cors)
df$Sesion <- as.numeric(gsub("S", "", sapply(df$Experimento, function(x) strsplit(x,
"-")[[1]][2])))
df$Rata <- gsub("A", " aros", sapply(df$Experimento, function(x) strsplit(x,
"-")[[1]][3]))
df$Rata <- gsub("1 aros", "1 aro", df$Rata)
# anadir metadatos
metadata <- as.data.frame(read_excel("./data/raw/metadatos_sesiones.xlsx"))
df$fecha <- sapply(1:nrow(df), function(x) {
metadata$fecha[gsub("\\.E01|\\.E02", "", metadata$`archivo resumen`) ==
df$Experimento[x]][1]
})
df$Arena <- sapply(1:nrow(df), function(x) {
metadata$arena[gsub("\\.E01|\\.E02", "", metadata$`archivo resumen`) ==
df$Experimento[x]][1]
})
df$`Aros (abajo, arriba)` <- sapply(1:nrow(df), function(x) {
metadata$`aros (abajo, arriba)`[gsub("\\.E01|\\.E02", "", metadata$`archivo resumen`) ==
df$Experimento[x]][1]
})
df$`Caja linc` <- sapply(1:nrow(df), function(x) {
metadata$`caja linc`[gsub("\\.E01|\\.E02", "", metadata$`archivo resumen`) ==
df$Experimento[x]][1]
})
df$Burucha <- sapply(1:nrow(df), function(x) {
metadata$burucha[gsub("\\.E01|\\.E02", "", metadata$`archivo resumen`) ==
df$Experimento[x]][1]
})
df$Burucha <- ifelse(df$Burucha == "no", "no", "si")
df$`Altura aro vertical` <- sapply(1:nrow(df), function(x) {
metadata$`altura aro vertical`[gsub("\\.E01|\\.E02", "", metadata$`archivo resumen`) ==
df$Experimento[x]][1]
})
df$`Altura aro suelo` <- sapply(1:nrow(df), function(x) {
metadata$`altura aro suelo`[gsub("\\.E01|\\.E02", "", metadata$`archivo resumen`) ==
df$Experimento[x]][1]
})
df$fecha <- gsub("-2022", "", df$fecha)
df$Correlacion.ANMZ.TRSC <- round(df$Correlacion.ANMZ.TRSC, 2)
df$Correlacion.ANMZ.SLM <- round(df$Correlacion.ANMZ.SLM, 2)
df$Correlacion.TRSC.SLM <- round(df$Correlacion.TRSC.SLM, 2)
df <- df[order(df$Correlacion.ANMZ.TRSC, decreasing = TRUE), ]
# print dynamic table
datatable(df, editable = list(target = "row"), rownames = FALSE, style = "bootstrap",
filter = "top", options = list(pageLength = 100, autoWidth = TRUE,
dom = "ft"), autoHideNavigation = TRUE, escape = FALSE)
Por experimento:
ggplot(anymz_data[!is.na(anymz_data$TRSC_distance), ], aes(y = TRSC_distance,
x = ANMZ_distance)) + geom_point() + geom_smooth(method = "lm",
se = FALSE) + labs(x = "Distancia del Anymaze", y = "Distancia del Truscan") +
theme_classic() + facet_wrap(~experiment, ncol = 2, scales = "free")
slm_files <- list.files(path = "./data/raw/solomon", pattern = "xlsx$",
full.names = TRUE)
out <- lapply(slm_files, function(x) {
a <- as.data.frame(read_excel(x, sheet = "SPSS", skip = 2))
a <- a[1:2, 2:ncol(a)]
a <- a[, a[1, ] == "F"]
df <- data.frame(Experimento = gsub("macro| |\\.xlsx", "", basename(x)),
min = colnames(a), rearings = as.numeric(unlist(a[2, , drop = TRUE])))[1:5,
]
return(df)
})
slmn_data <- do.call(rbind, out)
slmn_data$Experimento <- gsub("aro|aros", "A", slmn_data$Experimento)
# leer datos truscan
truscan_files <- list.files(path = "./data/raw/truscan", pattern = "\\.R0",
full.names = TRUE)
rear_data_list <- lapply(truscan_files, function(x) {
# print(x)
dat <- read.table(x, header = TRUE, sep = " ", dec = ",", skip = 1)
# primeros 300 segundos
if (nrow(dat) > 300)
dat <- dat[1:300, ]
dat$min <- as.numeric(cut(1:nrow(dat), breaks = seq(0, 300, 60)))
rearings <- sapply(unique(dat$min), function(y) {
X <- dat[dat$min == y, ]
X$rear <- ifelse(X$Jump == "False", FALSE, TRUE)
X$rear.num <- as.numeric(X$rear)
for (i in nrow(X):2) if (X$rear.num[i] == 1)
if (X$rear.num[i - 1] == 1)
X$rear.num[i] <- 0
return(sum(X$rear.num))
})
rear_df <- data.frame(Experimento = gsub("\\.R01|\\.R02", "",
basename(x)), min = unique(dat$min), rearings = rearings,
max = dat$Point[nrow(dat)])
return(rear_df)
})
ts_rearing_data <- do.call(rbind, rear_data_list)
ts_rearing_data$slmn_rearing <- sapply(1:nrow(ts_rearing_data), function(w) {
rear <- slmn_data$rearings[slmn_data$Experimento == ts_rearing_data$Experimento[w] &
slmn_data$min == ts_rearing_data$min[w]]
if (length(rear) == 0)
rear <- NA
return(rear)
})
write.csv(ts_rearing_data, "./data/processed/rearing_data_pooled.csv",
row.names = FALSE)
‘Rearings’ detectados con Solomon vs ‘rearings’ detectados con el Truscan:
ts_rearing_data <- read.csv("./data/processed/rearing_data_pooled.csv")
ts_rearing_data <- ts_rearing_data[!is.na(ts_rearing_data$slmn_rearing),
]
ggplot(ts_rearing_data, aes(y = rearings, x = slmn_rearing)) + geom_point() +
geom_smooth(method = "lm", se = FALSE) + labs(x = "Rearings del Solomon",
y = "Rearings del Truscan") + theme_classic()
## [1] "correlacion:"
## [1] -0.106351
Session information
## R version 4.2.0 (2022-04-22)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 22.04.1 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=es_CR.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=es_CR.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=es_CR.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=es_CR.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] DT_0.22 readxl_1.4.0 ggplot2_3.3.6 knitr_1.39
## [5] kableExtra_1.3.4 klippy_0.0.0.9500
##
## loaded via a namespace (and not attached):
## [1] tidyselect_1.1.2 xfun_0.32 bslib_0.3.1 purrr_0.3.4
## [5] lattice_0.20-45 splines_4.2.0 colorspace_2.0-3 vctrs_0.4.1
## [9] generics_0.1.2 htmltools_0.5.3 viridisLite_0.4.0 yaml_2.3.5
## [13] mgcv_1.8-40 utf8_1.2.2 rlang_1.0.4 jquerylib_0.1.4
## [17] pillar_1.8.0 glue_1.6.2 withr_2.5.0 DBI_1.1.2
## [21] lifecycle_1.0.1 stringr_1.4.0 munsell_0.5.0 gtable_0.3.0
## [25] cellranger_1.1.0 rvest_1.0.2 htmlwidgets_1.5.4 evaluate_0.16
## [29] labeling_0.4.2 fastmap_1.1.0 crosstalk_1.2.0 fansi_1.0.3
## [33] highr_0.9 scales_1.2.0 formatR_1.12 webshot_0.5.3
## [37] jsonlite_1.8.0 farver_2.1.1 systemfonts_1.0.4 digest_0.6.29
## [41] stringi_1.7.8 dplyr_1.0.9 grid_4.2.0 cli_3.3.0
## [45] tools_4.2.0 magrittr_2.0.3 sass_0.4.1 tibble_3.1.8
## [49] pkgconfig_2.0.3 Matrix_1.4-1 xml2_1.3.3 assertthat_0.2.1
## [53] rmarkdown_2.14 svglite_2.1.0 httr_1.4.3 rstudioapi_0.13
## [57] R6_2.5.1 nlme_3.1-157 compiler_4.2.0