B
    ¤ŠãZ½  ã               @   s&   d Z ddlZddlmZ ddd„ZdS )	zE
Bland-Altman mean-difference plots

Author: Joses Ho
License: BSD-3
é    Né   )Úutilsç\Âõ(\ÿ?c             C   s<  t  |¡\}}t| ƒt|ƒkr&tdƒ‚|dk r<td |¡ƒ‚tj| |gdd}| | }	t |	¡}
tj|	dd}|pti }d|kr†d|d< |pŒi }|p”i }x0||gD ]$}d|kr´d|d< d	|kr d
|d	< q W d|krØd|d< d|krèd|d< |j||	f|Ž |j	|
f|Ž |j
d t |
d¡¡dddddd |dkrâd| | }| |
| |
| ¡ || }|
| }|
| }x(t||gƒD ]\}}|j	|f|Ž qzW |j
d |t |d¡¡dddddd |j
d |t |d¡¡ddddd n&|dkrd| }| |
| |
| ¡ |jddd  |jd!dd  |jd"d# | ¡  |S )$a'
  
    Tukey's Mean Difference Plot.

    Tukey's Mean Difference Plot (also known as a Bland-Altman plot) is a
    graphical method to analyze the differences between two methods of
    measurement. The mean of the measures is plotted against their difference.

    For more information see
    https://en.wikipedia.org/wiki/Bland-Altman_plot

    Parameters
    ----------
    m1, m2: pandas Series or array-like
    sd_limit : float, default 1.96
        The limit of agreements expressed in terms of the standard deviation of
        the differences. If `md` is the mean of the differences, and `sd` is
        the standard deviation of those differences, then the limits of
        agreement that will be plotted will be
                       
                       md - sd_limit * sd, md + sd_limit * sd

        The default of 1.96 will produce 95% confidence intervals for the means
        of the differences.
        If sd_limit = 0, no limits will be plotted, and the ylimit of the plot
        defaults to 3 standard deviatons on either side of the mean.
    ax: matplotlib AxesSubplot instance, optional
        If `ax` is None, then a figure is created. If an axis instance is
        given, the mean difference plot is drawn on the axis.
    scatter_kwargs: keywords
        Options to to style the scatter plot. Accepts any keywords for the
        matplotlib Axes.scatter plotting method
    mean_line_kwds: keywords
        Options to to style the scatter plot. Accepts any keywords for the
        matplotlib Axes.axhline plotting method
    limit_lines_kwds: keywords
        Options to to style the scatter plot. Accepts any keywords for the
        matplotlib Axes.axhline plotting method

    Returns
    -------
    fig : matplotlib Figure
        If `ax` is None, the created figure.  Otherwise the figure to which
        `ax` is connected.

    References
    ----------
    Bland JM, Altman DG (1986). "Statistical methods for assessing agreement
    between two methods of clinical measurement"

    Example
    --------

    Load relevant libraries.

    >>> import statsmodels.api as sm
    >>> import numpy as np
    >>> import matplotlib.pyplot as plt

    Making a mean difference plot.

    >>> # Seed the random number generator.
    >>> # This ensures that the results below are reproducible.
    >>> np.random.seed(9999)
    >>> m1 = np.random.random(20)
    >>> m2 = np.random.random(20)
    >>> f, ax = plt.subplots(1, figsize = (8,5))
    >>> sm.graphics.mean_diff_plot(m1, m2, ax = ax)
    >>> plt.show()

    .. plot:: plots/graphics-mean_diff_plot.py
    z'm1 does not have the same length as m2.r   zsd_limit ({}) is less than 0.)ZaxisÚsé   ZcolorZgrayZ	linewidthr   Z	linestylez--ú:zmean diff:
{}é   )g®Gáz®ï?g      à?ÚrightÚcenteré   zaxes fraction)ÚxyÚhorizontalalignmentZverticalalignmentÚfontsizeÚxycoordsg      ø?z	-SD{}: {})g®Gáz®ï?gìQ¸…ë±?Zbottomz	+SD{}: {})g®Gáz®ï?gq=
×£pí?)r   r   r   r   é   Z
Differenceé   )r   ZMeansé   )Z	labelsize)r   Zcreate_mpl_axÚlenÚ
ValueErrorÚformatÚnpZmeanZstdZscatterZaxhlineZannotateÚroundZset_ylimÚ	enumerateZ
set_ylabelZ
set_xlabelZtick_paramsZtight_layout)Zm1Zm2Zsd_limitZaxZscatter_kwdsZmean_line_kwdsZlimit_lines_kwdsZfigZmeansZdiffsZ	mean_diffZstd_diffÚkwdsZ	half_ylimZlimit_of_agreementÚlowerÚupperÚjZlim© r   ú=lib/python3.7/site-packages/statsmodels/graphics/agreement.pyÚmean_diff_plot   sx    I







r   )r   NNNN)Ú__doc__Znumpyr   Ú r   r   r   r   r   r   Ú<module>   s    