我有一个长格式数据框,其中行代表不同人的响应(四个类别之一)。此处提供了一个示例数据集:
df <- data.frame(person=c(rep("A",100),rep("B",100)),resp=c(sample(4,100,replace=TRUE),sample(4,100,replace=TRUE)))
df$resp <- factor(df$resp)
summary(df)
person resp
A:100 1:52
B:100 2:55
3:54
4:39
我想展示一个图表,其中 x 轴绘制响应类别,y 轴显示类别中响应的比例,以及通过自举(带替换抽样)计算误差线。
我可以计算比例(以一种非常笨拙的方式;我相信这可以改进,但这不是我主要关心的问题):
pFrame <- ddply(df,.(person,resp),summarise,trials = length(resp))
# can't figure out how to calculate the proportion with plyr.
pFrame$prop <- NA
people <- unique(df$person)
responses <- unique(df$resp)
for (i in 1 : length(people)){
nTrials <- nrow(subset(df,person==people[i]))
for (j in 1 : 4){
pFrame$prop[pFrame$person==people[i] & pFrame$resp==responses[j]] <- pFrame$trials[pFrame$person==people[i] & pFrame$resp==responses[j]] / nTrials
}
}
并绘制它:
ggplot(pFrame,aes(x=resp,y=prop,colour=person)) + geom_point()
但我真的很想使用类似的东西stat_summary(fun.data="mean_cl_boot")
来显示比例的可变性(即作用于原始数据框df
,并在行上引导)。我尝试了一些创建自定义函数的尝试,但这似乎并不简单,因为首先需要为引导程序转换因子水平。