NaN returned by QuestQuantile

Hope someone here can help me, I'm new to the Quest toolbox.

I'm trying to find subject's 75% threshold for a concave/convex target. The parameter I'm
adjusting is the curvature of the target (smaller value = less curvature = harder to
discriminate between concave/convex). On each trial, I am randomly presenting a concave
or convex target and subjects press a key to tell me which one they think it was.

In my reading of the documentation, Quest should be able to efficiently guide me toward
the 75% threshold level for each of my subjects.

I've closely followed QuestDemo to create my script. The problem is that when I run my
code with >30 trials, I get a NaN value returned by QuestQuantile after about 10-15 trials.
With fewer trials, it seems ok. I suspect that I'm reaching the low end of my range of
curvature values (I use values from 1 to 20) but I'm also not sure if I'm using the output
from QuestQuantile correctly.

Here's the meat of my code:
%%%%% setup Quest first
tGuess = 10; % initial guess of threshold
tGuessSd = 10; % std. dev. on initial guess of threshold
grain = 1; % curvature values are integers from 1 through 20
range = 20;
pThreshold=0.75;
beta=3.5;delta=0.01;gamma=0.5;
q=QuestCreate(tGuess,tGuessSd,pThreshold,beta,delta,gamma,grain,range);
q.normalizePdf=1;

%%%%% start trials and add results to Quest database
for trials = 1:numtrials
window = OBAPOback2
(window,vertOcc,horzOcc,boxUL,boxUR,boxLL,boxLR,fixlines,gray,lgray,black,penW,red,ch
argray);
last_time = Screen('Flip', window, 0, 1);
lobesc(trials)=round(QuestQuantile(q)); % get next level of lobescale to test
tl = randperm(4);
[response(trials)] = POquestfly(lobesc); % function to write next stim. to screen
q=QuestUpdate(q,lobesc(trials),response(trials)); % Add the new datum
end;

%%%%% finish trials and print threshold estimate to screen
t=QuestMean(q);
sd=QuestSd(q);
fprintf('Final threshold estimate (mean±sd) is %.2f ± %.2f\n',t,sd);

Thanks for any/all help,
Adam
Yes, as you suspected once you exceed the range you selected QuestQuantile will return
NaN.
If you aren't sure Quest is doing what you'd like it to do, then try this exercise (outside of
your program).

Create Quest structure
q=QuestCreate(thresholdGuess, priorSd, pCorrect, beta, delta, gamma, grain, range);

Get the test value
tTest=questquantile(q)

%choose a response and update
q = QuestUpdate(q, tTest,response)

%choose the next value and so on.

Once you can see the output values you'll be able to easily choose effective input values.

Best,

Sharon

--- In psychtoolbox@yahoogroups.com, "Adam Greenberg" <agreenb@...> wrote:
>
> Hope someone here can help me, I'm new to the Quest toolbox.
>
> I'm trying to find subject's 75% threshold for a concave/convex target. The parameter
I'm
> adjusting is the curvature of the target (smaller value = less curvature = harder to
> discriminate between concave/convex). On each trial, I am randomly presenting a
concave
> or convex target and subjects press a key to tell me which one they think it was.
>
> In my reading of the documentation, Quest should be able to efficiently guide me
toward
> the 75% threshold level for each of my subjects.
>
> I've closely followed QuestDemo to create my script. The problem is that when I run my
> code with >30 trials, I get a NaN value returned by QuestQuantile after about 10-15
trials.
> With fewer trials, it seems ok. I suspect that I'm reaching the low end of my range of
> curvature values (I use values from 1 to 20) but I'm also not sure if I'm using the output
> from QuestQuantile correctly.
>
> Here's the meat of my code:
> %%%%% setup Quest first
> tGuess = 10; % initial guess of threshold
> tGuessSd = 10; % std. dev. on initial guess of threshold
> grain = 1; % curvature values are integers from 1 through 20
> range = 20;
> pThreshold=0.75;
> beta=3.5;delta=0.01;gamma=0.5;
> q=QuestCreate(tGuess,tGuessSd,pThreshold,beta,delta,gamma,grain,range);
> q.normalizePdf=1;
>
> %%%%% start trials and add results to Quest database
> for trials = 1:numtrials
> window = OBAPOback2
>
(window,vertOcc,horzOcc,boxUL,boxUR,boxLL,boxLR,fixlines,gray,lgray,black,penW,red,ch
> argray);
> last_time = Screen('Flip', window, 0, 1);
> lobesc(trials)=round(QuestQuantile(q)); % get next level of lobescale to test
> tl = randperm(4);
> [response(trials)] = POquestfly(lobesc); % function to write next stim. to screen
> q=QuestUpdate(q,lobesc(trials),response(trials)); % Add the new datum
> end;
>
> %%%%% finish trials and print threshold estimate to screen
> t=QuestMean(q);
> sd=QuestSd(q);
> fprintf('Final threshold estimate (mean±sd) is %.2f ± %.2f\n',t,sd);
>
> Thanks for any/all help,
> Adam
>
Hope someone here can help me, I'm new to the Quest toolbox.

I'm trying to find subject's 75% threshold for a concave/convex target. The parameter I'm
adjusting is the curvature of the target (smaller value = less curvature = harder to
discriminate between concave/convex). On each trial, I am randomly presenting a concave
or convex target and subjects press a key to tell me which one they think it was.

In my reading of the documentation, Quest should be able to efficiently guide me toward
the 75% threshold level for each of my subjects.

I've closely followed QuestDemo to create my script. The problem is that when I run my
code with >30 trials, I get a NaN value returned by QuestQuantile after about 10-15 trials.
With fewer trials, it seems ok. I suspect that I'm reaching the low end of my range of
curvature values (I use values from 1 to 20) but I'm also not sure if I'm using the output
from QuestQuantile correctly.

Here's the meat of my code:
%%%%% setup Quest first
tGuess = 10; % initial guess of threshold
tGuessSd = 10; % std. dev. on initial guess of threshold
grain = 1; % curvature values are integers from 1 through 20
range = 20;
pThreshold=0.75;
beta=3.5;delta=0.01;gamma=0.5;
q=QuestCreate(tGuess,tGuessSd,pThreshold,beta,delta,gamma,grain,range);
q.normalizePdf=1;

%%%%% start trials and add results to Quest database
for trials = 1:numtrials
window = OBAPOback2
(window,vertOcc,horzOcc,boxUL,boxUR,boxLL,boxLR,fixlines,gray,lgray,black,penW,red,ch
argray);
last_time = Screen('Flip', window, 0, 1);
lobesc(trials)=round(QuestQuantile(q)); % get next level of lobescale to test
tl = randperm(4);
[response(trials)] = POquestfly(lobesc); % function to write next stim. to screen
q=QuestUpdate(q,lobesc(trials),response(trials)); % Add the new datum
end;

%%%%% finish trials and print threshold estimate to screen
t=QuestMean(q);
sd=QuestSd(q);
fprintf('Final threshold estimate (mean±sd) is %.2f ± %.2f\n',t,sd);

Thanks for any/all help,
Adam