permet de dire que j'ai un dataframe qui ressemble à ceci:R - La pondération par la taille du groupe dans les graphiques à barres
groups <- floor(runif(1000, min=1, max=5))
activity <- rep(c("A1", "A2", "A3", "A4"), times= 250)
endorsement <- floor(runif(1000, min=0, max=2))
value1 <- runif(1000, min=1, max=10)
area <- rep(c("A", "A", "A", "A", "B", "C", "C", "D", "D", "E"), times = 100)
df <- data.frame(groups, activity, endorsement, value1, area)
imprimé:
> head(df)
groups activity endorsement value1 area
1 1 A1 0 7.443375 A
2 1 A2 0 4.342376 A
3 1 A3 0 4.810690 A
4 4 A4 0 3.494974 A
5 3 A1 1 6.442354 B
6 1 A2 0 9.794138 C
Je veux calculer des statistiques descriptives et créer une barre graphiques, mais si vous regardez la variable area
, A
est très bien représenté, tandis que B
et E
ne sont pas très bien représentés.
La variable area
ne m'intéresse pas, mais les statistiques/l'intrigue seront guidées par les zones qui ont une représentation élevée dans l'ensemble de données, donc je dois pondérer les données mais je ne suis pas sûr de la bonne façon de le faire dans les situations suivantes:
moyenne et SD
Je calcul de la moyenne et SD ou value1
comme suit:
df %>% group_by(groups) %>% summarise(mean=mean(value1), sd=sd(value1))
Quelle est la cor façon rectiligne pour calculer une moyenne pondérée/sd pour compenser les différences de taille d'échantillon pour chaque zone (c.-à-d. Je veux donner à chaque area
poids égal)?
diagramme à barres empilées
ggplot(df, aes(groups)) +
geom_bar(aes(fill = activity), position = position_fill(reverse = F))
Les barres représentent les proportions pour la fréquence de chaque activity
dans chaque group
survenus. Encore une fois, cela est principalement dû aux répondants de la région A - y a-t-il un moyen d'équilibrer cela et de calculer les proportions comme si area
avait une représentation égale?
Groupé signifie
ggplot(aes(x = activity, y = value1, fill=factor(groups)), data=df) +
geom_bar(position="dodge", stat="summary", fun.y="mean")+
guides(fill = guide_legend(reverse=F, title="group"))
Les barres représentent la moyenne de value1
pour chaque combinaison group
et activity
. Encore une fois, ces moyennes sont pondérées en faveur de la zone A et la représentation n'est pas égale
proportions de comptage Groupé
summary_df <- df %>% group_by(groups, activity) %>%
summarise(n=n(), count=sum(endorsement)) %>% mutate(prop=(count/n)*100)
ggplot(aes(x = activity, y = prop, fill = factor(groups)), data=summary_df) +
geom_bar(width=0.8, position = position_dodge(width=0.8), stat="identity") +
guides(fill = guide_legend(reverse=F, title="group"))
Pour chaque group
et activity
combinaison, je compte la nombre de personnes qui ont approuvé l'élément (a répondu 1
), et en calculant une proportion du nombre total de personnes dans le sous-groupe
Les 4 problèmes proviennent avant tout du même problème et tous doivent être pondérés par area
pour créer une représentation égale.Cependant, les visualisations sont toutes créées différemment et montrent des choses différentes (moyennes, barres empilées, moyennes groupées, proportions de comptage) et je ne suis pas sûr de la manière correcte de tenir compte des différences de taille d'échantillon dans chaque cas. Y a-t-il un seul correctif qui se propagera à chacun des exemples de graphique?
merci. Existe-t-il une autre option en plus du sous-échantillonnage? Parce que la distribution de 'area' est très déséquilibrée - certaines régions ont presque 100x plus de données que d'autres, donc le downsampling signifie que nous perdrions beaucoup des zones surreprésentées. – Simon
oui,' upSample() 'est également possible. – mtoto