R 关于累积值的CI

R 关于累积值的CI,r,ggplot2,tidyverse,R,Ggplot2,Tidyverse,我测量了94天内两种土壤类型的丙酮和乙醛的排放量:A和B 我已经计算并可视化了一段时间内的累积发射,但是我遇到了问题,将CI 95%频带(+/-2 SD)或甚至简单的误差条放入即可 这就是我努力做到的: df_cum <- df%>% group_by(soil_type, compound, days)%>% summarise(mean=mean(emission))%>% mutate(cum_emission=cumsum(mean)) pl

我测量了94天内两种土壤类型的丙酮和乙醛的排放量:A
B

我已经计算并可视化了一段时间内的累积发射,但是我遇到了问题,将CI 95%频带(+/-2 SD)或甚至简单的误差条放入即可

这就是我努力做到的:

df_cum <- df%>%
  group_by(soil_type, compound, days)%>%
  summarise(mean=mean(emission))%>%
  mutate(cum_emission=cumsum(mean)) 


  plot <- ggplot(df_cum, aes(x = days, y = cum_emission, colour=soil_type)) + 
    geom_line(size = 1)+
    geom_point()+
    scale_colour_manual(values=c("#00AFBB", "brown")) + 
    scale_size_manual(values=c(8.4, 1.7))+
    labs(x = "Time (days)", 
         y = "Cumulated production (umol/g dw soil)", 
         title = "Cumulated production") + 
    labs(shape="", color="") +
    facet_wrap(~compound)+
    theme_bw()
df_cum%
分组依据(土壤类型、化合物、天数)%>%
总结(平均值=平均值(排放))%>%
突变(cum_发射=cumsum(平均))

绘图要绘制错误条,您是否已尝试使用

geom_errorbar(aes(ymin = y- 2*sd, xmax = y+ 2*sd), width = .1, position=position_dodge(.9))

sd
是您的标准偏差吗?您可以在代码的
mutate(…)
部分中计算它。但是,我担心您没有足够的副本来计算sd/CI。我遗漏了什么吗?

如果我理解正确,您基本上需要估计不同化合物中土壤类型累积线的置信区间,如果我们查看您的数据:

ggplot(df,aes(x=days,y=cumsum(emission),col=soil_type)) + 
geom_line() + facet_grid(compound ~ soil) + theme_bw() 

您要做的是估计同一行(复合)中相同颜色的行之间的误差。为此,我们从您的示例中排除1和14,因为它不完整。基本上,我们试图将所有测量值转换为累积值,按土壤x化合物分组

我们可以使用
stat\u summary()
计算平均值和se:

df %>% filter(!soil %in% c(1,14)) %>% 
group_by(soil,compound) %>% 
mutate(c_emission = cumsum(emission)) %>% 
ggplot(aes(x = days, y = c_emission, col=soil_type,fill=soil_type)) + 
stat_summary(geom="line", fun = mean) + 
stat_summary(geom="ribbon",alpha=0.05,linetype="dotted")+ 
facet_wrap(~compound)

我们在上面绘制的是每个时间点的平均值,+1*标准误差。如果你想要95%的置信区间

df %>% filter(!soil %in% c(1,14)) %>% 
group_by(soil,compound) %>% 
mutate(c_emission = cumsum(emission)) %>% 
ggplot(aes(x = days, y = c_emission, col=soil_type,fill=soil_type)) +
stat_summary(geom="line",fun = mean) + 
stat_summary(geom="ribbon",alpha=0.05,linetype="dotted",
fun.data = mean_cl_normal)+ 
facet_wrap(~compound)


置信区间很大,因为标准误差很大。。如果您有更多的样品,可能会更好。

非常感谢您的评论@Ubiminor。不过,我不确定我能不能使你的建议奏效。这里提供的数据只是我实际数据的一小部分样本。每个数据点都有n=1,如何得到置信区间?您所展示的图很可能绘制了许多值的累积平均值。我有10种土壤类型A,6种土壤类型B。已在三个时间点测量了每种土壤的丙酮和乙醛排放量。我肯定我忘记了什么或者解释得很糟糕,因为没有人理解我,但是我不确定你所说的n=1是什么意思。我的意思是,A型土壤n=10,B型土壤n=6。事实上,还有更多的土壤。当然,在我总结了数据之后,我只有n=1,如果这是你的意思的话。但我的问题是,我无法从每种土壤类型和每种化合物的原始df计算置信区间,并将其显示在图表中。对不起,我的错。刚才看到您提供了完整的数据帧。是的,你需要先计算一下。我现在试着为它写点东西是的,看起来很棒@StupidWolf!你知道如何用阴影显示CI吗?好吧,你不包括
ggplot中的
fill=
(aes(…fill=soil\u type
),但要包含
stat\u summary(geom=“ribbon”,fill=…)
然后你添加了你想要着色的颜色?或者你不想要线条?因此,使用你在回答中提供的代码,我得到了正确的绘图,但是有了这个警告
没有提供摘要函数,默认为'mean_se()
。当我尝试按照你在评论中的建议去做时,我在图层中得到了这个错误消息
error(data=data,mapping=mapping,stat=StatSummary,geom=geom,:找不到objekt‘soil_type’
fill=soil_type
必须在
aes()内。
。你说的用阴影显示CI是什么意思?我显示的图有一个阴影带,你能先按天排序数据框吗?
df=df[order(df$days)]
df %>% filter(!soil %in% c(1,14)) %>% 
group_by(soil,compound) %>% 
mutate(c_emission = cumsum(emission)) %>% 
ggplot(aes(x = days, y = c_emission, col=soil_type,fill=soil_type)) + 
stat_summary(geom="line", fun = mean) + 
stat_summary(geom="ribbon",alpha=0.05,linetype="dotted")+ 
facet_wrap(~compound)
df %>% filter(!soil %in% c(1,14)) %>% 
group_by(soil,compound) %>% 
mutate(c_emission = cumsum(emission)) %>% 
ggplot(aes(x = days, y = c_emission, col=soil_type,fill=soil_type)) +
stat_summary(geom="line",fun = mean) + 
stat_summary(geom="ribbon",alpha=0.05,linetype="dotted",
fun.data = mean_cl_normal)+ 
facet_wrap(~compound)