The issue is that the curve does not fit correctly, specifically it estimates a too low threshold (the estimated intensity for 50% Yes is too low). I suspected that my data is the issue since it might be too noisy, so I simulated the response by sampling from a logistic psychometric curve. Still, in almost all cases the estimated threshold is lower than the one that was defined in the simulated curve. Example: the correct threshold would be 2.4 and the average fitting result is 2.3 in 10 fitting procedures.
I use the following parameter:
stim_range = 0.8:.045:4.1
priorAlphaSteps = .05
priorBetaRange = 0.5:.1:7;
priorGammaRange = 0;
priorLambdaRange = 0;
UD_range_factor = [.75; 1.25];
... and the estimation routine looks like this:
1. Setting Up/Down method to define prior alpha range using PAL_AMUD_setupUD
2. Running Up/Down method using PAL_AMUD_updateUD (for 25 trials)
3. Analyze Up/Down method:
Code: Select all
data.UD_mean = PAL_AMUD_analyzeUD(UD,UD_stopCriterion,UD_meanNumber);
% Compute intensity range of trials used for mean
data.UD_range = [min(UD.x(end-UD_meanNumber-1:end)) max(UD.x(end-UD_meanNumber-1:end))];
% Define prior alpha range ± UD_range_factor of up/down mean range
tmp_priorAlphaRange = data.UD_range(1)*UD_range_factor(1):priorAlphaSteps:data.UD_range(2)*UD_range_factor(2);
% Define priors for psychometric function fitting
grid.alpha = tmp_priorAlphaRange;
grid.beta = priorBetaRange;
grid.gamma = priorGammaRange;
grid.lambda = priorLambdaRange;
% Compute intensity - response frequency matrix of up/down method
data.x_resp_freq_UD = count_resp([UD.x' UD.response']);
% Fit psychometric function to up/down method data
[data.PF_params_UD, data.posterior_UD] = AL_PFBA_Fit(data.x_resp_freq_UD(:,1),data.x_resp_freq_UD(:,2),data.x_resp_freq_UD(:,3),grid,@PAL_Logistic)
Code: Select all
% Shift prior alpha range
tmp_priorAlphaRange = tmp_priorAlphaRange + (data.PF_params_UD(1,1)-mean(tmp_priorAlphaRange));
% Restrict stimulus range to prior alpha
tmp_stim_range = stim_range(thr1F.stim_range>=min(tmp_priorAlphaRange));
tmp_stim_range = tmp_stim_range(tmp_stim_range<=max(tmp_priorAlphaRange));
PM = PAL_AMPM_setupPM('numtrials', 45, ...
'stimRange', tmp_stim_range, ...
'PF', PF, ...
'priorAlphaRange', tmp_priorAlphaRange, ...
'priorBetaRange', priorBetaRange, ...
'priorGammaRange', priorGammaRange, ...
'priorLambdaRange', priorLambdaRange, ...
'prior', data.posterior_UD);
I experimented with different granularities of the stimulus range and increased the PSI method trials, but it did not help. Do you have any tip how I could improve the fitting procedure? Please let me know if you need any other info to understand the issue.