R-条形图中按组大小加权
假设我有一个如下所示的数据帧:R-条形图中按组大小加权,r,plot,ggplot2,data-visualization,weighted-average,R,Plot,Ggplot2,Data Visualization,Weighted Average,假设我有一个如下所示的数据帧: 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
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)
我想计算一些描述性统计数据并创建一些条形图,但如果您查看区域
变量,A
表示得非常好,而B
和E
则不是
我对区域
变量本身不感兴趣,但统计/绘图将由数据集中具有高表示性的区域驱动,因此我需要对数据进行加权,但我不确定在以下情况下正确的方法:
平均值和SD
我正在计算平均值和SD或值1
,如下所示:
df %>% group_by(groups) %>% summarise(mean=mean(value1), sd=sd(value1))
计算加权平均值/sd以补偿每个区域样本量差异的正确方法是什么(即,我想给每个区域相等的权重)
堆叠条形图
ggplot(df, aes(groups)) +
geom_bar(aes(fill = activity), position = position_fill(reverse = F))
条形图表示每个组中每个活动发生的频率比例。同样,这主要是由A区的受访者驱动的-是否有办法平衡这一点并计算出比例,就好像区
具有相同的代表性
分组表示
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"))
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"))
条形图表示每个组
和活动
组合的值1
的平均值。同样,这些平均值的加权有利于A区,代表性也不相等
分组计数比例
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"))
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"))
summary\u df%group\u by(组、活动)%>%
总结(n=n(),计数=sum(背书))%>%mutate(prop=(计数/n)*100)
ggplot(aes(x=活动,y=道具,填充=因子(组)),数据=汇总)+
几何图形栏(宽度=0.8,位置=位置减淡(宽度=0.8),stat=“identity”)+
辅助线(填充=辅助线\图例(反向=F,title=“group”))
对于每个组
和活动
组合,我正在计算支持该项目的人数(响应1
),并计算该子组中总人数的比例
上述4个问题都源于同一个问题,所有问题都需要通过面积
进行加权,以创建相等的表示。然而,可视化都是以不同的方式创建的,并显示不同的内容(平均值、堆叠条、分组平均值、计数比例),我不确定如何正确解释每种情况下的样本大小差异。是否有一个单一的修正会传播到每个图形示例?一种策略是向下或向上采样您的数据帧
,以便每个区域具有相同数量的观察值。我们可以使用caret
软件包中的方便函数downSample()
或upSample()
,根据文档:
“简单随机抽样用于对多数类进行向下抽样。请注意,少数类数据保持不变…”
举例说明:
library(dpyr)
library(caret)
# Before
df %>% group_by(area) %>% summarise(n())
# area `n()`
#1 A 400
#2 B 100
#3 C 200
#4 D 200
#5 E 100
# After
set.seed(123)
test_down <- downSample(df, df$area)
test_down %>% group_by(area) %>% summarise(n())
# area `n()`
#1 A 100
#2 B 100
#3 C 100
#4 D 100
#5 E 100
test_up <- upSample(df, df$area)
test_up %>% group_by(area) %>% summarise(n())
# area `n()`
#1 A 400
#2 B 400
#3 C 400
#4 D 400
#5 E 400
请注意,因为我们使用随机抽样,所以我们无法控制在使用downSample()
时忽略哪些观察值。因此,如果不使用set.seed()
谢谢,每次运行的结果可能会略有不同。除了下采样,还有其他选择吗?因为区域
的分布非常不平衡-一些区域的数据比其他区域多100倍,所以下采样意味着我们将从过度代表的区域中损失很多