Trucs pour LaTeX & R

Barplot de pourcentage avec intervalles de confiance

dimanche 12 août 2018 par Philippe MICHEL

21/05/2018 on passe à tidyverse ,c’est à dire à purrr pour faire les calculs & surtout à ggplot2 pour créer le graphique.

On dessine un barplot en % du premier niveau de la variable de test (testv) qui doit être dichotomique.

La technique consiste à définir trois vecteurs : un avec les pourcentages gg, un avec les bornes inférieures de l’intervalle de confiance gb & un avec les bornes supérieures gh.

Le calcul de l’intervalle de confiance se fait par transformation angulaire [1]. Plus de renseignement ?

Par exemple, on veut présenter le pourcentage de femme (variable testv en F/H) pour plusieurs catégories professionnelles (varp ).

  • testv la variable de test
  • varx est la variable à présenter.
  • titre est le titre du graphique.

J’ai volontairement laissé des couleurs très clinquantes, à vous de voir...

# Philippe MICHEL 2017
#
barconf <- function(varx,testv,tit="titre"){
                                        # Création de la table
  nom <- levels(varx)
tta <- as.data.frame.matrix(table(testv,varx)) # table de contingence
                                        # Calcul des % & des bornes de l'IC
    gg <- map_dbl(tta, function(x) 100*x[1]/sum(x))
    tainf <- map_dbl(tta, function(x) asin(sqrt(x[1]/sum(x)-1/(2*sum(x))))-1.96/(2*sqrt(sum(x))))
    tasup <- map_dbl(tta, function(x) asin(sqrt(x[1]/sum(x)+1/(2*sum(x))))+1.96/(2*sqrt(sum(x))))
    gb <- 100*sin(tainf)^2
gh <- 100*sin(tasup)^2
# On regroupe ces variables dans un data.frame
ggdf <- data.frame(nom,gg,gb,gh)
# On attaque le graphique
gd <- ggplot(ggdf, aes(x=nom, y=gg, fill=nom))
gd <- gd + geom_bar(stat="identity")
gd <- gd +  geom_errorbar(aes(ymin=gb, ymax=gh), width=.8,size=0.8) # On dessine les barres d'erreur
gd <- gd + labs(title = tit,
                y="%"
                ) # Titres des axes & du graphique
gd <- gd + theme_light() # Thème simple, idéal pour publication
gd <- gd + theme(plot.title = element_text(size=18, face="bold"), 
                           axis.title.x = element_blank(),
                           axis.title.y= element_text(size=16, face="bold"),
                           axis.text.x = element_text(size=16, face="bold"),
                 axis.text.y = element_text(size=16, face="bold"),
                 legend.position = "none",
                 )
gd <- gd + scale_x_discrete(limits=levels(varx)) # Pour éviter un reclassement des niveaux
#
plot(gd)   
}

Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 1953 / 148396

Suivre la vie du site fr  Suivre la vie du site R   ?    |    titre sites syndiques OPML   ?

Site réalisé avec SPIP 3.2.1 + AHUNTSIC

Creative Commons License