如何将 CI 晶须添加到稀疏曲线

How to add CI whiskers to a rarefaction curve

我需要制作一些稀疏曲线,我希望它们在置信区间条的边缘显示晶须,而默认设置是简单地显示没有晶须的条:

library(vegan) 
data("dune")
result <- specaccum(dune)
plot(result, lwd=2)

Default rarefaction curve

我尝试使用 arrows 函数添加一些胡须,但 specaccum 函数的结果仅包括标准偏差。所以我完成了一半的工作:

samples <- result$sites
error <- result$sd
richness <- result$richness
arrows(samples, richness-error, samples, richness+error, angle=90, code=3, length=0.05)

Rarefaction curve with sd whiskers

根据我的搜索,最常见的方法是将置信区间转换为阴影区域(通过使用参数 ci.type="polygon"),然后将 boxplot 添加到绘图中曲线。然而,这会导致我宁愿避免的非常繁忙的图像。

有没有人有更优雅的解决方案?

您可以尝试添加 plotCI-plot:

library(vegan) 
library(plotrix) 
data("dune")
result <- specaccum(dune)

plot(result)
plotCI(result$sites,result$richness,result$sd*2,err="y", lwd=2,add=TRUE, pch=NA)

我承认这也不是最优雅的选择,但它确实有效。

您忘记了乘数(参见 ?plot.specaccum 中的参数 ci)。你画的是约 68% 的置信区间。乘以 2 (ci = 2) 给出大约 95% 的置信区间,这是 plot.specaccum 默认绘制的。

在您使用的代码的修改中包括(默认)乘数

plot(result)
with(result, arrows(sites, richness - (2 * sd), sites, richness + (2 * sd),
                    angle = 90, code = 3, length = 0.05))

我们得到:

您可以忽略该警告;最后绘制的数据点的标准误差为零

> result$sd
 [1] 2.3510636 1.8763851 1.5722711 1.4469584 1.3901594 1.3530349 1.3164796
 [8] 1.2749034 1.2282010 1.1763410 1.1193437 1.0564537 0.9874094 0.9115998
[15] 0.8286890 0.7380921 0.6333903 0.5139710 0.3570714 0.0000000

arrow()只是警告你它不会绘制长度为0的箭头。

github 中的 vegan 存储库现在有一个选项,可以使用参数 ci.length 将那些短的水平条绘制到误差条上。默认值为零(无水平条)以保留旧行为。