2016-11-23 2 views
-3

Я анализирую поведение животных в течение определенного периода времени.Анализ нескольких типов поведения двух лиц

Я смотрю видео с животными и их поведением. Я записываю, когда отображается каждое поведение. Они будут отображать каждое поведение несколько раз во время записи (что соответствует различным событиям). Иногда во время записи могут отображаться 2 или 3 поведения, но они обычно не запускаются и не заканчиваются ровно в одно и то же время (поэтому они частично перекрываются).

В итоге я получаю серию событий для каждого поведения, и для каждого события у меня есть его начало, продолжительность и конечная точка (см. Следующий пример).

Мне нужно извлечь из этих данных общую сумму, в течение которой поведение 1 перекрывается с поведением 2/поведение 1 перекрывается с поведением 3/поведение 2 перекрывается с поведением 3. Это так, что я могу найти корреляции между поведением, какие из них как правило, отображаются одновременно, а какие нет, ...

Я только начинающий программист (в основном R), и мне трудно начать работу. Не могли бы вы посоветовать мне, как действовать? Большое спасибо!

Пример с серией событий для 3 поведения:

Event tracked   Onset Duration End 
Behaviour 1 _event 1 7.40 548.88 556.28 
Behaviour 1 _event 2 36.20 0.47 36.67 
Behaviour 1 _event 3 48.45 0.25 48.70 
Behaviour 1 _event 4 68.92 1.53 70.45 
Behaviour 1 _event 5 75.48 0.22 75.70 
Behaviour 1 _event 6 89.75 0.66 90.41 
Behaviour 1 _event 7 94.62 0.16 94.78 
Behaviour 1 _event 8 101.78 0.22 102.00 
Behaviour 1 _event 9 108.86 0.59 109.45 
Behaviour 1 _event 10 146.35 0.66 147.00 
Behaviour 1 _event 11 150.20 0.75 150.95 
Behaviour 1 _event 12 152.98 0.66 153.64 
Behaviour 1 _event 13 157.84 0.56 158.41 
Behaviour 2_event 1  7.52 0.38 7.90 
Behaviour 2_event 2  18.73 0.16 18.88 
Behaviour 2_event 3  19.95 2.25 22.20 
Behaviour 2_event 4  26.41 0.25 26.66 
Behaviour 2_event 5  35.91 0.16 36.07 
Behaviour 2_event 6  37.29 0.34 37.63 
Behaviour 2_event 7  38.13 0.72 38.85 
Behaviour 2_event 8  40.19 0.31 40.51 
Behaviour 2_event 9  44.26 0.16 44.41 
Behaviour 2_event 10 45.32 0.16 45.48 
Behaviour 2_event 11 54.84 1.44 56.27 
Behaviour 2_event 12 56.65 1.19 57.84 
Behaviour 2_event 13 61.59 1.03 62.62 
Behaviour 2_event 14 81.13 3.83 84.96 
Behaviour 2_event 15 86.65 0.31 86.96 
Behaviour 2_event 16 90.15 0.19 90.34 
Behaviour 2_event 17 96.97 0.53 97.50 
Behaviour 2_event 18 107.12 0.22 107.34 
Behaviour 2_event 19 118.53 0.41 118.94 
Behaviour 2_event 20 127.76 0.25 128.01 
Behaviour 2_event 21 129.45 0.69 130.13 
Behaviour 2_event 22 130.60 2.31 132.91 
Behaviour 2_event 23 141.01 0.41 141.41 
Behaviour 2_event 24 152.85 0.37 153.23 
Behaviour 2_event 25 156.54 0.13 156.66 
Behaviour 3_event 1  7.71 1.94 9.65 
Behaviour 3_event 2  11.12 1.53 12.65 
Behaviour 3_event 3  19.01 0.19 19.20 
Behaviour 3_event 4  20.01 3.97 23.98 
Behaviour 3_event 5  24.95 4.22 29.16 
Behaviour 3_event 6  29.70 2.19 31.88 
Behaviour 3_event 7  33.23 2.50 35.73 
Behaviour 3_event 8  36.82 0.44 37.26 
Behaviour 3_event 9  38.20 1.16 39.35 
Behaviour 3_event 10 39.91 2.13 42.04 
Behaviour 3_event 11 42.49 3.62 46.11 
Behaviour 3_event 12 47.09 0.53 47.62 
Behaviour 3_event 13 48.15 0.34 48.49 
Behaviour 3_event 14 49.40 2.13 51.52 
Behaviour 3_event 15 57.57 2.25 59.82 
Behaviour 3_event 16 60.89 0.88 61.76 
Behaviour 3_event 17 66.85 6.78 73.63 
Behaviour 3_event 18 75.65 3.03 78.68 
+3

Привет и добро пожаловать в SO! Пожалуйста, посмотрите здесь: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example, чтобы улучшить свой вопрос, чтобы вы могли получить больше ответов. – User2321

+0

Каков ваш ожидаемый результат? – user5249203

ответ

0

Для того, чтобы сделать вид обучения, который вы хотите сделать, это может быть проще преобразовать данные к временному ряду с переменными в состояниях (то есть ли поведение 1, 2, 3, время отображения и т.д.). Таким образом, вы хотите, чтобы преобразовать набор данных, вы должны один, который выглядит как

time animal behav_1 behav_2 behav_3 
0  1   FALSE TRUE  FALSE 
0  2   TRUE  FALSE FALSE 
1  1   FALSE TRUE  FALSE 
1  2   TRUE  FALSE TRUE 
... ...  ...  ...  ... 

Каждая строка указывает, является ли отображение конкретного животного каждый из три поведения в данный момент времени. (Я предполагаю, что у вас есть несколько животных, и вы хотите сохранить их данные о поведении отдельно.)

Тогда вы можете легко приблизиться ко многим интересующим вас количествам. Например, вы можете вычислить вероятность того, что животное делает поведение 1 дано это делает поведение 2 с помощью

  1. Вычисление столбца data$behav_1_and_2 <- data$behav_1 & data$behav_2
  2. деления суммы седловине behav_1_and_2 на сумму behav_2: sum(data$behav_1_and_2)/sum(data$behav_2)

Хорошо, но как вы преобразуете данные? Сначала определите, сколько часов вы хотите проверить. Может быть, вы должны увеличиваться примерно на 0,1.

num_animals <- 10 // How many animals you have 
time_seq <- seq(from = 0, to = 600, by = 0.1) // to should be end of video 
data <- expand.grid(time = time_seq, animal = num_animals) 

Это дает вам первые два столбца требуемого кадра данных. Затем вам нужно вычислить три столбца поведения. Определите функцию, которая принимает time, animal и имя столбца поведения, и возвращает TRUE, если животное делает это поведение в то время, или FALSE, если нет.

has_behavior <- function(time, animal, behavior) { 
    ... 
} 

(Я собираюсь дать вам понять, как это сделать.) С этой функцией в руке, вы можете создать последние три столбца с петлей:

// First create empty columns 
data$behav_1 <- logical(nrow(data)) 
data$behav_2 <- logical(nrow(data)) 
data$behav_3 <- logical(nrow(data)) 

// Now loop through rows 
for (i in 1:nrow(data)) { 
    data$behav_1[i] <- has_behavior(data$time[i], data$animal[i], 1) 
    data$behav_2[i] <- has_behavior(data$time[i], data$animal[i], 2) 
    data$behav_3[i] <- has_behavior(data$time[i], data$animal[i], 3) 
} 

с данными в этом формате, вы должны быть в состоянии изучить эту проблему гораздо легче. Вы можете легко вычислить эти суммарные величины, как я изложил ранее. Этот фрейм данных также может быть полезен для моделирования временных рядов. И это также tidy, что упрощает использование с пакетами, такими как dplyr для суммирования данных и ggplot2 для визуализации. (Вы можете узнать больше об этих последних двух инструментах в бесплатной онлайн-книге R for Data Science by Hadley Wickham.)

Смежные вопросы