【问题标题】:Dealing with negative values in log scale处理对数刻度中的负值
【发布时间】:2016-09-30 14:14:25
【问题描述】:

我正在使用对数刻度在 MatLab 中绘制带有标准偏差的折线图:

fig = figure;
errorbar(mean(samples),sqrt(var(samples)));
ax = get(fig,'CurrentAxes');
set(ax,'YScale','log');

但是,在某些样本中,较低的误差线低于 0。例如,给定样本 s=[11.0147 80.2365 11.6116 11.1837 9.9091],然后是 mean=24.7911std=31.0013,这使得较低的误差线位于 -6.2101。由于对数刻度忽略负值,因此误差线看起来很奇怪。

如何计算不对称误差线?我可能会为所有值>=mean 和所有值<=mean 计算std,这样我就有不同的上下误差线。这是一种有效的方法吗?

【问题讨论】:

  • 真正的问题是你为什么要使用对数刻度来绘制可能是负数的东西?如果所有样本都保证是正的,那么你真的不应该以这种方式绘制误差线,就好像基础分布是高斯分布一样。 (这是您通过在平均值两侧绘制 1 个标准差的误差条所做的假设)。您可能会更好地考虑四分位数/范围的误差线。当然,如果值可以为负,那么您也可能得到一个负均值,在这种情况下,您根本不应该使用对数刻度!
  • 所有值都是正数,但它们在线性比例下看起来不太好。它们在大约 100 个样本中从 1e5 变为 1e-1,然后在 700 个样本中变为 1e-5。这使图表非常混乱,因为其中还有另外两个图表。
  • 好的 - 你绝对不想使用“高斯”意义上的误差线,因为你的潜在概率分布甚至不是对称的。因此,除非您知道(或可以确定)概率分布,否则您应该根据某种形式的四分位数制作误差线。例如,您可以使用 5% 和 95% 的点(5% 的样本低于下误差线,5% 高于上误差线)。这意味着它们的大小将不相等,但这更好地反映了您的数据。不要尝试使用标准差,因为它只对高斯分布有意义。

标签: matlab plot standard-deviation


【解决方案1】:

为了产生 5% 和 95% 的误差线,最简单的做法是对基础数据进行排序。因此,假设您有一组与特定参数相对应的样本,它们被记录在一个矩阵样本中,其中一行代表您对参数的一个值 x 的实验值。那么这段代码会很容易地为您提供上限和下限:

ascending=sort(samples,2);
lower_error_bar=ascending(:,round(size(ascending,2)*0.05));
mean=mean(samples,2);
median=ascending(:,round(size(ascending,2)*0.5));
upper_error_bar=ascending(:,round(size(ascending,2)*0.95));

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多