Mean value of data with irregular intervals

Hello,
I am trying to obtain average y value for a data set (x,y). However, interval between data points is not regular and mean(y) is off from the expected value. For example,
x = [1 1.1 1.2 1.3 2 3 4 5.1 5.2 5.3 5.4]; y = [0 0.1 0.2 0.3 1 2 1 0.3 0.2 0.1 0];
Because x,y are more densely lying in x = [0 1] and [5 6] intervals, y values in those intervals are weighted more if I take mean(y). Do you know how to avoid this and obtain y value in uniform intervals?
Thanks, Bobo

 採用された回答

Iain
Iain 2013 年 7 月 29 日

0 投票

Why not just take a weighted mean?
This method ignores y(1) - you could change it to ignore y(end), or add info and inclue it.
totalweight = 0;
weightedsum = 0;
for i = 2:numel(x)
weight = x(i)-x(i-1);
weightedsum = weightedsum + weight*y(i);
totalweight = totalweight + weight;
end
meanvalue = weightedsum / totalweight;

1 件のコメント

dpb
dpb 2013 年 7 月 29 日
編集済み: dpb 2013 年 7 月 30 日
d=diff(xx);
m=sum(d.*yy(2:end))/sum(d);
which can also be written as
m=dot(diff(xx),yy(2:end))/sum(d);

サインインしてコメントする。

その他の回答 (1 件)

dpb
dpb 2013 年 7 月 29 日
編集済み: dpb 2013 年 7 月 29 日

1 投票

One way to weight uniformly...
dx=min(diff(x)); % shortest difference in vector
xi=x(1):dx:x(end); % fill in all values equally
yhat=interp1(x',y',x1'); % and get corresponding y's...
mean(yhat); % obviously can combine steps ...

2 件のコメント

bobo
bobo 2013 年 7 月 30 日
Thanks!!
Andrew Sandeman
Andrew Sandeman 2023 年 6 月 15 日
In my opinion this is the correct answer, not the currently accepted answer.
  • This method does not neglect y(1)
  • Samples which are obtained more sparsely are weighted more accurately using this interpolation method

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeDescriptive Statistics and Insights についてさらに検索

質問済み:

2013 年 7 月 29 日

コメント済み:

2023 年 6 月 15 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by