Bonjour à tous,

je reviens vers vous pour un nouveau problème concernant mon analyse sur les courbes de croissances, un peu plus compliqué cette fois.
Je possède un jeu de données avec de nombreux individus. Pour chacun de ces individus, je possède le poids pour différents âges suivant l’extrait de tableau ci-dessous :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ID         Sex   Age   Weight
M15N00010   Mal   0   41.2
M15N00010   Mal   1   39.3
M15N00010   Mal   2   42.3
M15N00010   Mal   3   46.3
M15N00010   Mal   4   53.4
M15N00010   Mal   5   71.5
…   …   ..   …
M15N00012   Mal   0   37.3
M15N00012   Mal   1   34.6
M15N00012   Mal   2   36.3
M15N00012   Mal   3   39.7
M15N00012   Mal   4   47.5
M15N00012   Mal   5   47.3
…   …   …   …
Sur ce jeu de données, j’ai réussi à obtenir un script me permettant de faire fitter la courbe d’un modèle de croissance sur chaque individu et de récupérer les paramètres du modèle.
Le script :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dataTestSubM<-read.table("TestSubsetM.txt",header=T) 
 
MMFfunc<-function(a,b,c,d,Age){(a*b+c*Age^d)/(b+Age^d)}
 
startTestM=c(a=60,b=2376,c=1904,d=1.8)
 
individus <- unique(dataTestSubM$ID) ; dummy <- rep(NA, length(individus))
resultat <- data.frame(ID=individus, a=dummy, b=dummy, c=dummy, d=dummy)
resultat
 
compteur <- 0
for(i in individus)
      {model <- nls(Weight~(a*b+c*Age^d)/(b+Age^d),start=startTestM, data=dataTestSubM, subset= ID==i,trace=TRUE)
      compteur <- compteur + 1
     resultat[compteur,] <- c(i,coef(model))}
resultat
Ce qui me donne alors la sortie:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
ID                a                b                c                d
1 M15N00010 16.2395632915754 356.799398578187 1305.53520677308 1.43990147008223
2 M15N00012  49.030270721997 405.497708156275 581.118646640876 1.84670902621133
J’aimerai à présent obtenir les coordonnées du point d’inflexion, encore une fois pour chaque individu. Pour d’autres modèles que celui-ci que j’utilise, ce point d’inflexion est directement caractérisé par un des paramètres. Malheureusement pour moi, le modèle qui correspond le mieux à mes données est différent. Je pensais donc passer par la méthode de la dérivée seconde pour retrouver ce point d’inflexion.

Une idée que j’ai eu (peut-être en aurait vous une meilleur ou saurez-vous m’aider à développer celle-ci) était de coder un nouveau dataframe avec en colonne : le nom de l’individu, l’âge de l’individu de 0 à 365 et le poids « théorique » de l’individu pour chaque âge, calculé grâce à l’équation de mon modèle et les coefficients spécifiques récupérés avec le code précédent.
Je pensais ensuite récupérer les coordonnées du point lorsque la dérivée seconde s’annule.
J’ai tenté de me débrouiller mais je ne parviens pas d’entrée de jeu à créer le nouveau dataframe et en essayant de réfléchir à la manière de coder le reste, je n’ai pas eu plus de succès.

Merci pour l’aide que vous pourrez m’apporter,

Aurélie