méthode de calcul quantile dans summary()

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

Delphine Corneil
Messages : 96
Enregistré le : 12 Fév 2014, 13:29

méthode de calcul quantile dans summary()

Messagepar Delphine Corneil » 13 Avr 2017, 09:53

Bonjour,
J'ai une question concernant la méthode de calcul du quantile dans la fonction summary().
J'ai le vecteur ci-dessous

Code : Tout sélectionner

a<-c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,5,6)
quantile(a)
summary(a)


Je souhaiterai plutôt avoir le quantile selon la méthode de calcul appelée "type 5" dans la fonction quantile().

Code : Tout sélectionner

quantile(a,type=5)


Comment afficher un summary avec cet algorithme de quantile plutôt que celui par défaut qui ne me convient pas?
Je n'ai pas trouvé d'arguments de la fonction summary() qui me permette de le faire mais je pense que celui-ci doit exister.

Merci d'avance,
Bonne journée
In R i trust

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: méthode de calcul quantile dans summary()

Messagepar Mickael Canouil » 13 Avr 2017, 14:18

Bonjour,

La solution la plus "simple":

Code : Tout sélectionner

mySummary <- function (x, na.rm = FALSE) {c(quantile(x, type = 5, na.rm = na.rm), Mean = mean(x, na.rm = na.rm))}
 mySummary(a)
    0%    25%    50%    75%   100%   Mean
1.0000 1.5000 2.5000 3.5000 6.0000 2.6875


Sinon, la fonction "summary" et plus exactement la méthode "summary.default" est ce que vous souhaitez modifier.
Par exemple en ajoutant un argument "quantile.type" à la méthode "summary.default".

Code : Tout sélectionner

summary.custom<- function (object, ..., quantile.type = 5, digits = max(3L, getOption("digits") -
    3L))
{
    if (is.factor(object))
        return(summary.factor(object, ...))
    else if (is.matrix(object))
        return(summary.matrix(object, digits = digits, ...))
    value <- if (is.logical(object))
        c(Mode = "logical", {
            tb <- table(object, exclude = NULL)
            if (!is.null(n <- dimnames(tb)[[1L]]) && any(iN <- is.na(n))) dimnames(tb)[[1L]][iN] <- "NA's"
            tb
        })
    else if (is.numeric(object)) {
        nas <- is.na(object)
        object <- object[!nas]
        qq <- stats::quantile(object, type = quantile.type)
        qq <- signif(c(qq[1L:3L], mean(object), qq[4L:5L]), digits)
        names(qq) <- c("Min.", "1st Qu.", "Median", "Mean", "3rd Qu.",
            "Max.")
        if (any(nas))
            c(qq, `NA's` = sum(nas))
        else qq
    }
    else if (is.recursive(object) && !is.language(object) &&
        (n <- length(object))) {
        sumry <- array("", c(n, 3L), list(names(object), c("Length",
            "Class", "Mode")))
        ll <- numeric(n)
        for (i in 1L:n) {
            ii <- object[[i]]
            ll[i] <- length(ii)
            cls <- oldClass(ii)
            sumry[i, 2L] <- if (length(cls))
                cls[1L]
            else "-none-"
            sumry[i, 3L] <- mode(ii)
        }
        sumry[, 1L] <- format(as.integer(ll))
        sumry
    }
    else c(Length = length(object), Class = class(object), Mode = mode(object))
    class(value) <- c("summaryDefault", "table")
    value
}
Mickaël
mickael.canouil.fr | rlille.fr

Delphine Corneil
Messages : 96
Enregistré le : 12 Fév 2014, 13:29

Re: méthode de calcul quantile dans summary()

Messagepar Delphine Corneil » 13 Avr 2017, 15:03

Merci Mickael,
Je comprends bien comment tu modifies la fonction summary. Je pensais qu'il y aurait un attribut de la fonction summary() à spécifier. C'est dommage que ce n'ai pas été pensé. :(
Bonne fin de journée
In R i trust


Retourner vers « Questions en cours »

Qui est en ligne

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