calcul nombre d'effectifs par groupe d'articles quantiles

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

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Pierre-Yves Berrard » 21 Mai 2019, 13:20

Clarisse Burtin a écrit :d'accord je crois comprendre, mais sommes nous obligés de procéder ainsi pour calculer le nombre nb, est-ce fiable?

Personnellement je ne suis pas convaincu depuis le début, mais ce n'est pas une forum de statistiques, donc mes remarques sur la pertinence sont déjà un peu hors-sujet !

Clarisse Burtin a écrit :sinon comment faire directement par groupe de code articles avec tout mon fichier?

On crée une fonction avec nos instructions précédentes...

Code : Tout sélectionner

nb_autour_q75 <- function(p, probs = c(.7, .8)) {
  q <- quantile(p, probs)
  sum(p >= q[1] & p <= q[2])
}

... qu'on applique à chaque groupe

Code : Tout sélectionner

res1 <- tapply(donnees$prix, donnees$Article.Code, nb_autour_q75)

# pour changer l'intervalle par défaut
res2 <- tapply(donnees$prix, donnees$Article.Code, nb_autour_q75, probs = c(.65, .85))
PY

Clarisse Burtin
Messages : 24
Enregistré le : 21 Mai 2019, 06:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Clarisse Burtin » 21 Mai 2019, 14:23

d'accord merci oui je comprends d'un point de vue statistique j'ai testé pour les formules
comment puis-je sinon mettre ces résultats là avec mes résultats dans ma formule (qui génère un fichier) juste à côté?

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Pierre-Yves Berrard » 21 Mai 2019, 14:59

N'ayant jamais utilisé Rcommander, je ne sais pas.
PY

Clarisse Burtin
Messages : 24
Enregistré le : 21 Mai 2019, 06:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Clarisse Burtin » 21 Mai 2019, 15:00

Pierre-Yves Berrard a écrit :N'ayant jamais utilisé Rcommander, je ne sais pas.

même sans forcément passer par Rcmdr? J'ai les deux formules, il me faut juste les joindre dans un même fichier

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Pierre-Yves Berrard » 21 Mai 2019, 15:03

Que donne str de la première formule

Code : Tout sélectionner

str(numsummary(...))
?
PY

Clarisse Burtin
Messages : 24
Enregistré le : 21 Mai 2019, 06:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Clarisse Burtin » 22 Mai 2019, 06:53

Pierre-Yves Berrard a écrit :Que donne str de la première formule

Code : Tout sélectionner

str(numsummary(...))
?

Bonjour,
Alors j'ai :

Code : Tout sélectionner

resume<-numSummary(Schneider[,"PUHT", drop=FALSE], groups=Schneider$Article.Code,
  statistics=c("mean", "sd", "IQR", "quantiles"), quantiles=c(0,.25,.5,.75,1))
str(resume)

Code : Tout sélectionner

Rcmdr> str(resume)
List of 4
 $ type      : num 4
 $ table     : num [1:5131, 1:8] 34.75 15.76 10.61 9.06 161.37 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ Group    : chr [1:5131] "00002005433" "00002006622" "00002006986" "00002006998" ...
  .. ..$ Statistic: chr [1:8] "mean" "sd" "IQR" "0%" ...
 $ statistics: chr [1:4] "mean" "sd" "IQR" "quantiles"
 $ n         : num [1, 1:5131] 3 1 1 3 1 5 4 2 3 1 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr "PUHT"
  .. ..$ : chr [1:5131] "00002005433" "00002006622" "00002006986" "00002006998" ...
 - attr(*, "class")= chr "numSummary"

J'ai essayé de fusionner mes deux fichiers (celui où j'ai déjà moyenne, quantiles,etc avec celui où j'ai le nombre de stocks en intervalle) avec Rcmdr
et je tombe sur cette erreur :

Code : Tout sélectionner

MergedDataset <- mergeRows(ventefusion, fusion, common.only=TRUE)
cela m'affiche zéro...
ou j'ai essayé :

Code : Tout sélectionner

MergedDataset <- merge(ventefusion, fusion, all=TRUE, by="row.names")
rownames(MergedDataset) <- MergedDataset$Row.names
MergedDataset$Row.names <- NULL

Et cela me met n'importe quoi....

Clarisse Burtin
Messages : 24
Enregistré le : 21 Mai 2019, 06:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Clarisse Burtin » 22 Mai 2019, 07:14

de même il y a quelque chose que je ne comprends pas, je viens de m'apercevoir que mon fichier avec les codes groupés contenant la moyenne, quantiles etc a 5132 lignes, et si j'applique votre code pour avoir le nombre de stocks par groupe de code article j'en ai 3142 ..... il y a un pb?

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Pierre-Yves Berrard » 22 Mai 2019, 09:40

L'objet créé par Rcommander étant un peu exotique, il est sûrement plus simple de repartir des données de base que d'essayer de le modifier.

Améliorons un peu la fonction précédente pour quelle retourne le nombre et les quantiles dans un data.frame :

Code : Tout sélectionner

moncalcul <- function(p, probs = c(.7, .8)) {

  q <- as.vector(quantile(p, probs))
  nb <- sum(p >= q[1] & p <= q[2])
 
  data.frame(
    Q1 = q[1],
    Q2 = q[2],
    NB = nb,
    stringsAsFactors = FALSE
  )
 
}

Test pour les prix d'un seul article :

Code : Tout sélectionner

moncalcul(c(1,1,1,1,2,2,2,3,5))
#>   Q1  Q2 NB
#> 1  2 2.4  3

Pour l'appliquer à chaque article, chargeons 2 packages facilitant les manipulations de données :

Code : Tout sélectionner

library(dplyr)
library(tidyr)

Résultat :

Code : Tout sélectionner

res <-
  donnees %>%
  group_by(Article.Code) %>%
  summarise(t = list(moncalcul(PUHT))) %>%
  unnest(t)
PY

Clarisse Burtin
Messages : 24
Enregistré le : 21 Mai 2019, 06:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Clarisse Burtin » 22 Mai 2019, 10:25

alors oui ça marche merci!
donc cela correspond à ma fourchette de prix aux alentours de 75% c'est bien ça?
Par contre comment cela se fait-il que je n'ai que soit 0,1 ou 2 dans mes nb? alors qu'avec la fonction nb_autour_75 j'en avais beaucoup plus?

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Pierre-Yves Berrard » 22 Mai 2019, 11:51

Il s'agit des valeurs de prix qui se trouvent entre les quantile 70% et le quantile 80%.
Normalement cela donne les même résultats que la fonction précédente.
PY

Clarisse Burtin
Messages : 24
Enregistré le : 21 Mai 2019, 06:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Clarisse Burtin » 22 Mai 2019, 12:00

Pierre-Yves Berrard a écrit :Il s'agit des valeurs de prix qui se trouvent entre les quantile 70% et le quantile 80%.
Normalement cela donne les même résultats que la fonction précédente.

Code : Tout sélectionner

library(readxl)
datatest <- read_excel("Vente du 1_1_18 au 30_04_19 SCHNEIDER Hors DRA  DRM v2.xlsx")

#p <- c(1, 1, 1, 1, 3, 4)
#q <- quantile(p, probs = c(.7, .8), na.rm=TRUE) # ou c(.65, .85) ...
#nb <- sum(p >= q[1] & p <= q[2])
moncalcul <- function(datatest, probs = c(.7, .8)) {
 
  datatest<- as.vector(quantile(datatest, probs))
  nb <- sum(datatest >= q[1] & datatest <= q[2])
 
  data.frame(
    Q1 = datatest[1],
    Q2 = datatest[2],
    NB = nb,
    stringsAsFactors = FALSE
  )
 
}
library(dplyr)
library(tidyr)
res <-
  datatest %>%
  group_by(datatest$`Article Code`) %>%
  summarise(t = list(moncalcul(datatest$PUHT))) %>%
  unnest(t)
write.table(res, file="datatest")
nb_autour_q75 <- function(datatest, probs = c(.7, .8)) {
  q <- quantile(datatest, probs)
  sum(datatest >= q[1] & datatest <= q[2])
}
res1bis <- tapply(datatest$PUHT, datatest$`Client Code`, nb_autour_q75)
write.table(res1bis, file="Res1bis")

Pourtant j'ai bien refait et je n'obtiens que des 0,1 ou 2 avec res, je ne comprends pas

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Pierre-Yves Berrard » 22 Mai 2019, 12:16

Dans moncalcul, vous avez aussi remplacé par q par datatest, ce qui est faux (q est le vecteur des quantiles, pas le vecteur des prix).
Pas besoin de modifier la fonction (ou alors renommer les élements partout de la même façon).
PY

Clarisse Burtin
Messages : 24
Enregistré le : 21 Mai 2019, 06:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Clarisse Burtin » 22 Mai 2019, 12:38

Pierre-Yves Berrard a écrit :Dans moncalcul, vous avez aussi remplacé par q par datatest, ce qui est faux (q est le vecteur des quantiles, pas le vecteur des prix).
Pas besoin de modifier la fonction (ou alors renommer les élements partout de la même façon).

alors je viens de rectifier et j'obtiens des résultats bizarres...

Code : Tout sélectionner

moncalcul <- function(datatest, probs = c(.7, .8)) {
 
  q<- as.vector(quantile(datatest, probs))
  nb <- sum(datatest >= q[1] & datatest <= q[2])
 
  data.frame(
    Q1 = datatest[1],
    Q2 = datatest[2],
    NB = nb,
    stringsAsFactors = FALSE
  )
 
}
library(dplyr)
library(tidyr)
res <-
  datatest %>%
  group_by(datatest$`Article Code`) %>%
  summarise(t = list(moncalcul(datatest$PUHT))) %>%
  unnest(t)
write.table(res, file="datatest")
nb_autour_q75 <- function(datatest, probs = c(.7, .8)) {
  q <- quantile(datatest, probs)
  sum(datatest >= q[1] & datatest <= q[2])
}
res1bis <- tapply(datatest$PUHT, datatest$`Client Code`, nb_autour_q75)
write.table(res1bis, file="Res1bis")

je ne vois pas d'autres erreurs pourtant...

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Pierre-Yves Berrard » 22 Mai 2019, 12:42

Vous avez remplacé q par datatest à d'autres endroits (Q1 = , Q2 =). Mon conseil : utiliser la fonction telle que je l'ai définie.
PY

Clarisse Burtin
Messages : 24
Enregistré le : 21 Mai 2019, 06:30

Re: calcul nombre d'effectifs par groupe d'articles quantiles

Messagepar Clarisse Burtin » 22 Mai 2019, 12:55

Pierre-Yves Berrard a écrit :Vous avez remplacé q par datatest à d'autres endroits (Q1 = , Q2 =). Mon conseil : utiliser la fonction telle que je l'ai définie.

Code : Tout sélectionner

library(readxl)
datatest <- read_excel("Vente du 1_1_18 au 30_04_19 SCHNEIDER Hors DRA  DRM v2.xlsx")

#p <- c(1, 1, 1, 1, 3, 4)
#q <- quantile(p, probs = c(.7, .8), na.rm=TRUE) # ou c(.65, .85) ...
#nb <- sum(p >= q[1] & p <= q[2])
moncalcul <- function(datatest, probs = c(.7, .8)) {
 
  q<- as.vector(quantile(datatest, probs))
  nb <- sum(datatest >= q[1] & datatest <= q[2])
 
  data.frame(
    Q1 = q[1],
    Q2 = q[2],
    NB = nb,
    stringsAsFactors = FALSE
  )
 
}
library(dplyr)
library(tidyr)
res <-
  datatest %>%
  group_by(datatest$`Article Code`) %>%
  summarise(t = list(moncalcul(datatest$PUHT))) %>%
  unnest(t)
write.table(res, file="datatest")
nb_autour_q75 <- function(datatest, probs = c(.7, .8)) {
  q <- quantile(datatest, probs)
  sum(datatest >= q[1] & datatest <= q[2])
}
res1bis <- tapply(datatest$PUHT, datatest$`Client Code`, nb_autour_q75)
write.table(res1bis, file="Res1bis")

alors j'ai bien remis les q mais j'ai toujours ces résultats bizarres....


Retourner vers « Questions en cours »

Qui est en ligne

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