Compter les fermetures d'une moule

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Guillaume Durier
Messages : 3
Enregistré le : 21 Déc 2018, 14:16

Compter les fermetures d'une moule

Messagepar Guillaume Durier » 21 Déc 2018, 15:47

Bonjour,
J'étudie le comportement de moules grâce à de la valvométrie ce qui me permet de connaitre à quel pourcentage de leur ouverture maximum elle sont tout les dixième de secondes (ce qui génère des tableaux avec plusieurs millions de lignes, une par dixième de seconde et une colonne par individus étudiés).
Lorsqu'une moule à une ouverture inférieur à 10% elle est considérée comme fermée.

Mon objectif est de savoir combien de fermetures j'ai pour une moule sur un temps donné.

Regarder le nombre de valeurs inférieure à 10 ne fonctionne pas car pour une fermeture je peux avoir des milliers de valeurs inférieur à 10, cela donne donc un temps de fermeture et pas un nombre de fermeture.
Regarder le nombre de valeurs égal à 10 ne fonctionne pas non plus car le tracé de passe pas forcement par cette valeur lorsque le seuil de 10% est franchi.

Est ce que quelqu'un a une idée d'astuce pour répondre à mon problème? (déterminer le nombre de fermetures visuellement sur un graphe est possible dans la grande majorité des cas mais l'idée est d'automatiser ce comptage pour traiter rapidement un grand nombre d'individus et certains ont des fermetures trop rapprochées pour être comptées)

Le graphe peut ressembler à ça: (ce n'est pas un de mes graphes mais il c'est également un graphe fait à partir de données de valvométrie la seule différence est que mon axe des ordonnées est en pourcentage d'ouverture)
Sur celui représenté on peut imaginer que ce bivalve se ferme en dessous du seuil de 0,05 donc il faudrait compter le nombre de fois que ce seuil est passé (12 sur cet exemple)

Image

pour cela j'ai une data frame de la forme:
moule1 moule2. .....
1dsec
2dsec
...

Je vous remercie d'avance pour vos réponses
Guillaume

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Compter les fermetures d'une moule

Messagepar Pierre-Yves Berrard » 21 Déc 2018, 16:07

Bonjour,

Si j'essaie de formaliser, une fermeture s'observe quand une valeur est supérieure à 10 et passe à 10 ou moins à la ligne suivante ?

Mécanisme simplifié :

Code : Tout sélectionner

x <- c(1, 2, 11, 12, 7, 10, 4, 5, 6, 15, 10)
xsuiv <- c(x[-1], NA)

fermetures <- x > 10 & xsuiv <= 10

sum(fermetures, na.rm = TRUE) # nombre de fermetures
PY

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Compter les fermetures d'une moule

Messagepar Serge Rapenne » 21 Déc 2018, 16:40

bonjour,
PY m'a grillé, j'étais arrivé à une solution similaire

Code : Tout sélectionner

library(dplyr)
fermeture<-function(x){
  tmp<-(x<10 & lead(x)>10)
  sum(tmp,na.rm = T)
}
x <- c(1, 2, 11, 12, 7, 10, 4, 5, 6, 15, 10)
fermeture(x)


Serge

Guillaume Durier
Messages : 3
Enregistré le : 21 Déc 2018, 14:16

Re: Compter les fermetures d'une moule

Messagepar Guillaume Durier » 21 Déc 2018, 16:44

Voila c'est exactement ça

En faisant ce que vous avez proposé ça marche cependant pour certains individus je trouve un nombre de fermetures supérieur à ce que je peux voir en regardant le graphe, c'est peut être lié à des moments invisible graphiquement ou il y a des micro fermetures je vais vérifier mais si c'est le cas ça peut être très interessant pour mon étude.

Je vais avancer sur cette piste et je verrais sur ce que ça donne.
Merci beaucoup

Serge
Je vais également tester cette solution pour voir si les résultats sont les mêmes
merci !

Guillaume Durier
Messages : 3
Enregistré le : 21 Déc 2018, 14:16

Re: Compter les fermetures d'une moule

Messagepar Guillaume Durier » 21 Déc 2018, 17:15

Les fermetures trouvées en plus sont liées à la précision un peu trop importante de mes valeurs, je vais passer de 6 à 2 décimales et le résultat sera plus juste.

Vous avez parfaitement répondu à mon problème merci beaucoup à tout les deux.
Guillaume

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Compter les fermetures d'une moule

Messagepar Eric Wajnberg » 22 Déc 2018, 04:39

Si j'ai bien compris la question :

Une solution dans ce cas (j'ai ce genre de questionnement), est de compter le nombre de suites continues de valeurs inférieures à 10. Dans R, on peut s'est sortir comme ceci (en reprenant l'exemple de Serge) :

Code : Tout sélectionner

x <- c(1, 2, 11, 12, 7, 10, 4, 5, 6, 15, 10)
round(length(rle(x<10)$length)/2)


Eric.

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: Compter les fermetures d'une moule

Messagepar Gabriel Terraz » 27 Déc 2018, 20:54

Tu dois pouvoir simplifier encore :

Code : Tout sélectionner

sum(rle(x < 10)$values)


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité