Hi, I have the following data:
- A vector of physical stimulus properties, something like: [0.8, 0.7, 0.56,0.4,....,0.01]
- For each of the vector's elements, the response of the subject (either "0" or "1").
What I want: I want to bin the data with the physical stimuli, and determine the percentage of "1"s responded for this bin (it would be the percentage of correct answers for the bin).
Additionally, I want a curve fittet through these percentages. I know about the hist function, but I am not sure of how I can apply it here. Thanks

댓글 수: 1

Farooq Muhammad
Farooq Muhammad 2022년 3월 17일
hi all
i want the answer to simulation question.
i have the error plot of height above the sea level w.r.t to some reference system.
i want to bin the x axis and curve fit the bins using curve fitting tool or something else to know how error is behaving w.r.t height above the sea level.
help requierd.

댓글을 달려면 로그인하십시오.

 채택된 답변

Walter Roberson
Walter Roberson 2017년 6월 20일

1 개 추천

binedges = 0 : 0.1 : 1; %set as appropriate
[~, ~, binnumber] = histcounts( StimulusVector, binedges );
maxbin = max(binnumber);
count0 = accumarray(binnumber, Response == '0', [1 maxbin]);
count1 = accumarray(binnumber, Response == '1', [1 maxbin]);
total_for_bins = count0 + count1;
percent_per_bin = count1 ./ max(1,total_for_bins) * 100;
If you only need the percentages and not the counts, you can make this a bit shorter:
binedges = 0 : 0.1 : 1; %set as appropriate
[~, ~, binnumber] = histcounts( StimulusVector, binedges );
percent_per_bin = accumarray(binnumber, Response == '1', [], @mean) * 100;
To fit a curve:
x = (binedges(1:end-1) + binedges(2:end))/2;
y = percent_per_bin;
and now you can fit your curve on x and y using whatever distribution seems suitable. You might want to look inside histfit() to see how it does the fitting and plotting.

댓글 수: 7

MiauMiau
MiauMiau 2017년 6월 20일
Thanks! But I get the following error for my implementation:
% my variables
ThumbArray=[0.07,0.0805,0.068425,0.05816125,0.0494370625,0.042,0.0357182776562500,0.0303605360078125,0.0258064556066406,0.0219354872656445];
responseThumb=[3,1,1,1,1,1,1,1,1,1];
binedges = 0 : 0.01 : max(ThumbArray); %set as appropriate
[~, ~, binnumber] = histcounts( ThumbArray, binedges );
percent_per_bin = accumarray(binnumber, responseThumb == '1', [], @mean) * 100;
%Curve fitting:
x = (binedges(1:end-1) + binedges(2:end))/2;
y = percent_per_bin;
Error:
Error using accumarray
Second input VAL must be a vector with one element for each row in SUBS, or
a scalar.
Error in fitStaircase (line 14)
percent_per_bin = accumarray(binnumber, responseThumb == '1', [], @mean) *
100;
What does that mean..?
percent_per_bin = accumarray(binnumber, responseThumb(:) == '1', [], @mean) * 100;
MiauMiau
MiauMiau 2017년 6월 20일
Hm, this gives me the exact same error unfortunately
You could try
percent_per_bin = accumarray(binnumber(:), responseThumb(:) == '1', [], @mean) * 100;
MiauMiau
MiauMiau 2017년 6월 20일
thank you. I changed the maximum of binedges:
responseThumb = response(finger==1);
binedges = 0 : 0.01 : max(ThumbArray)+0.01; %set as appropriate
[~, ~, binnumber] = histcounts( ThumbArray, binedges );
percent_per_bin = accumarray(binnumber(:), responseThumb(:) == '1', [], @mean) * 100;
%To fit a curve:
x = (binedges(1:end-1) + binedges(2:end))/2;
y = percent_per_bin;
And it is not throwing an error - however, y is a zero-vector. Why is that?
Walter Roberson
Walter Roberson 2017년 6월 20일
You wrote that the response is (either "0" or "1") so my interpretation is that the responses are the characters '0' or '1' . If they are instead the numeric values 0 or 1 then change the '1' in the code to plain 1
MiauMiau
MiauMiau 2017년 6월 22일
thx!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Data Preprocessing에 대해 자세히 알아보기

태그

질문:

2017년 6월 20일

댓글:

2022년 3월 17일

Community Treasure Hunt

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

Start Hunting!

Translated by