Moyennes croisées avec la fonction means()
L'essentiel de cette page
L'essentiel de cette page
La fonction means() dont voici le programme ci-dessous systématise le calcule de la moyenne en fonction d'une ou plusieurs variables de catégories. Il fournit au passage écart-type et intervalle de confiance, ce qui la rend plus performante en routine que la fonction by().
- La fonction means() permet de calculer automatiquement tous les moyennes pour les paramètres existants ou en fonction de deux listes de paramètres
means = function(data=c(),par=c(),par2=c()) { # Version 2019 - v0.0.8
if ((length(data)==0)| (length(par)==0)){
if ( (length(data)==0)) {cat("Erreur ! Le vecteur ",substitute(data),"est vide.\n")}
if ( (length(par)==0)) {cat("Erreur ! Le vecteur ",substitute(par),"est vide.\n")}
} else { if (length(par2)>0) {
if ( (length(par) != length(data)) | (length(par2) != length(data)) | (length(par) != length(par2)) ) {
cat("Erreur ! Les trois vecteurs n'ont pas la même taille.\n")
}else {
if (length(data[is.na(data)]>0)|length(par[is.na(par)]>0)|length(data[is.na(par2)]>0))
{cat("Attention ! Présence de valeurs vides NA\n")}
tab_temp <- na.omit(data.frame(data,par,par2))
data <- tab_temp[,1];par <- tab_temp[,2];par2 <- tab_temp[,3]
y = unique(par) ; y2 = unique(par2)
matrice = matrix(rep(NA,length(y)*length(y2)), nc=length(y2), nr=length(y), byrow=F)
rownames(matrice) = y ; colnames(matrice) = y2
matrice_moyennes = matrice ; matrice_sd = matrice ; matrice_ic = matrice
resultat = c()
for (i in c(1:length(y2))){
for (j in c(1:length(y))) {
temp = data[par2==y2[i]&par==y[j]]
matrice_moyennes[j,i] = mean(temp,na.rm = TRUE)
if(length(temp)==0){sd_temp=NA}
else {sd_temp = sd(temp,na.rm = TRUE)}
matrice_sd[j,i] = sd_temp
if(length(temp)==0){ic_temp=NA}
else {ic_temp = sd(temp,na.rm = TRUE)*1.96/sqrt(length(temp))}
matrice_ic[j,i] = ic_temp}}
resultat$moyennes = matrice_moyennes
resultat$sd = matrice_sd
resultat$ic = matrice_ic ;
return(resultat)}
} else {
if (length(par) != length(data)){
cat("Erreur ! Les deux vecteurs n'ont pas la même taille.\n")
} else {
if (length(data[is.na(data)]>0)|length(par[is.na(par)]>0))
{cat("Attention ! Présence de valeurs vides NA\n")}
par = par[!is.na(data)];data = data[!is.na(data)];data = data[!is.na(par)];par = par[!is.na(par)]
temp = split(data,par,drop=TRUE)
x = c() ; y = sort(unique(par)) ; z = c() ; w = c() ; resultat = list()
for (i in c(1:(length(y)))) {
x = c(x,mean(temp[[i]],na.rm = TRUE))
if (length(temp[[i]]) > 1) {
z = c(z,sd(temp[[i]],na.rm = TRUE))
w = c(w,sd(temp[[i]],na.rm = TRUE)*1.96/sqrt(length(temp[[i]])))}
else {z = c(z,NA);w = c(w,NA)}
}
resultat$moyennes = x[order(y)] ; resultat$sd = z[order(y)]
resultat$ic = w[order(y)] ; resultat$parametres = y[order(y)]
return(resultat)}}} }
# Voir l'exemple de l'application means ci-dessous
- Exemple d'application de la fonction means()
# Etape 1 - Je colle la fonction means dans le logiciel R (ci-dessus)
# Etape 2 - voici des données (exemple) - ici je veux le nombre moyen de colis reçus par jour
Nombre_de_colis = rnorm(91,10) ; Jours = rep(c("L","M","M","J","V","S","D"),13)
Nombre_de_colis # colis reçus par jour sur une période de 91 jours
Jours # Jours concernés
# Calcul de ces ces moyennes et intervalles de confiance
# Calcule le nombre moyen de colis et l'intervalle de confiance correspondant pour chaque jour étudié.
analyse = means(Nombre_de_colis, Jours)
analyse
# Etape 3 - lecture des résultats
# avec analyse$moyennes les moyennes pour chaque jour
# analyse$parametres les paramètres propres à chaque moyenne (ici les types de jours)
# analyse$sd les écart-types correspondants
# analyse$ic les intervalles de confiance correspondants
#- - - - - - - Autre exemple plus complexe - - - - - - -
# Calculer la taille moyenne en fonction de l'âge et du sexe
Taille = rnorm(100,170) ; Age = rep(c(20:39),5) ; Sexe = c(rep("F",50),rep("G",50))
means(Taille,Age,Sexe)