Groupe des utilisateurs du logiciel R Index du Forum Groupe des utilisateurs du logiciel R
Un forum francophone d'échange autour du logiciel de calcul statistique R dans le domaine de la recherche agronomique tropicale
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Tirage aléatoire en R

 
Poster un nouveau sujet   Répondre au sujet    Groupe des utilisateurs du logiciel R Index du Forum -> Questions en cours
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
Cheikh Kane



Inscrit le: 24 Juil 2008
Messages: 10
Localisation: UQAM, Montréal

MessagePosté le: Jeu Aoû 07, 2008 6:27 pm    Sujet du message: Tirage aléatoire en R Répondre en citant

Bonjour,

Je cherche comment faire un tirage aléatoire en R. J'ai une base de données de format excel (mais que je peux aussi tranformé en format texte) et je veux former plusieurs échantillons aléatoires en se basant sur les valeurs d'une variable. Cette variable prend deux valeurs: 0 et 1. Par exemple c'est une base de données qui a 2000 observations et je veux en former 10 échantillons de taille variable en spécifiant le nombre d'observations de la valeur 0 et le nombre d'observations de la valeur 1. Pour un échantillon de 200 observations, je veux pouvoir spécifier 50 de la valeur 0 et 150 de la valeur 1. Je veux ainsi former plusieurs bases de données aléatoirement en adoptant la meme technique. Merci pour votre aide.
_________________
Aide en R
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Nicolas Péru



Inscrit le: 07 Aoû 2006
Messages: 1288
Localisation: EdF R&D, Chatou (78)

MessagePosté le: Jeu Aoû 07, 2008 9:15 pm    Sujet du message: Répondre en citant

Bonsoir,

C'est la fonction sample() qui permet de faire des tirages aléatoires.
Pour le reste déjà ça va dépendre si 1 ligne du tableau originel ne doit se retrouver que dans un seul des sous jeux de données ou non.

Nicolas.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Cheikh Kane



Inscrit le: 24 Juil 2008
Messages: 10
Localisation: UQAM, Montréal

MessagePosté le: Ven Aoû 08, 2008 5:52 pm    Sujet du message: Tirage aléatoire en R Répondre en citant

Bonjour Nicolas,

Merci pour la réponse. Une ligne du tableau original peut être tirée à plusieurs reprises.

Merci.
_________________
Aide en R
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Nicolas Péru



Inscrit le: 07 Aoû 2006
Messages: 1288
Localisation: EdF R&D, Chatou (78)

MessagePosté le: Ven Aoû 08, 2008 8:28 pm    Sujet du message: Répondre en citant

Voilà une possibilité :

Code:
CheikhKane_fct <- function(tab,n1,n0,fac01){
##n1 : nombre de 1 souhaité
##n0 : nombre de 0 souhaité
##fac01 : une variable contenant les 0 et 1 ayant autant de valeurs que
## le nombre de ligne du tableau tab
tab0 <- subset(tab,fac01==0) #sélectionne les lignes de tab qui ont un "0" comme équivalent dans fac01
tab1 <- subset(tab,fac01==1) #sélectionne les lignes de tab qui ont un "0" comme équivalent dans fac01

if(n1>nrow(tab1)) stop("nombre de 1 souhaité trop grand") #cf ?"if ou ?"Syntax" pour des détails sur ces commandes
if(n0>nrow(tab0)) stop("nombre de 0 souhaité trop grand")


newtab0 <- tab0[sample(1:nrow(tab0),n0),] #tirage aléatoire de n0 lignes
newtab1 <- tab1[sample(1:nrow(tab1),n1),] #tirage aléatoire de n1 lignes

mysampledataset <- rbind(newtab0,newtab1)
return(mysampledataset)
}




un exemple d'utilisation :

Code:
dataset <- matrix(1:60,nr=20,nc=3) #une matrice de dimension [20,3]
dataset
      [,1] [,2] [,3]
 [1,]    1   21   41
 [2,]    2   22   42
 [3,]    3   23   43
 [4,]    4   24   44
 [5,]    5   25   45
 [6,]    6   26   46
 [7,]    7   27   47
 [8,]    8   28   48
 [9,]    9   29   49
[10,]   10   30   50
[11,]   11   31   51
[12,]   12   32   52
[13,]   13   33   53
[14,]   14   34   54
[15,]   15   35   55
[16,]   16   36   56
[17,]   17   37   57
[18,]   18   38   58
[19,]   19   39   59
[20,]   20   40   60

x01 <- rep(c(0,1),each=10)
x01<-sample(x01,20) #un vecteur de 20 valeurs 0 ou 1, et une utilisation de sample() pour mélanger un vecteur
test <- CheikhKane_fct(tab=dataset,n1=2,n0=3,fac01=x01) #on veut un jeu de donnée ayant deux "1" et trois "0"
test
       [,1] [,2] [,3]
[1,]   18   38   58
[2,]    9   29   49
[3,]    6   26   46
[4,]    2   22   42
[5,]   16   36   56
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Cheikh Kane



Inscrit le: 24 Juil 2008
Messages: 10
Localisation: UQAM, Montréal

MessagePosté le: Sam Aoû 09, 2008 1:30 am    Sujet du message: Répondre en citant

Bonsoir Nicolas,

Merci pour le code. C'est très gentil de votre part.

Bonne soirée.
_________________
Aide en R
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Cheikh Kane



Inscrit le: 24 Juil 2008
Messages: 10
Localisation: UQAM, Montréal

MessagePosté le: Jeu Aoû 14, 2008 6:49 pm    Sujet du message: Tirage aléatoire en R Répondre en citant

Bonsoir,

J'ai quelques ennuis avec la fonction rbin(). J'obtient le message d'erreur suivant: " number of columns of result is not a multiple of vector length".
En fait voici un exemple que ce je veux. J'ai par exemple la base de données suivantes:


Individus Poids Classe

individu1 65.5 0
individu2 45.8 0
individu3 35 1
individu4 50 0
individu5 40 1
individu6 39 1
individu7 78 0

Je veux à chaque fois, prendre aléatoirement un échantillon de cette base de données en spécifiant le nombre de "0" et le nombre de "1" au niveau de la variable "Classe". Par exemple, si je veux deux individus de la modalité "0" et un de "1", je peux avoir par exemple:

Individus Poids Classe

individu1 65.5 0
individu2 45.8 0
individu3 35 1

ou bien:


Individus Poids Classe

individu1 65.5 0
individu5 40 1
individu7 78 0

Merci pour votre soutien.




Nicolas Péru a écrit:
Voilà une possibilité :

Code:
CheikhKane_fct <- function(tab,n1,n0,fac01){
##n1 : nombre de 1 souhaité
##n0 : nombre de 0 souhaité
##fac01 : une variable contenant les 0 et 1 ayant autant de valeurs que
## le nombre de ligne du tableau tab
tab0 <- subset(tab,fac01==0) #sélectionne les lignes de tab qui ont un "0" comme équivalent dans fac01
tab1 <- subset(tab,fac01==1) #sélectionne les lignes de tab qui ont un "0" comme équivalent dans fac01

if(n1>nrow(tab1)) stop("nombre de 1 souhaité trop grand") #cf ?"if ou ?"Syntax" pour des détails sur ces commandes
if(n0>nrow(tab0)) stop("nombre de 0 souhaité trop grand")


newtab0 <- tab0[sample(1:nrow(tab0),n0),] #tirage aléatoire de n0 lignes
newtab1 <- tab1[sample(1:nrow(tab1),n1),] #tirage aléatoire de n1 lignes

mysampledataset <- rbind(newtab0,newtab1)
return(mysampledataset)
}




un exemple d'utilisation :

Code:
dataset <- matrix(1:60,nr=20,nc=3) #une matrice de dimension [20,3]
dataset
      [,1] [,2] [,3]
 [1,]    1   21   41
 [2,]    2   22   42
 [3,]    3   23   43
 [4,]    4   24   44
 [5,]    5   25   45
 [6,]    6   26   46
 [7,]    7   27   47
 [8,]    8   28   48
 [9,]    9   29   49
[10,]   10   30   50
[11,]   11   31   51
[12,]   12   32   52
[13,]   13   33   53
[14,]   14   34   54
[15,]   15   35   55
[16,]   16   36   56
[17,]   17   37   57
[18,]   18   38   58
[19,]   19   39   59
[20,]   20   40   60

x01 <- rep(c(0,1),each=10)
x01<-sample(x01,20) #un vecteur de 20 valeurs 0 ou 1, et une utilisation de sample() pour mélanger un vecteur
test <- CheikhKane_fct(tab=dataset,n1=2,n0=3,fac01=x01) #on veut un jeu de donnée ayant deux "1" et trois "0"
test
       [,1] [,2] [,3]
[1,]   18   38   58
[2,]    9   29   49
[3,]    6   26   46
[4,]    2   22   42
[5,]   16   36   56

_________________
Aide en R
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Renaud Lancelot



Inscrit le: 16 Déc 2004
Messages: 2477
Localisation: CIRAD, Montpellier

MessagePosté le: Ven Aoû 15, 2008 7:12 am    Sujet du message: Répondre en citant

merci de renvoyer ce message en commençant un autre sujet.

Renaud
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
Logez Maxime



Inscrit le: 26 Sep 2006
Messages: 2119
Localisation: Cemagref Aix en Provence

MessagePosté le: Ven Aoû 15, 2008 8:05 am    Sujet du message: Répondre en citant

Bonjour,

Pour reprendre la fonction de Nicolas :
Code:
CheikhKane_fct <- function(tab,n0,n1,fac01){
##n1 : nombre de 1 souhaité
##n0 : nombre de 0 souhaité
##fac01 : une variable contenant les 0 et 1 ayant autant de valeurs que
## le nombre de ligne du tableau tab
if(n1>sum(fac01==1)) stop("nombre de 1 souhaité trop grand") #cf ?"if ou ?"Syntax" pour des détails sur ces commandes
if(n0>sum(fac01==0)) stop("nombre de 0 souhaité trop grand")

auxi <- c(sample(which(fac01==1),n1),sample(which(fac01==0),n0))
auxi <- sample(auxi)

mysampledataset <- tab[auxi,]
return(mysampledataset)
}

test
  Individus Poids Classe
1 individu1  65.5      0
2 individu2  45.8      0
3 individu3  35.0      1
4 individu4  50.0      0
5 individu5  40.0      1
6 individu6  39.0      1
7 individu7  78.0      0

CheikhKane_fct(test,2,1,test$Classe)
  Individus Poids Classe
6 individu6  39.0      1
2 individu2  45.8      0
7 individu7  78.0      0

CheikhKane_fct(test,2,1,test$Classe)
  Individus Poids Classe
7 individu7  78.0      0
3 individu3  35.0      1
2 individu2  45.8      0


Maxime
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Nicolas Péru



Inscrit le: 07 Aoû 2006
Messages: 1288
Localisation: EdF R&D, Chatou (78)

MessagePosté le: Ven Aoû 15, 2008 10:42 am    Sujet du message: Répondre en citant

la question est la même qu'au début...le code est toujours valable d'où la réponse de maxime...je comprends pas bien où est le problème. Et c'est quoi la fonction rbin, je ne la trouve nulle part ?
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Cheikh Kane



Inscrit le: 24 Juil 2008
Messages: 10
Localisation: UQAM, Montréal

MessagePosté le: Ven Aoû 15, 2008 4:59 pm    Sujet du message: Tirage aléatoire en R Répondre en citant

Bonjour Nicolas,

La fonction c'est rbind() au lieu de rbin() comme je l'avais précédemment écris. C'est que avec cette fonction, les lignes des "1" tirées aléatoirement étaient directement placées ensemble au dessous des lignes des "0" tirées aléatoirement. Cette disposition n'était pas bien adaptée car je veux ensuite faire des arbres de décision avec les échantillons. Excusez-moi, mais c'est la première fois que je programme en R. J'aime bien le langage mais je suis très débutant.
Y a-t-il un moyen de sauvegarder les échantillons qu'on crée en fichier qu'on peut utiliser dans d'autres applications (sauvegarder par exemple l'échantillon tirée en un fichier texte que je pourrai utiliser dans un logiciel de construction d'arbres de décision).

Merci beaucoup
_________________
Aide en R
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Cheikh Kane



Inscrit le: 24 Juil 2008
Messages: 10
Localisation: UQAM, Montréal

MessagePosté le: Ven Aoû 15, 2008 5:27 pm    Sujet du message: Tirage aléatoire en R Répondre en citant

La dernière possibilité avec la modification apportée par Maxime fonctionne bien comme je le veux. J'obtiens l'échantillon "mélangée" comme dans ma base de données initiales.
Je lis la documentation car je voudrai un moyen pour sauvegarder ces échantillons afin de les utiliser dans d'autres applications.

Merci vous tous, le forum est très intéressant.
_________________
Aide en R
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Cheikh Kane



Inscrit le: 24 Juil 2008
Messages: 10
Localisation: UQAM, Montréal

MessagePosté le: Ven Aoû 15, 2008 6:58 pm    Sujet du message: Tirage aléatoire en R Répondre en citant

C'est bon, j'ai vu comment sauvegerder les échantillons tirés au hasard (write.table). Merci.

Avez-vous des indications à me donner pour coder des arbres de décision avec R? Je vais utiliser Gini, entropie et Kolmogorov-Smirnov pour comparer les résultats

Merci
_________________
Aide en R
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
romain legrand



Inscrit le: 25 Avr 2008
Messages: 13
Localisation: lyon

MessagePosté le: Ven Aoû 22, 2008 1:00 pm    Sujet du message: Re: Tirage aléatoire en R Répondre en citant

Cheikh Kane a écrit:

Avez-vous des indications à me donner pour coder des arbres de décision avec R?


1) Bien maitriser les fonctions récursives
2) Du café :roll:

Pour l'échantillonnage, je pense que tu devrais faire attention en imposant la proportion de tes classes.
pour moi y'a un risque de sur-apprentissage sur une classe, si la proportion n'est pas la même entre la base initial et ton échantillon.

Sinon , à quoi va te servir Kolmogorov ??
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Hervé Bassinga



Inscrit le: 02 Sep 2014
Messages: 3
Localisation: OUAGADOUGOU

MessagePosté le: Ven Nov 07, 2014 12:26 pm    Sujet du message: echantillon stratifié Répondre en citant

J'ai une base et je veux tirer un échantillon proportionnellement à la taille des ménages selon le milieu de résidence (Urbain, rural) et selon les régions(13 régions). Au total je crois avoir 26 strates(2*13).

Ma variable milieu de résidence est HM025 et région HM024.
Aidez moi s'il vous plait
_________________
J'adore l'innovation
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Adresse AIM Yahoo Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Groupe des utilisateurs du logiciel R Index du Forum -> Questions en cours Toutes les heures sont au format GMT
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous pouvez éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com

Anti Bot Question MOD - phpBB MOD against Spam Bots
Inscriptions bloqués / messages: 100774 / 705