Incrémenter une matrice via une boucle for
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 :
Code:
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 |
recherche du model de régression :
Code:
1 2 3 4
|
start <- list()
model <- nls(y ~ k*exp(b1*x) + b0,start = list(k = 1, b1 = 1, b0 = 1)) |
récupération des arguments du modèle :
Code:
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]) |
Calcul du RMSE :
Code:
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))) |
mettre les paramètre du modèle + le RMSE dans une même matrice :
Code:
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)
} |
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) ?
Je ne pense pas que ce soit compliqué à faire... mais je suis vraiment perdu...
Je vous remercie par avance pour votre aide !
Pierre