Modelfree estimation of a psychometric function 


Home  Downloads  Demonstration  Documentation  Examples  Functions  Contacts 

Xie, Y. & Griffin, L. D. “A 'portholes' experiment for probing perception of small patches of natural images”, Perception, 36, 315, 2007.
MatLab R The subject was presented with a display split into two parts, one containing a pair of patches from the same image, the other a pair from different images, and the subject had to judge which pair came from the same image. The symbols in the figure below show the proportion of correct responses in 200 trials as a function of patch separation.
Parametric and local linear fitting
Three different parametric models and the local linear fitting are used and fits are plotted against the measured psychometric data. Three different parametric models are fitted to these data: Gaussian (probit), Weibull, and reverse Weibull. Local linear fitting is also performed with the bandwidth
bwd
chosen by the minimising crossvalidated deviance.Load the data and plot the measured psychometric data (black dots):
clear, load examples/example_04;
figure; plot( x, r ./ m, 'k.'); axis([0.1 9.1 0.5 1]); axis square;1. For the Gaussian cumulative distribution function (black curve):
degpol = 1; % Degree of the polynomial
b = binomfit_lims( r, m, x, degpol, 'probit' );
numxfit = 199; % Number of new points to be generated minus 1
xfit = [min(x):(max(x)min(x))/numxfit:max( x ) ]';
% Plot the fitted curve
pfit = binomval_lims( b, xfit, 'probit' );
hold on, plot( xfit, pfit, 'k' );2. For the Weibull function (red curve):
[ b, K ] = binom_weib( r, m, x );
guessing = 0; % guessing rate
lapsing = 0; % lapsing rate
% Plot the fitted curve
pfit = binomval_lims( b, xfit, 'weibull', guessing, lapsing, K );
hold on, plot( xfit, pfit, 'r' );3. For the reverse Weibull function (green curve):
[ b, K ] = binom_revweib( r, m, x );
% Plot the fitted curve
pfit = binomval_lims( b, xfit, 'revweibull', guessing, lapsing, K );
hold on, plot( xfit, pfit, 'g' );4. For the local linear fit (blue curve):
bwd_min = min( diff( x ) );
bwd_max = max( x )  min( x );
bwd = bandwidth_cross_validation( r, m, x, [ bwd_min, bwd_max ] );
% Plot the fitted curve
bwd = bwd(3); %choose the third estimate, which is based on crossvalidated deviance
pfit = locglmfit( xfit, r, m, x, bwd );
hold on, plot( xfit, pfit, 'b' );