-1

値の 2 つのベクトルがあり、それらを統計的に比較したいと考えています。簡単にするために、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;
4

1 に答える 1

0

ベクトルをループする方法は、要素ごとではなく、ベクトルの長さを増やすことです。つまり、各反復で次を比較しています。

      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だけを比較することはありません!

とが同じ長さのベクトル (両方とも列ベクトルまたは行ベクトルのいずれか) であると仮定するAと、関数、が必要になります。また、matlab exchange を見ると、ユーザー提供の が見つかりますが、RMSE を として計算することもできます。ヒストグラムの表示については、 を試してください。Bstd(A-B)mean(A-B)rmse(A-B)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

hist(A(1,1:k)-B(1,1:k))ベクトル ペアの差分ごとにヒストグラムを計算する場合は、ループに含めることもできますA(1,1:k)-B(1,1:k)

于 2013-08-04T13:14:18.030 に答える