Comment prouver la coopération à partir de séquences comportementales

10

Situation: Deux oiseaux (mâle et femelle) protègent leurs œufs dans leur nid contre un intrus. Chaque oiseau peut utiliser une attaque ou une menace pour se protéger et être présent ou absent. Un schéma émerge des données selon lesquelles le comportement peut être complémentaire - les attaques masculines tandis que les femmes utilisent des menaces et vice versa.

Ma question est: comment prouver statistiquement une telle coopération? Ou quelqu'un peut-il connaître une étude comportementale qui traite d'une analyse similaire? La grande majorité des analyses séquentielles que j'ai trouvées se concentrent sur l'ADN.

entrez la description de l'image ici

Ici, je fournis des données factices , mais mon jeu de données d'origine est composé de dizaines de paires qui ont été enregistrées exactement 10 minutes tout en défendant leur nid. La séquence comportementale de chaque oiseau est donc longue de 600 états (chaque seconde a un état). Ces données plus courtes doivent contenir un modèle similaire à l'ensemble de données entier.

male_seq <- rep(c("absent","present","attack","threat","present","attack",
                  "threat","present","attack","absent"),
                  times = c(3,4,8,2,6,3,2,6,2,1))

female_seq <- rep(c("absent","present","threat","present","threat","present",
                    "threat","attack","present","threat","attack","present",
                    "attack","threat","absent"),
                  times = c(2,6,2,1,2,1,1,3,5,3,1,3,3,2,2))
Ladislav Naďo
la source
2
(+1) pour une question magnifiquement illustrée, bien formée et intéressante!
Tim
1
Comment les intrusions réelles entrent-elles dans ce processus? Chaque séquence correspond-elle à des intervalles de 10 minutes contigus, ou seulement à des intervalles où il y a un intrus? Est-ce que «absent» signifie absent du nid ou absent de la zone lorsqu'une intrusion s'est produite?
Wayne
Salut @Wayne! L'intrus est présent du début à la fin (une marionnette factice de prédateur sur un bâton a été présentée aux oiseaux nicheurs pendant 10 minutes). Absent signifie absent de la zone de nidification - parfois les parents s'enfuient (parfois reviennent après plusieurs minutes).
Ladislav Naďo
OK, donc chaque chaîne de carrés comprend l'intégralité de l'intrusion, et chaque carré adjacent décrit une période contiguë de 10 minutes. Bien. Maintenant, pouvez-vous clarifier ce que vous entendez par "coopération"? Voulez-vous dire différents rôles (menace contre attaque), ou voulez-vous partager le devoir de garde (absent / présent contre menace / attaque)?
Wayne
Par coopération, je veux dire "quand un homme attaque, la femme fait des menaces", et je voudrais tester cette hypothèse par rapport à une alternative: "quand un homme attaque, la femme ne préfère pas faire des menaces" (en d'autres termes, le comportement de la femme est indépendant du comportement masculin).
Ladislav Naďo

Réponses:

3

Je poste une deuxième réponse depuis votre dernier commentaire

Par coopération, je veux dire "quand un homme attaque, la femme fait des menaces", et je voudrais tester cette hypothèse par rapport à une alternative: "quand un homme attaque, la femme ne préfère pas faire des menaces" (en d'autres termes, le comportement de la femme est indépendant du comportement masculin).

male_seqfemale_seqmale_seq == "attack"female_seq == "treat"p

prmfun <- function() {
  sum(female_seq[sample(male_seq) == "attack"] == "threat")
}

mean(replicate(1e5, prmfun()) >= sum(female_seq[male_seq == "attack"] == "threat"))
## [1] 5e-05

H0H0

De plus, même si vous supposiez que les comportements apparaissent dans des clusters du même comportement répétés pendant une certaine période de temps, avec le test de permutation, vous pouvez mélanger des clusters entiers:

female_rle <- rle(female_seq)
n_rle <- length(female_rle$values)

prmfun2 <- function() {
  ord <- sample(n_rle)
  sim_female_seq <- rep(female_rle$values[ord], female_rle$lengths[ord])
  sum(sim_female_seq[male_seq == "attack"] == "threat")
}

mean(replicate(1e5, prmfun2()) >= sum(female_seq[male_seq == "attack"] == "threat"))
## [1] 0.00257

Dans l'un ou l'autre cas, les modèles de coopération dans les données que vous avez fournies semblent loin d'être aléatoires. Notez que dans les deux cas, nous ignorons la nature autocorrélée de ces données, nous posons plutôt la question: si nous choisissions un moment précis au moment où le mâle attaquait, la femelle serait-elle moins ou plus susceptible de faire des friandises en même temps?

t1t

Tim
la source
2

XYXYtXt1,iXt,jXt1tijX Y

Pr(Xt-1,jeXt,j)=Pr(Xt,j|Xt-1,je,Ouit-1,k)Pr(Ouit-1,hOuit,k)=Pr(Ouit,h|Ouit-1,k,Xt-1,je)

Les probabilités de transition peuvent être facilement calculées en comptant les historiques de transition et en normalisant les probabilités par la suite:

states <- c("absent", "present", "attack", "threat")
# data is stored in 3-dimensional array, initialized with
# a very small "default" non-zero count to avoid zeros.
female_counts <- male_counts <- array(1e-16, c(4,4,4), list(states, states, states))
n <- length(male_seq)

for (i in 1:n) {
  male_counts[female_seq[i-1], male_seq[i-1], male_seq[i]] <- male_counts[female_seq[i-1], male_seq[i-1], male_seq[i]] + 1
  female_counts[male_seq[i-1], female_seq[i-1], female_seq[i]] <- female_counts[male_seq[i-1], female_seq[i-1], female_seq[i]] + 1
}

male_counts/sum(male_counts)
female_counts/sum(female_counts)

Il peut également être facilement simulé à l'aide de probabilités marginales:

male_sim <- female_sim <- "absent"

for (i in 2:nsim) {
  male_sim[i] <- sample(states, 1, prob = male_counts[female_sim[i-1], male_sim[i-1], ])
  female_sim[i] <- sample(states, 1, prob = female_counts[male_sim[i-1], female_sim[i-1], ])
}

Le résultat d'une telle simulation est tracé ci-dessous.

entrez la description de l'image ici

De plus, il peut être utilisé pour faire des prévisions à un pas en avant:

male_pred <- female_pred <- NULL

for (i in 2:n) {
  curr_m <- male_counts[female_seq[i-1], male_seq[i-1], ]
  curr_f <- female_counts[male_seq[i-1], female_seq[i-1], ]
  male_pred[i] <- sample(names(curr_m)[curr_m == max(curr_m)], 1)
  female_pred[i] <- sample(names(curr_f)[curr_f == max(curr_f)], 1)
}

avec une précision de 69 à 86% sur les données que vous avez fournies:

> mean(male_seq == male_pred, na.rm = TRUE)
[1] 0.8611111
> mean(female_seq == female_pred, na.rm = TRUE)
[1] 0.6944444

Si les transitions se produisaient au hasard, les probabilités de transition suivraient une distribution uniforme discrète. Ce n'est pas une preuve , mais peut servir de façon de penser vos données à l'aide d'un modèle simple.

Tim
la source
Il semble que vous supposiez que l'alternative à la coopération est une sorte de réponse aléatoire. Je pouvais voir que l'alternative est une réponse non coordonnée, qui pourrait être préprogrammée. Par exemple, un oiseau vole en rond. Ainsi, lorsqu'un partenaire traite avec l'intrus, le cercle est plus grand. Ils traitent donc l'intrus l'un après l'autre, sans coopération en soi, mais en attendant que l'un soit terminé.
Aksakal
@Aksakal mais la question porte sur les interactions et ce que vous décrivez est une sorte d'interaction. (Je ne prétends pas que ce modèle simpliste est correct.)
Tim
Je suis d'accord, que OP n'est pas clair s'il cherche un type de schéma régulier ou spécifiquement une "coopération". Je dirais que lorsque trois oiseaux volent dans le même espace, il doit y avoir une sorte de modèle de comportement qui émerge. Je pense que la "coopération" implique plus qu'un modèle. Sinon, vous pourriez dire que c'est une coopération à trois, avec un intrus coopérant également dans un certain sens.
Aksakal
@Aksakal, vous pourriez avoir raison, mais si ces données ne comprennent que les quatre états observés dans le temps, le type de modèle simpliste que j'ai proposé peut servir de point de départ.
Tim