annotate Copy_of_multithreshold 1.46/psychometricFunction.m @ 28:02aa9826efe0

mainly multiThreshold
author Ray Meddis <rmeddis@essex.ac.uk>
date Fri, 01 Jul 2011 12:59:47 +0100
parents
children
rev   line source
rmeddis@28 1 % ------------------------------------------------------- psychometricFunction
rmeddis@28 2 function [psy, levelsBinVector, binFrequencies, nNo, nYes]=...
rmeddis@28 3 psychometricFunction(levels, responses, psyBinWidth)
rmeddis@28 4 % computes a psychometric function from rwo vectors (levels and responses)
rmeddis@28 5 % responses is a binary vectory (1=yes)
rmeddis@28 6 % psyBinWidth is the bin width (dB) of the output psychometric function
rmeddis@28 7 % this function is called by both fitPsychometricFunction and subjGUI
rmeddis@28 8 % for this reason it should notbe bundled with fitPsychometricFunction
rmeddis@28 9
rmeddis@28 10 binFrequencies=[]; nNo=[]; nYes=[];
rmeddis@28 11 if min(levels)+abs(psyBinWidth) < max(levels)
rmeddis@28 12 % create a set of bins for the psychometric function
rmeddis@28 13 levelsBinVector= min(levels): abs(psyBinWidth): max(levels);
rmeddis@28 14 else
rmeddis@28 15 psy=[]; levelsBinVector=[];
rmeddis@28 16 return
rmeddis@28 17 end
rmeddis@28 18
rmeddis@28 19 idx0=find(responses==0); % isolate 'no'
rmeddis@28 20 z=levels(idx0);
rmeddis@28 21 nNo=hist(z, levelsBinVector);
rmeddis@28 22
rmeddis@28 23 idx1=find(responses>0); % isolate 'yes'
rmeddis@28 24 y=levels(idx1);
rmeddis@28 25 nYes=hist(y, levelsBinVector);
rmeddis@28 26
rmeddis@28 27 if sum(nNo)==0 | sum(nYes)==0
rmeddis@28 28 psy=[]; levelsBinVector=[];
rmeddis@28 29 return % yesses and nos required for a function
rmeddis@28 30 end
rmeddis@28 31
rmeddis@28 32 binFrequencies=nNo+nYes;
rmeddis@28 33
rmeddis@28 34 warning off MATLAB:divideByZero
rmeddis@28 35 psy=nYes./binFrequencies; % psy is the proportion of 'yes' responses
rmeddis@28 36 warning on MATLAB:divideByZero
rmeddis@28 37 lastwarn('');
rmeddis@28 38
rmeddis@28 39 idx=~isnan(psy); %remove empty bins
rmeddis@28 40 idx=(nYes>0) |(nNo>0); %remove empty bins
rmeddis@28 41 psy=psy(idx);
rmeddis@28 42 levelsBinVector=levelsBinVector(idx);
rmeddis@28 43 binFrequencies=binFrequencies(idx);
rmeddis@28 44 nNo=nNo(idx);
rmeddis@28 45 nYes=nYes(idx);
rmeddis@28 46
rmeddis@28 47 % [nNo' nYes']
rmeddis@28 48 % [levelsBinVector' psy']
rmeddis@28 49 % plot(levelsBinVector,psy,['o'])