Déclarer des valeurs start pour nls, nlsList...

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

Bernadette Julier
Messages : 10
Enregistré le : 15 Juil 2008, 10:14

Déclarer des valeurs start pour nls, nlsList...

Messagepar Bernadette Julier » 24 Avr 2020, 08:55

Bonjour,
J'utilise un modèle non linéaire (que j'ai appelé "hyperbo" ci-dessous) pour décrire la germination (PC_Cumul) en fonction du temps, sur différents lots de semences. Voici la fonction :

fmLot.lis <- nlsList(PC_Cumul ~ hyperbo(temps, theta, a, tc, ymax) | IDBoite,
data = DataLotT34,
start = c(theta=1, a=1, tc=10, ymax=85))

Les lots sont assez différents, aussi la fonction ne parvient pas à réaliser tous les ajustements avec un seul jeu de paramètres de départ. J'ai des éléments issus des données pour définir les paramètres de départ pour chaque lot. Malheureusement, je ne parviens pas à entrer à rentrer une matrice ou une liste contenant ces différents paramètres, avec un set par lot idéalement.
J'ai fait différents essais de vecteurs, matrices, listes, sans que rien ne fonctionne, par exemple :

start = list(theta=c(1,1,1,1), a=c(4,4,0.5,4), tc=c(12,12,20,12), ymax=c(75,75,30,75))

Merci à celui ou celle qui pourra me dépanner
Bernadette

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Déclarer des valeurs start pour nls, nlsList...

Messagepar François Bonnot » 25 Avr 2020, 09:12

Bonjour,
Une suggestion:

1) Créer une liste de vecteurs de paramètres, par exemple comme ceci:

Code : Tout sélectionner

start = list(theta=c(1,1,1,1), a=c(4,4,0.5,4), tc=c(12,12,20,12), ymax=c(75,75,30,75))
m <- as.matrix(as.data.frame(start))
start.list <- lapply(1:nrow(m),function(i) m[i,])

2) Créer une liste de data.frames de données de même longueur que la liste de paramètres (code non reproductible puisque je n'ai pas les données)

Code : Tout sélectionner

data.list <- list(DataLotT1, DataLotT2, DataLotT3, DataLotT4)

3) Faire correspondre chaque vecteur de paramètres avec chaque data.frame de données:

Code : Tout sélectionner

mapply(function(data,start) nlsList(PC_Cumul ~ hyperbo(temps, theta, a, tc, ymax) | IDBoite, data = data, start = start), data.list, start.list, SIMPLIFY=FALSE)

Sans garantie, parce qu'il est impossible de tester le résultat sans les données.
François

Bernadette Julier
Messages : 10
Enregistré le : 15 Juil 2008, 10:14

Re: Déclarer des valeurs start pour nls, nlsList...

Messagepar Bernadette Julier » 27 Avr 2020, 14:17

Bonjour,
Merci pour cette réponse rapide et efficace. En effet, l'ensemble fonctionne très bien, en prenant soin d'avoir la même longueur de liste pour start.list et data.list. L'ajustement se fait comme souhaité sur chaque unité expérimentale (IDboite).
Cependant, tout cela est destiné à comparer les paramètres des modèles en déclarant un effet Variété (IDsample). Je comptais donc écrire:

Code : Tout sélectionner

fmLot2.nlme <- nlme(fmLot.lis)

puis raffiner le modèle en déclarant l'effet de la variété, ici pour ymax par exemple:

Code : Tout sélectionner

fmLot2fixed.nlme <- update(fmLot.nlme, fixed = list(ymax ~ IDsample, theta + a+ tc ~ 1),
                           start=c(1, 2, 12, 80, 0, 0, 0))

en m'inspirant de Pinheiro et Bates (2000).

La structure actuelle du résultat de mapply(...) ne me permet pas de poursuivre, ou plutôt, je ne vois pas comment poursuivre...
Le problème me parait être ordinaire mais la solution n'est pas intuitive. S'il y a un guide-âne qq part, je le suivrai pas-à-pas !
Encore merci


Retourner vers « Questions en cours »

Qui est en ligne

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