【问题标题】:Statistical error computing Matlab统计误差计算 Matlab
【发布时间】:2013-08-04 12:58:58
【问题描述】:

我有两个值向量,我想对它们进行统计比较。为简单起见,假设 A = [2 3 5 10 15] 和 B = [2.5 3.1 4.8 10 18]。我想计算标准偏差、均方根误差 (RMSE)、平均值,并方便地呈现,可能是直方图。你能帮我怎么做,以便我理解吗?我知道问题可能很简单,但我是新手。非常感谢!

编辑: 这就是我想要实现 RMSE 的方式。

dt = 1;
for k=1:numel(A)
err(k)=sqrt(sum(A(1,1:k)-B(1,1:k))^2/k);
t(k) = dt*k; 
end

但是它给了我比我预期更大的价值,因为例如3 和 3.1 仅在 0.1 上有所不同。 这就是我如何计算每个周期的参考值与该周期中相应估计值之间的误差。 你能告诉我,我做得对还是错?

abs_err = A-B;

【问题讨论】:

  • 代码中唯一的错误是使用不带点的 ^2,应该是 .^2
  • 请查看我最近编辑的答案。关于循环索引 k 如何影响每次迭代中使用的数据选择,您可能会有些困惑。

标签: matlab standard-deviation statistics


【解决方案1】:

您循环遍历向量的方式不是逐个元素,而是通过增加向量长度,也就是说,您在每次迭代时都比较以下内容:

      A(1,1:k)    B(1,1:k)
      --------    --------
k=1   [2]         [2.5]
 =2   [2 3]       [2.5 3.1]
 =3   [2 3 5]     [2.5 3.1 4.8]
....

您绝不会比较 2 和 2.1!

假设AB 是相同长度的向量(并且都是列向量或行向量),那么您需要函数std(A-B)mean(A-B),如果您查看matlab 交换,您会发现用户贡献的rmse(A-B),但您也可以将 RMSE 计算为sqrt(mean((A-B).^2))。至于显示直方图,试试hist(A-B)

在你的情况下:

dt = 1;
for k=1:numel(A)
    stdab(k) = std(A(1,1:k)-B(1,1:k));
    meanab(k) = mean(A(1,1:k)-B(1,1:k));
    err(k)=sqrt(mean((A(1,1:k)-B(1,1:k)).^2));
    t(k) = dt*k; 
end

如果您想计算每个向量对差异A(1,1:k)-B(1,1:k) 的直方图,您还可以在循环中包含hist(A(1,1:k)-B(1,1:k))

【讨论】:

  • 是的,我看到了这些函数,但它们只包含 A 向量。我想将两个向量相互比较,假设 B 作为参考。但我不明白 Matlab 帮助如何..
  • 嗯,那我不太明白你的问题。是否要将 A 用作一组参考值?
  • @TryHard 是的,我希望这是我的参考,并比较估计 B 的好坏。请考虑我的更新,几秒钟后就会出现。
  • 你的解释很好!如果你可以请指定大括号,因为缺少一些,我想确保我得到它:像那样? --> (均值((A(1,1:k)-B(1,1:k)).^2)
  • @beginh :是的,我把你的符号和我的符号混淆了。感谢您指出!
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
相关资源
最近更新 更多