# adopy.tasks.psi¶

Psychometric function is to figure out whether a subject can perceive a signal with varying levels of magnitude. The function has one design variable for the intensity of a stimulus, $$x$$; the model has four model parameters: guess rate $$\gamma$$, lapse rate $$\delta$$, threshold $$\alpha$$, and slope $$\beta$$.

class adopy.tasks.psi.Task2AFC

Bases: adopy.base._task.Task

The Task class for a simple 2-Alternative Forced Choice (2AFC) task with a single design variable, the magnitude of a stimulus.

Design variables
• stimulus ($$x$$) - magnitude of a stimulus

Responses

0 (negative response) or 1 (positive response)

Examples

>>> from adopy.tasks.psi import Task2AFC
['stimulus']
[0, 1]


A task object stores information for a specific experimental task, including labels of design variables (designs), possible responses (responses) and its name (name).

Parameters
• designs – Labels of design variables in the task.

• responses – Possible values for the response variable of the task.

• name – Name of the task.

Examples

>>> task = Task(name='Task A', designs=['d1', 'd2'], responses=[0, 1])
['d1', 'd2']
[0, 1]


## Model¶

class adopy.tasks.psi.ModelLogistic

Bases: adopy.tasks.psi._ModelPsi

The psychometric function using logistic function.

\begin{split}\begin{align} F(x; \alpha, \beta) &= \frac{1}{1 + \exp\left(-\beta (x - \mu) \right)} \\ \Psi \left( x \mid \alpha, \beta, \gamma, \delta \right) &= \gamma + (1 - \gamma - \delta) \cdot F(x; \alpha, \beta) \end{align}\end{split}
Model parameters
• threshold ($$\alpha$$) - indifference point where the probability of a positive response equals to 0.5.

• slope ($$\beta$$) - slope of a tangent line on the threshold point ($$\beta > 0$$)

• guess_rate ($$\gamma$$) - leftward asymptote of the psychometric function ($$0 < \gamma < 1$$)

• lapse_rate ($$\delta$$) - rightward asymptote of the psychometric function($$0 < \delta < 1$$)

Examples

>>> from adopy.tasks.psi import ModelLogistic
>>> model = ModelLogistic()
>>> model.params
['threshold', 'slope', 'guess_rate', 'lapse_rate']

compute(stimulus, guess_rate, lapse_rate, threshold, slope)

Compute the probability of choosing a certain response given values of design variables and model parameters.

class adopy.tasks.psi.ModelWeibull

Bases: adopy.tasks.psi._ModelPsi

The psychometric function using log Weibull (Gumbel) cumulative distribution function.

\begin{split}\begin{align} F(x; \mu, \beta) &= CDF_\text{Gumbel_l} \left( \beta (x - \mu) \right) \\ \Psi \left( x \mid \alpha, \beta, \gamma, \delta \right) &= \gamma + (1 - \gamma - \delta) \cdot F(x; \alpha, \beta) \end{align}\end{split}
Model parameters
• threshold ($$\alpha$$) - indifference point where the probability of a positive response equals to 0.5.

• slope ($$\beta$$) - slope of a tangent line on the threshold point ($$\beta > 0$$)

• guess_rate ($$\gamma$$) - leftward asymptote of the psychometric function ($$0 < \gamma < 1$$)

• lapse_rate ($$\delta$$) - rightward asymptote of the psychometric function($$0 < \delta < 1$$)

Examples

>>> from adopy.tasks.psi import ModelLogistic
>>> model = ModelLogistic()
>>> model.params
['threshold', 'slope', 'guess_rate', 'lapse_rate']

compute(stimulus, guess_rate, lapse_rate, threshold, slope)

Compute the probability of choosing a certain response given values of design variables and model parameters.

class adopy.tasks.psi.ModelProbit

Bases: adopy.tasks.psi._ModelPsi

The psychometric function using Probit function (Normal cumulative distribution function).

\begin{split}\begin{align} F(x; \mu, \beta) &= CDF_\text{Normal} \left( \beta (x - \mu) \right) \\ \Psi \left( x \mid \alpha, \beta, \gamma, \delta \right) &= \gamma + (1 - \gamma - \delta) \cdot F(x; \alpha, \beta) \end{align}\end{split}
Model parameters
• threshold ($$\alpha$$) - indifference point where the probability of a positive response equals to 0.5.

• slope ($$\beta$$) - slope of a tangent line on the threshold point ($$\beta > 0$$)

• guess_rate ($$\gamma$$) - leftward asymptote of the psychometric function ($$0 < \gamma < 1$$)

• lapse_rate ($$\delta$$) - rightward asymptote of the psychometric function($$0 < \delta < 1$$)

Examples

>>> from adopy.tasks.psi import ModelProbit
>>> model = ModelProbit()
>>> model.params
['threshold', 'slope', 'guess_rate', 'lapse_rate']

compute(stimulus, guess_rate, lapse_rate, threshold, slope)

Compute the probability of choosing a certain response given values of design variables and model parameters.

## Engine¶

class adopy.tasks.psi.EnginePsi(model, grid_design, grid_param, d_step=1)

Bases: adopy.base._engine.Engine

The Engine class for the psychometric function estimation. It can be only used for Task2AFC.

property d_step

Step size on index to compute $$\Delta$$ for the staircase method.

get_design(kind='optimal')

Choose a design with a given type.

• optimal: an optimal design $$d^*$$ that maximizes the information for fitting model parameters.

• staircase: Choose the stimulus $$s$$ as below:

$\begin{split}x_t = \begin{cases} x_{t-1} - \Delta & \text{if } y_{t-1} = 1 \\ x_{t-1} + 2 \Delta & \text{if } y_{t-1} = 0 \end{cases}\end{split}$

where $$\Delta$$ is determined by d_step which is the step-size change on the grid index.

• random: a design randomly chosen.

Parameters

kind ({‘optimal’, ‘staircase’, ‘random’}, optional) – Type of a design to choose

Returns

design – A chosen design vector