Bonjour à vous,
Plus ou moins novice en programmation R j'ai fait un script qui a pour fin de récupérer les paramètres d'une modèle non linéaire ainsi que le RMSE calculé à partir du du modèle "nls". Jusque là, ça marche. Mais je veux répéter cette opération n fois (peut être 50 fois à voir plus tard) et incrémenter une matrice pour chaque nouvelle répétition, soit : une nouvelle ligne avec les nouveaux paramètres et le nouveau RMSE. En gros c'est une cross-validation.
Voici le code, pour une meilleure compréhension je l'ai découpé et commenté. (pour les puristes, je suis sincèrement désolé, mon codage doit vous piquer les yeux....)
mise en place des variables utilisées ensuites :
recherche du model de régression :
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 for(i in 1:10){ n=dim(donnees) # dimension des données de bases p=0.75#le pourcentage voulu n_train=floor(n*p) # sélection de 75% n_test=n-n_train indiv = sample(1:n) # tirage aléatoire indiv_train=indiv[1:n_train] # tirage aléatoire de 75% des données d'entrainements indiv_test=indiv[(n_train+1):n] # tirage aléatoire de 25% des données de validations Dtrain=donnees[indiv_train,] # création de la base d'entrainement Dtest=donnees[indiv_test,] # création de la base de validation x <- Dtrain$Mean_NDVIlog y <- Dtrain$LAI X <- Dtest$Mean_NDVIlog Y <- Dtest$LAI
récupération des arguments du modèle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 start <- list() model <- nls(y ~ k*exp(b1*x) + b0,start = list(k = 1, b1 = 1, b0 = 1))
Calcul du RMSE :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 summary(model) coef <- matrix(summary(model)$coefficients[, "Estimate"], nrow = 1) k <- matrix(coef[1,1]) b1 <- matrix(coef[1,2]) b0 <- matrix(coef[1,3])
mettre les paramètre du modèle + le RMSE dans une même matrice :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 estim <- matrix(k*exp(b1*X)+b0) estim E <- matrix(estim - Y) RMSE <- matrix(sqrt(mean((E^2), na.rm = TRUE)))
C'est dans cette dernière partie que je suis perdu, comment puis-je faire pour qu'à chaque nouvelle répétition les différents paramètres et le nouvel RMSE soient copier dans une nouvelle ligne de cette matrice (parameters) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 parameters <- matrix(nrow=10,ncol=3,byrow=T) ## création de la matrice vide dans laquelle je veux récupérer les différents paramètres colnames(parameters) <- c("k","b1","b0") parameters <- cbind(coef, RMSE) }
Je ne pense pas que ce soit compliqué à faire... mais je suis vraiment perdu...
Je vous remercie par avance pour votre aide !
Pierre
Partager