Calcul de percentiles dans la fonction aggregate

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Nathalie Wessel
Messages : 2
Enregistré le : 11 Avr 2017, 13:25

Calcul de percentiles dans la fonction aggregate

Messagepar Nathalie Wessel » 11 Avr 2017, 15:19

Bonjour,
je suis plutôt novice avec R donc je suis désolée si ma question parait un peu simple. J'ai un dataframe de plus de 5000 lignes qui comporte une colonne unique de résultats. Chacun de ces résultat est assigné à un paramètre, une espèce, un lieu, et une année. En tout, j'ai une dizaine de paramètres, 3 espèces, 5 lieux et 5 années. Je cherche à calculer les percentiles 95 des résultats pour chacune de mes 330 catégories "paramètre/espèce/lieu/année".
Avec la fonction aggregate, j'ai pu calculer de la façon suivante les moyennes et les médianes, mais je n'arrive pas à avoir le percentile 95.

df<-read.csv2("df.csv")
m1<-aggregate(resultat~parametre+lieu+année+espece,df,median)
m1
m2<-aggregate(resultat~parametre+lieu+année+espece,df,mean)
m2


Lorsque j'essaye de calculer le percentile comme suit :
m3<-aggregate(resultat~parametre+lieu+année+espece,df,quantile(df$resultat,probs=.95))
m3


J'ai le message d'erreur suivant :
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'FUN' of mode 'function' was not found


Quelqu'un pourrait il me venir en aide?

Merci beaucoup!

Nathalie

Dominique Soudant
Messages : 758
Enregistré le : 23 Avr 2008, 11:12
Contact :

Re: Calcul de percentiles dans la fonction aggregate

Messagepar Dominique Soudant » 11 Avr 2017, 16:14

Code : Tout sélectionner

Parametre <- c("CD","Ag")
Lieu <- 1:2
Annee <- 1981:1982
espece <- c("mytilus","crassos")
Mois <- 1:12

df <- expand.grid("lieu"=Lieu,"parametre"=Parametre,"espece"=espece,"année"=Annee,"Mois"=Mois)
df$resultat <- rnorm(nrow(DF))
m2<-aggregate(resultat~parametre+lieu+année+espece,df,mean)
m3<-aggregate(resultat~parametre+lieu+année+espece,df,quantile(df$resultat,probs=0.95)) #Pas OK
m3<-aggregate(resultat~parametre+lieu+année+espece,df,function(x) quantile(x,probs=0.95)) #OK
m3<-aggregate(resultat~parametre+lieu+année+espece,df,quantile,probs=0.95) #OK
aggregate attend un nom de fonction. Il ne reconnaît pas "quantile(df$resultat,probs=0.95)" comme un nom de fonction en revanche un nom de fonction c'est mean ou quantile.

La première soluce consiste à déclarer une fonction anonyme (je crois que c'est le terme consacré) c'est à dire qu'à la volée dans l'appel d'aggregate tu déclares une fonction qui prend en entrée un paramètre x et ce x il le passe à la fonction quantile. x c'est le résultat de l'opération consistant à découper df selon les facteurs. Ainsi chaque subset est passé à la fonction anonyme qui renvoie le résultat de son calcul soit le P95 pour chaque subset induit par les facteurs.

La seconde soluce est moins explicite mais similaire : par défaut les subsets sont passés comme premier argument de la fonction spécifiée. Si cette fonction a plusieurs argument, alors on peut les spécifier après le nom de la fonction.

@+


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité