R 关于累积值的CI
我测量了94天内两种土壤类型的丙酮和乙醛的排放量:AR 关于累积值的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
和
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)