IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Incrémenter une matrice via une boucle for


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Mai 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'étude
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2018
    Messages : 2
    Points : 4
    Points
    4
    Par défaut 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 : 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
    recherche du model de régression :

    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))
    récupération des arguments du modèle :

    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])
    Calcul du RMSE :
    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)))
    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
     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

  2. #2
    Candidat au Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Mai 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur d'étude
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2018
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Bon bah c'est résolu ! un peu de façon "barbare" mais ça marche !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    para <- cbind(coef, RMSE)
      if (i==1){
        parameters <- cbind(coef,RMSE)
      }else{
        parameters<- rbind(parameters,para)
    J’espérai de l'aide et avoir une solution propre avec apply... mais tant pis !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecriture d'une matrice utilisant des boucles for !
    Par Mathematiker dans le forum Scilab
    Réponses: 4
    Dernier message: 26/02/2015, 22h02
  2. [AC-2003] Lier les tables d'une Base1 dans une Base3 via une Base2
    Par ted the Ors dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/12/2009, 12h58
  3. Réponses: 14
    Dernier message: 10/09/2009, 20h08
  4. supprimer une ligne et une colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/08/2007, 16h42
  5. Réponses: 2
    Dernier message: 17/04/2007, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo