Hi PTB experts,
You may have some experience on using Quest to measure thresholds.
Being a subject, you would inevitably make some silly responses. For
example, when the stimulus intensity is pretty high you actually know
the correct response should be a press on one button. But sometimes
you press others just because of absent-minded, impulsion or
carelessness. You might try your best not to make mistakes, but I
think nobody can entirely avoid this.
I thereby try testing how much such kind of mistakes would have a bad
effect on the final estimated threshold and SD. In the initial stage
of a quest, the stimuli intensities are often very high or very low.
After some responses, say 10 or more, the test intensity will
fluctuate around a value within a small range. If the first several
responses involve an aforementioned silly response, will the accuracy
and variation of the estimation become bad? Therefore, I made a code
attached below to seek the answer. It seems the SD of the estimated
threshold increase prominently when there is only 1 silly response in
the intial stage of a quest. When there are 2 silly responses, not
only the SD but also the estimated threshold become very unreliable.
Since there are so many papers (more than 430) citing Prof.Pelli's
first introduction on quest (Pelli, 1983), it's very difficult to
find a paper that can deal with the silly responses happenning in the
intial stage of a quest? Does anybody know the solution?
%This is my code. If you have interst, you can try running it.
%
thresh1 = []; sd1 = []; thresh2 = []; sd2 = [];
tActual = -2; tGuess = log10(.015); tGuessSd = 2;
pThreshold=0.82;
beta=3.5;delta=0.01;gamma=0.5;trialsDesired=40;wrongRight=
{'wrong','right'};
for i = 1:50
q=QuestCreate(tGuess,tGuessSd,pThreshold,beta,delta,gamma);
q.normalizePdf=1;
for k=1:trialsDesired
tTest=QuestQuantile(q);
response=QuestSimulate(q,tTest,tActual);
q=QuestUpdate(q,tTest,response);
end
t=QuestMean(q);
sd=QuestSd(q);
thresh1 = [thresh1 t];
sd1 = [sd1 sd];
end
kkk1 = Randi(10)+3; kkk2 = Randi(10)+3;
for i = 1:50
q=QuestCreate(tGuess,tGuessSd,pThreshold,beta,delta,gamma);
q.normalizePdf=1;
for k=1:trialsDesired
tTest=QuestQuantile(q);
response=QuestSimulate(q,tTest,tActual);
%if k == kkk1
if k == kkk1 | k == kkk2
response = abs(response-1);
end
q=QuestUpdate(q,tTest,response);
end
t=QuestMean(q);
sd=QuestSd(q);
thresh2 = [thresh2 t];
sd2 = [sd2 sd];
end
[mean(thresh1) std(thresh1) mean(sd1) std(sd1);mean(thresh2) std
(thresh2) mean(sd2) std(sd2)]
[min(thresh1) max(thresh1) min(sd1) max(sd1);min(thresh2) max
(thresh2) min(sd2) max(sd2)]
You may have some experience on using Quest to measure thresholds.
Being a subject, you would inevitably make some silly responses. For
example, when the stimulus intensity is pretty high you actually know
the correct response should be a press on one button. But sometimes
you press others just because of absent-minded, impulsion or
carelessness. You might try your best not to make mistakes, but I
think nobody can entirely avoid this.
I thereby try testing how much such kind of mistakes would have a bad
effect on the final estimated threshold and SD. In the initial stage
of a quest, the stimuli intensities are often very high or very low.
After some responses, say 10 or more, the test intensity will
fluctuate around a value within a small range. If the first several
responses involve an aforementioned silly response, will the accuracy
and variation of the estimation become bad? Therefore, I made a code
attached below to seek the answer. It seems the SD of the estimated
threshold increase prominently when there is only 1 silly response in
the intial stage of a quest. When there are 2 silly responses, not
only the SD but also the estimated threshold become very unreliable.
Since there are so many papers (more than 430) citing Prof.Pelli's
first introduction on quest (Pelli, 1983), it's very difficult to
find a paper that can deal with the silly responses happenning in the
intial stage of a quest? Does anybody know the solution?
%This is my code. If you have interst, you can try running it.
%
thresh1 = []; sd1 = []; thresh2 = []; sd2 = [];
tActual = -2; tGuess = log10(.015); tGuessSd = 2;
pThreshold=0.82;
beta=3.5;delta=0.01;gamma=0.5;trialsDesired=40;wrongRight=
{'wrong','right'};
for i = 1:50
q=QuestCreate(tGuess,tGuessSd,pThreshold,beta,delta,gamma);
q.normalizePdf=1;
for k=1:trialsDesired
tTest=QuestQuantile(q);
response=QuestSimulate(q,tTest,tActual);
q=QuestUpdate(q,tTest,response);
end
t=QuestMean(q);
sd=QuestSd(q);
thresh1 = [thresh1 t];
sd1 = [sd1 sd];
end
kkk1 = Randi(10)+3; kkk2 = Randi(10)+3;
for i = 1:50
q=QuestCreate(tGuess,tGuessSd,pThreshold,beta,delta,gamma);
q.normalizePdf=1;
for k=1:trialsDesired
tTest=QuestQuantile(q);
response=QuestSimulate(q,tTest,tActual);
%if k == kkk1
if k == kkk1 | k == kkk2
response = abs(response-1);
end
q=QuestUpdate(q,tTest,response);
end
t=QuestMean(q);
sd=QuestSd(q);
thresh2 = [thresh2 t];
sd2 = [sd2 sd];
end
[mean(thresh1) std(thresh1) mean(sd1) std(sd1);mean(thresh2) std
(thresh2) mean(sd2) std(sd2)]
[min(thresh1) max(thresh1) min(sd1) max(sd1);min(thresh2) max
(thresh2) min(sd2) max(sd2)]