Modelfree estimation of a psychometric function 


Home  Downloads  Demonstration  Documentation  Examples  Functions  Contacts 

Schofield, A. J., Ledgeway, T., & Hutchinson, C. V. “Asymmetric transfer of the dynamic motion aftereffect between first and secondorder cues and among different secondorder cues”, Journal of Vision, 7(8), 112, 2007.
MatLab R The subject was presented with a moving adaptation stimulus, followed by a test stimulus. The symbols in the figure below show the proportion of responses in which the subject indicated motion of the test stimulus in the same direction as the adapting stimulus, either up or down, as a function of relative modulation depth. There were 10 trials at each stimulus level.
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):
data("05_Schofield")
x = example05$x
r = example05$r
m = example05$m
plot( x, r / m, xlim = c( 2, 98.2 ), ylim = c( 0.02, 0.98 ), type = "p", pch="*" ) # Limits set to match the MatLab ones1. For the Gaussian cumulative distribution function (black curve):
val < binomfit_lims( r, m, x, link = "probit" )
numxfit < 199 # Number of new points to be generated minus 1
xfit < (max(x)min(x)) * (0:numxfit) / numxfit + min(x)
# Plot the fitted curve
pfit<predict( val$fit, data.frame( x = xfit ), type = "response" )
lines(xfit, pfit )2. For the Weibull function (red curve):
val < binom_weib( r, m, x, )
# Plot the fitted curve
pfit<predict( val$fit, data.frame( x = xfit ), type = "response" )
lines(xfit, pfit, col = "red" )3. For the reverse Weibull function (green curve):
val < binom_revweib( r, m, x, )
# Plot the fitted curve
pfit<predict( val$fit, data.frame( x = xfit ), type = "response" )
lines(xfit, pfit, col = "green" )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, c( bwd_min, bwd_max ) )
# Plot the fitted curve
bwd < bwd$deviance # >choose the estimate based on crossvalidated deviance
pfit < locglmfit( xfit, r, m, x, bwd )$pfit
lines(xfit, pfit, col = "blue" )