Metadata-Version: 2.1
Name: FitPsyche
Version: 0.0.1
Summary: Psychometric curve fitting package for Python and MATLAB.
Home-page: https://github.com/garethjns/PsychometricCurveFitting
Author: Gareth Jones
Author-email: garethgithub@gmail.com
License: UNKNOWN
Description: # Psychometric curve fitting
        
        Fitting for Psychometric curves in Python and Matlab. Supports:
          - [Simple logit link function (mean and varience parameters)](https://en.wikipedia.org/wiki/Psychometric_function).
          - [Wichmann and Hill 2001](http://wexler.free.fr/library/files/wichmann%20(2001)%20the%20psychometric%20function.%20i.%20fitting,%20sampling,%20and%20goodness%20of%20fit.pdf). This curve adds two additional parameters, "guess" and "lapse", which control somewhat for subject fallibility, improving the estimate of the discrimination threshold.
        
        # Python usage
        ````bash
        pip install fit-psyche
        ````
        
        ## Using Uses sklearn API.
        ````python
        import numpy as np
        
        from fit_psyche.psychometric_curve import PsychometricCurve
        
        x = np.linspace(start=12, stop=16, num=6)
        y = (x > x.mean()).astype(float)
        y[2] = y[2] + np.abs(np.random.rand())
        y[3] = y[3] - np.abs(np.random.rand())
        
        pc = PsychometricCurve().fit(x, y)
        pc.plot(x, y)
        print(pc.score(x, y))
        print(pc.coefs_)
        ````
        ![Example WH](https://raw.githubusercontent.com/garethjns/PsychometricCurveFitting/master/Images/WHPy.png)
        
        
        # Matlab Usage
        Fitting functions can be accessed by creating a PsychFit object, or directly. See also examples in scripts/.
        
        ```MATLAB
        % Make up some data
        y1 = [0 0 25 25 50 50 75 75 100 100]/100;
        y2 = [20 20 20 30 40 60 70 80 80 80];
        y2 = (y2+rand(1,numel(y2))*5)/100;
        % Create x axis
        x = 0.1:0.1:1;
        ```
        
        ## PsychFit object
        ### GLM
        ```MATLAB
        ffit1 = fitPsyche(x, y1, 'GLM');
        ffit2 = fitPsyche(x, y2, 'GLM');
        
        figure
        plotPsyche(ffit1)
        hold on
        plotPsyche(ffit2)
        legend({'y1', 'y2', 'y1 fit', 'y2 fit'}, 'Location', 'NorthWest')
        title('GLM fit')
        ```
        ![Example GLM](https://raw.githubusercontent.com/garethjns/PsychometricCurveFitting/master/Images/GLMObj.png)
        
        
        ### WH2001
        ```MATLAB
        ffit1 = fitPsyche(x, y1, 'WH');
        ffit2 = fitPsyche(x, y2, 'WH');
        
        figure
        plotPsyche(ffit1)
        hold on
        plotPsyche(ffit2)
        legend({'y1', 'y2', 'y1 fit', 'y2 fit'}, 'Location', 'NorthWest')
        title('WH 2001 fit')
        
        disp(ffit1.model)
        disp(ffit2.model)
        ```
        ![Example WH](https://raw.githubusercontent.com/garethjns/PsychometricCurveFitting/master/Images/WHObj.png)
        
        ### WH2001 with limited coefficients
        ```MATLAB
        %% Set limits for WH fit
        
        % g (guess rate), l (lapse), u (mean, bias), v (variance, discrimination
        % thresh)
        % UpperLimits:
        UL = [0.05, 0.05, 1, 1]; % Limit upper bound of g and l to 5%
        % StartPoints:
        SP = [0, 0, 0.5, 0.5];
        % LowerLimits:
        LL = [0.05, 0.05, 0, 0];
        
        ffit1 = fitPsyche(x, y2, 'WH', [UL;SP;LL]);
        ffit2 = fitPsyche(x, y2, 'WH');
        figure
        plotPsyche(ffit1)
        hold on
        plotPsyche(ffit2)
        legend({'y2', 'y2 limited fit', 'y2', 'y2 fit'}, 'Location', 'NorthWest')
        title('WH 2001 fit')
        
        disp(ffit1.model)
        disp(ffit2.model)
        ```
        ![Example WH](https://raw.githubusercontent.com/garethjns/PsychometricCurveFitting/master/Images/WHObjLim.png)
        
        ## Direct method access
        ### GLM
        ```MATLAB
        %% Fit GLM - access methods directly
        
        [coeffs1, curve1, ~] = ...
            fitPsyche.fitPsycheCurveLogit(x, y1);
        [coeffs2, curve2, ~] = ...
            fitPsyche.fitPsycheCurveLogit(x, y2);
        
        % Plot
        figure
        scatter(x', y1')
        hold on
        scatter(x', y2')
        plot(curve1(:,1),curve1(:,2))
        plot(curve2(:,1),curve2(:,2))
        legend({'y1', 'y2', 'y1 fit', 'y2 fit'}, 'Location', 'NorthWest')
        title('GLM fit')
        ```
        ![Example GLM](https://raw.githubusercontent.com/garethjns/PsychometricCurveFitting/master/Images/GLMFit.png)
        
        ### WH2001
        ```MATLAB
        [ffit1, curve1] = ...
            fitPsyche.fitPsycheCurveWH(x, y1);
        [ffit2, curve2] = ...
            fitPsyche.fitPsycheCurveWH(x, y2);
        
        % Plot
        figure
        scatter(x', y1')
        hold on
        scatter(x', y2')
        plot(ffit1)
        plot(ffit2)
        legend({'y1', 'y2', 'y1 fit', 'y2 fit'}, 'Location', 'NorthWest')
        title('WH2001 fit')
        ```
        ![Example WH](https://raw.githubusercontent.com/garethjns/PsychometricCurveFitting/master/Images/WHDirect.png)
        
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
