How to convert continuous variable into discrete variables?

20 ビュー (過去 30 日間)
Chetan Badgujar
Chetan Badgujar 2020 年 8 月 23 日
編集済み: Cris LaPierre 2020 年 8 月 26 日
I am looking for the help !!
I have 5000 rows of data points for three variables (independent variables-X1,x2,x3 and dependent variables Y). The x1 and x2 are discreate variables in fix steps. However, the X3 variables is countinous ranges from 0-0.6. I want to transfrom this varibles in steps of 0.05 upto 0.6 total in 12 steps and corroespoing value of Y variables should be mean of all values correspond between 0- 0.05 and so.
Well, i tried with find(x3<0.05) and got the index of all values which is less than 0.05. but struggling to compute mean(y) for the indices, mostly they are continous.
Plz help me.

採用された回答

Chetan Badgujar
Chetan Badgujar 2020 年 8 月 24 日
HI Alan,
Thank you for you reply,
I tried but we are losing some information there..I attached the plot comparsion before and after converting the data, discreate data should follow the countinous data form.
load('DATA.mat');
X3(1) = []; % the first values for X3 and Y are NaNs, so they are removed here
Y(1) = [];
x3 = (0:0.05:2)';
Ydiscrete = zeros(length(x3),1);
for i = 2:length(x3)
ix = find(x3(i-1)<=X3<x3(i));
Ydiscrete(i) = mean(Y(ix));
end
plot(x3,Ydiscrete,'o')
hold on
scatter(X3,Y)
  2 件のコメント
Alan Stevens
Alan Stevens 2020 年 8 月 24 日
Hmm. What about the following:
load('DATA.mat');
X3(1) = []; % the first values for X3 and Y are NaNs, so they are removed here
Y(1) = [];
x3 = (0:0.05:2)';
delta = length(Y)/41;
Ydiscrete = zeros(length(x3),1);
for i = 2:length(x3)
ix = (i-1)*delta:i*delta;
Ydiscrete(i) = mean(Y(ix));
end
subplot(2,1,1)
plot(X3,Y,'.',x3,Ydiscrete,'o')
Y = sort(Y);
X = 1:length(Y);
delta = length(Y)/41;
x = 1:delta:length(Y);
for i = 2:length(x)
ix = (i-1)*delta:i*delta;
Ydiscrete(i) = mean(Y(ix));
end
subplot(2,1,2)
plot(X,Y,'.',x,Ydiscrete,'o')
where the top plot uses X3 and Y, but the bottom plot basically just sorts Y.
:
Chetan Badgujar
Chetan Badgujar 2020 年 8 月 24 日
HI Alan,
Well, I manuuly tried to compute this and explain very well in attached excel sheet Please go through it. The manual calculation sumarize it better way.
so WHat i did,
Step 1) find 0.05 in x and do average y( all values between 0-0.05)
Step 1) find 0.1 in x and do average y( all values between 0.05-0.1)
--- and so on until last value of x
It gives a great result you can check the excel sheet graph.
It would be great help even if You can convert all above steps into code.
Thank you once again.

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

その他の回答 (3 件)

Alan Stevens
Alan Stevens 2020 年 8 月 23 日
Does the following do what you want?
X3 = 0:0.05:0.6;
Ydiscrete = zeros(length(X3));
for i = 2:length(X3)
ix = find(X3(i-1)<=x3<X3(i));
Ydiscrete(i) = mean(Y(ix));
end
Untested, as I don't have the data!
  1 件のコメント
Chetan Badgujar
Chetan Badgujar 2020 年 8 月 24 日
Hey, Alan Thanks for you reply.
I tired the given code, but it does not work. Well I have attached the data. Could you please test on that?
Thank you..

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


Alan Stevens
Alan Stevens 2020 年 8 月 24 日
How about this
load('DATA.mat');
X3(1) = []; % the first values for X3 and Y are NaNs, so they are removed here
Y(1) = [];
x3 = (0:0.05:0.6)';
Ydiscrete = zeros(length(x3),1);
for i = 2:length(x3)
ix = find(x3(i-1)<=X3<x3(i));
Ydiscrete(i) = mean(Y(ix));
end
plot(x3,Ydiscrete,'o')

Cris LaPierre
Cris LaPierre 2020 年 8 月 24 日
編集済み: Cris LaPierre 2020 年 8 月 26 日
  3 件のコメント
Chetan Badgujar
Chetan Badgujar 2020 年 8 月 24 日
@Cris,
It works well, but when I compare Y with newY.. Code
plot(Y)
hold on
plot(newY)
The NewY doesnot represent the Y.
You can check by plotting both. I feel like there is some data leakage.
Thanks
Chetan Badgujar
Chetan Badgujar 2020 年 8 月 24 日
@ Cris,
Thank you very much.. This is what I was looking for.. Its perfect with manual calculations.
Thank you once again.!!!

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

カテゴリ

Help Center および File ExchangeHypothesis Tests についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by