Aide_Sélection_Données_Sous_R
5 participants
La Doua Dans l'Oeil :: Biologie :: Biométrie & Bioinformatique :: Questions & Débats :: Biostatistiques
Page 1 sur 2
Page 1 sur 2 • 1, 2
Aide_Sélection_Données_Sous_R
Chers amis,
j'ai besoin de votre aide, étant novice avec le logiciel R.
Voila mon probleme:
Je dispose d'une base de données qui à l'allure suivante:
N° du lot | Paramètre | Valeur |
--------------------------------
Lot1 | Paramètre1 | 0.5 |
Lot2 | Parametre1 | 0.55 |
Lot3 | Parametre1 | 0.66 |
.... | ...... | ..... |
Lot36 | Parametre1 | 0.42 |
Lot1 | Parametre2 | 1.54 |
.... | .... | ..... |
Lot36 | Parametre2 | 1.62 |
.... | .... | ..... |
Lot1 | Parametre53 | 5.36 |
.... | .... | .... |
Lot36 | Parametre53 | 5.24 |
---------------------------------
Pour résumer, je dispose de 53 paramètres et chacun d'entre eux à 36 valeurs différentes (en fonction du Lot).
Ce que je cherche à faire est de calculer pour chaque paramètre: les quantiles 10% et 90% puis de ne récupérer ensuite que les valeurs comprises entre ces deux quantiles (tjs pour chaque paramètre) et pour finir de calculer la moyenne des valeurs restantes pour chacun des paramètres.
Je compte sur vous pour m'éclairer
Cdlt
j'ai besoin de votre aide, étant novice avec le logiciel R.
Voila mon probleme:
Je dispose d'une base de données qui à l'allure suivante:
N° du lot | Paramètre | Valeur |
--------------------------------
Lot1 | Paramètre1 | 0.5 |
Lot2 | Parametre1 | 0.55 |
Lot3 | Parametre1 | 0.66 |
.... | ...... | ..... |
Lot36 | Parametre1 | 0.42 |
Lot1 | Parametre2 | 1.54 |
.... | .... | ..... |
Lot36 | Parametre2 | 1.62 |
.... | .... | ..... |
Lot1 | Parametre53 | 5.36 |
.... | .... | .... |
Lot36 | Parametre53 | 5.24 |
---------------------------------
Pour résumer, je dispose de 53 paramètres et chacun d'entre eux à 36 valeurs différentes (en fonction du Lot).
Ce que je cherche à faire est de calculer pour chaque paramètre: les quantiles 10% et 90% puis de ne récupérer ensuite que les valeurs comprises entre ces deux quantiles (tjs pour chaque paramètre) et pour finir de calculer la moyenne des valeurs restantes pour chacun des paramètres.
Je compte sur vous pour m'éclairer
Cdlt
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
Salut,
et tout d'abord bienvenu sur notre forum et dans le monde magique de R !!
la première chose que je te propose est de faire des "summary"
insere ton fichier :
ensuite, en faisant :
Pour un quantile en particulier (ex: 10%) :
pour faire l'ensemble en une seule formule, il te faut une boucle
(je laisse nik t'expliquer, il sera meilleur que moi...
tu peux regarder ce post pour t'inspirer :
https://ladoua.exprimetoi.net/biostatistiques-f59/fonction-boucle-sous-r-t414.htm
ensuite pour ne récup que tes valeurs comprises entre tes quantiles :
tu peux faire une boucle également...
à ce moment là, nomme ton quantile :
Si t'as un probleme avec ces formules, fais moi signe,
pour les fonctions de boucle, jte laisse voir avec Nik....
et tout d'abord bienvenu sur notre forum et dans le monde magique de R !!
la première chose que je te propose est de faire des "summary"
insere ton fichier :
- Code:
> read.table("toto.txt", h=T)->toto
ensuite, en faisant :
- Code:
summary(toto$Valeur[toto$Parametre=="param1"])
- Code:
Min. 1st Qu. Median Mean 3rd Qu. Max.
5.000 8.000 11.000 9.333 11.500 12.000
Pour un quantile en particulier (ex: 10%) :
- Code:
quantile(toto$valeur[toto$param==2],probs=0.1)
pour faire l'ensemble en une seule formule, il te faut une boucle
(je laisse nik t'expliquer, il sera meilleur que moi...
tu peux regarder ce post pour t'inspirer :
https://ladoua.exprimetoi.net/biostatistiques-f59/fonction-boucle-sous-r-t414.htm
ensuite pour ne récup que tes valeurs comprises entre tes quantiles :
- Code:
pt2=toto$valeur[toto$param==2&toto$valeur>=6.2&toto$valeur>=15.3]
tu peux faire une boucle également...
à ce moment là, nomme ton quantile :
- Code:
Q10=quantile(toto$valeur[toto$param==2],probs=0.1)
- Code:
pt2=toto$valeur[toto$param==2&toto$valeur>=Q10&toto$valeur>=Q90]
Si t'as un probleme avec ces formules, fais moi signe,
pour les fonctions de boucle, jte laisse voir avec Nik....
Re: Aide_Sélection_Données_Sous_R
Re, merci a toi pour ta réponse.
En fait, calculer les quantiles 10% et 90% je savais comment faire, mon gros problème est effectivement au niveau des boucles afin d'effectuer les opérations pour chacun des 53 paramètres.
Donc si qqn est un expert des boucles qu'il me fasse signe
Merci
En fait, calculer les quantiles 10% et 90% je savais comment faire, mon gros problème est effectivement au niveau des boucles afin d'effectuer les opérations pour chacun des 53 paramètres.
Donc si qqn est un expert des boucles qu'il me fasse signe
Merci
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
Alors les gens, personne pour m'aider a faire cette boucle ??
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
Éventuellement envoie un mp à Nik, c'est lui qui pourra t'aider sur ce point là mais peut être qu'il ne vient pas très régulièrement sur le forum. S'il reçoit un mail qui lui dit qu'il a nouveau mp il viendra voir ce qu'il en est...
Margaux- Squatteurs
- Nombre de messages : 157
Niveau et domaine de formation : Master2 neurosciences (recherche)
Etablissement : UCB Lyon1
Date d'inscription : 21/10/2007
Re: Aide_Sélection_Données_Sous_R
Tu es dans le même cas que ce post
Regardes l'aide de la fonction tapply()
Sur tes données ça donne quelque chose comme ça :
voilà un bout de code reproductible :
Nik
Regardes l'aide de la fonction tapply()
Sur tes données ça donne quelque chose comme ça :
- Code:
tapply(Valeur,Paramètre,function (x) x <- mean(x[x>quantile(x,probs=.1) & x<quantile(x,probs=.9)]))
voilà un bout de code reproductible :
- Code:
value <- runif(108)
param <- rep(paste("par",1:3,sep=""),each=36)
result<- tapply(value,param,function (x) x <- mean(x[x>quantile(x,probs=.1) & x<quantile(x,probs=.9)]))
Nik
nik- Bavard
- Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008
Re: Aide_Sélection_Données_Sous_R
Oula merci, je viens seulement de voir ta réponse Nik, j'essaye de suite. Par contre, a quoi sert la commande: "value <- runif(108)"
Merci
Merci
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
Salut salut. Pour la commande: "value <- runif(108)",
value est le nom de l'objet créé, et la fonction runif(108) va te donner n=108 valeurs tirées aléatoires (r pour random) selon une loi uniforme (unif) entre 0 et 1 (valeurs par défauts si tu ne précises rien).
En cas de doute sur une fonction dans R, n'hésite pas à consulter l'aide, elle est très bien faite. Pour la faire apparaitre: >?runif
Tu peux aussi faire ta recherche sur le net avec google, normalement tu tomberas sur l'aide en ligne. A+.
Tania
value est le nom de l'objet créé, et la fonction runif(108) va te donner n=108 valeurs tirées aléatoires (r pour random) selon une loi uniforme (unif) entre 0 et 1 (valeurs par défauts si tu ne précises rien).
En cas de doute sur une fonction dans R, n'hésite pas à consulter l'aide, elle est très bien faite. Pour la faire apparaitre: >?runif
Tu peux aussi faire ta recherche sur le net avec google, normalement tu tomberas sur l'aide en ligne. A+.
Tania
tania- Bavard
- Nombre de messages : 77
Age : 40
Niveau et domaine de formation : master 2 écologie évolution biométrie
Etablissement : ucbl
Date d'inscription : 27/10/2007
Re: Aide_Sélection_Données_Sous_R
C'est cool ça marche !! Merci à toi Nik, tu gères et merci aux autres également, ce forum est super !
A+
Did
A+
Did
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
you're welcome
nik- Bavard
- Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008
Re: Aide_Sélection_Données_Sous_R
Tiens Nik encore une ptite question: je souhaiterais maintenant exporter les résultats dans un fichier .csv avec deux colonnes: paramétre et result (la moyenne obtenue)
Merci de ton aide
Did
Merci de ton aide
Did
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
il suffit d'utiliser la fonction write.csv() une fois que tu as la table qui t'intéresse.
par exemple avec :
il y a différentes options dans write.csv, tu peux consulter l'aide en faisant ?write.csv
a+
par exemple avec :
- Code:
write.csv(data.frame(result)),file = "moncsv.csv")
il y a différentes options dans write.csv, tu peux consulter l'aide en faisant ?write.csv
a+
nik- Bavard
- Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008
Re: Aide_Sélection_Données_Sous_R
Bonjour à tous, j'ai encore besoin de votre précieuse aide, concernant les graphiques cette fois-ci.
Toujours avec la même base de données + la moyenne trouvée (grâce à Nik) pour chaque paramètre, je souhaiterais afficher un graphique (nuage de points) pour chaque paramètre, avec pour abscisse le numéro du lot et pour ordonnée la valeur, et ajouter également sur chaque graph la droite correspondant à la moyenne trouvée pour le paramètre.
Merci de votre aide, j'éspère avoir été clair
Toujours avec la même base de données + la moyenne trouvée (grâce à Nik) pour chaque paramètre, je souhaiterais afficher un graphique (nuage de points) pour chaque paramètre, avec pour abscisse le numéro du lot et pour ordonnée la valeur, et ajouter également sur chaque graph la droite correspondant à la moyenne trouvée pour le paramètre.
Merci de votre aide, j'éspère avoir été clair
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
Salut. Pour le graphe de ton nuage de points, la fonction est plot(x,y), avec x le vecteur qui contient tes abscisses et y celui qui contient tes ordonnées. Pour rajouter une droite c'est la fonction abline. Si tu veux une droite horizontale qui représente ta moyenne, l'intercept (ou ordonnée à l'origine, argument a) vaut ta moyenne et la pente (b) vaut 0. Tu peux aussi rentrer une régression linéaire (lmX~Y) pour définir ta droite. Pour les options de graphe (type et couleur de points..) il y a pas mal de détails dans la fiche de td r14 disponible sur le site du pbil:
http://pbil.univ-lyon1.fr/R/enseignement.html
Sinon tu peux aussi représenter tes données avec des boîtes à moustaches (fonction boxplot), qui te donne une boîte par modalité. J'espère que c'est clair. A+
http://pbil.univ-lyon1.fr/R/enseignement.html
Sinon tu peux aussi représenter tes données avec des boîtes à moustaches (fonction boxplot), qui te donne une boîte par modalité. J'espère que c'est clair. A+
Dernière édition par tania le Mar 7 Juil - 11:11, édité 1 fois
tania- Bavard
- Nombre de messages : 77
Age : 40
Niveau et domaine de formation : master 2 écologie évolution biométrie
Etablissement : ucbl
Date d'inscription : 27/10/2007
Re: Aide_Sélection_Données_Sous_R
Merci Tania mais le probleme est que la fonction "plot" agit sur deux variables x et y quantitaives et moi le y (n° du lot) est une variable quantitative
D'autre part, l'autre pb est au niveau de la boucle, afin d'afficher un graph pour chaque paramètre, je ne suis tjs pas a l'aise avec ça ...
Merci
A+
D'autre part, l'autre pb est au niveau de la boucle, afin d'afficher un graph pour chaque paramètre, je ne suis tjs pas a l'aise avec ça ...
Merci
A+
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
oups, rectification, "plot" agit sur deux variables qualitatives
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
A priori le N°de lot c'est X (ton abscisse), pas Y (ton paramètre). Du coup la fonction plot marche bien mais te fais des boites à moustaches. Si tu veux absolument des points, il te suffit de créer un vecteur numérique qui assigne un nombre (1,2..n) à chaque lot. Pour ta boucle, tu veux enregistrer au fur et à mesure chaque graphe? En quel format?
tania- Bavard
- Nombre de messages : 77
Age : 40
Niveau et domaine de formation : master 2 écologie évolution biométrie
Etablissement : ucbl
Date d'inscription : 27/10/2007
Re: Aide_Sélection_Données_Sous_R
Salut,
tapply ne se limite pas à faire des moyennes ou autre stat. Tu peux parfaitement faire des graphs :
Si jamais tu veux mettre un titre différent à chaque graphique (genre le nom du paramètre) alors la boucle devient incontournable pour ce que j'en sais.
Avec ce code il faut que dans ton tableau de données, les lots soient toujours ordonnés de 1 à 36 dans le même ordre qq soit le paramètre et qu'il y ait toujurs 36 valeurs (sinon un length(x) à la place de 36 devrait contourner un pb de différence de longueur)
lol on va finir par croire que je ne fais que des tapply
tapply ne se limite pas à faire des moyennes ou autre stat. Tu peux parfaitement faire des graphs :
- Code:
par(mfrow=c(3,3),ask=T,bty='l') ##qqs paramètres graphiques
tapply(value, param, function(x) {plot(x~c(1:36));abline(h=mean(x))})
Si jamais tu veux mettre un titre différent à chaque graphique (genre le nom du paramètre) alors la boucle devient incontournable pour ce que j'en sais.
Avec ce code il faut que dans ton tableau de données, les lots soient toujours ordonnés de 1 à 36 dans le même ordre qq soit le paramètre et qu'il y ait toujurs 36 valeurs (sinon un length(x) à la place de 36 devrait contourner un pb de différence de longueur)
lol on va finir par croire que je ne fais que des tapply
nik- Bavard
- Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008
Re: Aide_Sélection_Données_Sous_R
J'ai essayé ta formule Nik et voici le message d'erreur:
Erreur dans model.frame.default(formula = x ~ c(1:36), na.action = NULL) :
les longueurs des variables diffèrent (trouvé pour 'c(1:36)')
D'autre part, j'aimerais en effet différencier chacun des graphes en mettant pour titre le nom du paramètre, si possible
Merci
A+
Erreur dans model.frame.default(formula = x ~ c(1:36), na.action = NULL) :
les longueurs des variables diffèrent (trouvé pour 'c(1:36)')
D'autre part, j'aimerais en effet différencier chacun des graphes en mettant pour titre le nom du paramètre, si possible
Merci
A+
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
Cela indique que pour l'un de tes paramètres, tu n'as pas 36 valeurs.
sinon pour le code avec le nom :
J'ai pas testé alors peut être qu'il y a des petites erreurs
- Code:
tapply(value, param, function(x) {plot(x~c(1:length(x)));abline(h=mean(x))})
sinon pour le code avec le nom :
- Code:
par(mfrow=c3,3)
for (i in 1:nlevels(param)){
plot(1:length(param[param==levels(param)[i]]),value[param==levels(param)[i]])
abline(h=tapply(value,param,mean)[i])
}
J'ai pas testé alors peut être qu'il y a des petites erreurs
nik- Bavard
- Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008
Re: Aide_Sélection_Données_Sous_R
En fait, lorsque je demande de tracer la droite horizontale mean, je parle en fait des valeurs que l'on a trouver précédemment (moyenne en enlevant les 10% de chaque côté, pour chaque paramètre), toi Nik tu confond avec la fonction mean() qui va me tracer la moyenne brute du lot et ce n'est pas ce que je recherche en fait
Je souhaiterais tracer sur chacun des graphs la droite ayant pour valeur la moyenne que l'on avait trouvée et qui est stockée en mémoire. Autre point, comment faire pour que R nous affiche les graphs pour tous les paramètres (ici 53 graphs normalement) car R n'affiche que les derniers.
Merci de votre aide
Didier
Je souhaiterais tracer sur chacun des graphs la droite ayant pour valeur la moyenne que l'on avait trouvée et qui est stockée en mémoire. Autre point, comment faire pour que R nous affiche les graphs pour tous les paramètres (ici 53 graphs normalement) car R n'affiche que les derniers.
Merci de votre aide
Didier
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
non non je ne confond pas
Je n'ai tout simplement pas tout repris t'ayant déjà donné auparavant le moyen de le faire.
Tu vois que dans le tracé de la moyenne (à la fin de la boucle) je réutilise le même type de syntaxe que ce que je t'avais donné dans un premier temps. Donc tu peux reprendre le script précédent pour les moyennes de l'intervalle inter-quantile ( j'ai juste eu la flemme de faire un copier/collé )
R c'est comme tout, il faut avoir quelques méthodes sous le coude pour pouvoir les combibner astucieusement afin de gagner du temps.
Je t'ai également indiqué le par(ask=T) qui permet de stopper l'ouverture successive de fenêtre graphique jusqu'à ce qu'on appuie sur une touche. Cela permet au moins d'avoir le temps de visualiser les graphiques et même de les imprimer. Il faut donc jouer avec le paramètre graphique mfrow pour découper ta fenêtre graphique pour afficher plusieurs graph à la fois mais tu ne pourras pas mettre les 53 sur une même fenêtre sinon ce sera illisible d'où l'appel à ask.
Tu peux aussi sauvegarder tes graphs successif par les fonction pdf() ou encore jpeg(), regardes les aides correspondantes.
Je n'ai tout simplement pas tout repris t'ayant déjà donné auparavant le moyen de le faire.
Tu vois que dans le tracé de la moyenne (à la fin de la boucle) je réutilise le même type de syntaxe que ce que je t'avais donné dans un premier temps. Donc tu peux reprendre le script précédent pour les moyennes de l'intervalle inter-quantile ( j'ai juste eu la flemme de faire un copier/collé )
R c'est comme tout, il faut avoir quelques méthodes sous le coude pour pouvoir les combibner astucieusement afin de gagner du temps.
Je t'ai également indiqué le par(ask=T) qui permet de stopper l'ouverture successive de fenêtre graphique jusqu'à ce qu'on appuie sur une touche. Cela permet au moins d'avoir le temps de visualiser les graphiques et même de les imprimer. Il faut donc jouer avec le paramètre graphique mfrow pour découper ta fenêtre graphique pour afficher plusieurs graph à la fois mais tu ne pourras pas mettre les 53 sur une même fenêtre sinon ce sera illisible d'où l'appel à ask.
Tu peux aussi sauvegarder tes graphs successif par les fonction pdf() ou encore jpeg(), regardes les aides correspondantes.
nik- Bavard
- Nombre de messages : 57
Niveau et domaine de formation : Doctorat Ecologie
Etablissement : UCB Lyon1
Date d'inscription : 22/09/2008
Re: Aide_Sélection_Données_Sous_R
Re tout le monde, en fait mes lots portent chacun un numero bien précis (ex: Lot 1: J918WID, Lot 2: J919VRA, Lot 3=J917KPO, .....) ceux-ci étant rangés par ordre chronologique.
Cependant, lorsque je trace mes graphes, R affiche les lots en abscisse mais ils sont rangés par ordre alphabétique, du coup tout est faussé car je souhaiterais suivre mon graphe par ordre chronologique et non pas par ordre alphabétique comme le fait R de manière systématique.
Qqn aurait-il une solution pour forcer R à ne pas effectuer le tri par ordre alphabétique ?
Merci
Did
Cependant, lorsque je trace mes graphes, R affiche les lots en abscisse mais ils sont rangés par ordre alphabétique, du coup tout est faussé car je souhaiterais suivre mon graphe par ordre chronologique et non pas par ordre alphabétique comme le fait R de manière systématique.
Qqn aurait-il une solution pour forcer R à ne pas effectuer le tri par ordre alphabétique ?
Merci
Did
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Re: Aide_Sélection_Données_Sous_R
Nik elle est passée ou ta réponse ? i me semblait ke tavais répondu ...
did10- timide
- Nombre de messages : 15
Age : 38
Niveau et domaine de formation : Master 2 Statistiques
Etablissement : UFR ST Besançon
Date d'inscription : 03/06/2009
Page 1 sur 2 • 1, 2
La Doua Dans l'Oeil :: Biologie :: Biométrie & Bioinformatique :: Questions & Débats :: Biostatistiques
Page 1 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum