U
    KvfNO                  	   @   s  d Z ddlZddlZddlZddlm  mZ ddl	Z
ddlmZmZ ddlmZ ejejeZdZejedeZe
eZdddgZeddgdd	gged< ed
dddgddddgddddgddddgged< edddgdddgdddgged< dd Zdd Zdd  Zd!d" Z d#d$ Z!d%d& Z"d'd( Z#d)d* Z$d+d, Z%d-d. Z&d/d0 Z'd1d2 Z(d3d4 Z)d5d6 Z*d7d8 Z+G d9d: d:Z,G d;d< d<e,Z-G d=d> d>e,Z.G d?d@ d@e,Z/G dAdB dBZ0G dCdD dDe0Z1dS )Ez'
Tests for contingency table analyses.
    N)assert_allcloseassert_equalzcontingency_table_r_results.csvresults               !   T   ~                              
         (   c                  C   s   t tD ]x\} }tjj|dd}| }t|jtj	| df  t|j
tj	| df  |jdd}t|j|jd|j|     qd S )NFZshift_zerosZ
homog_statZhomog_dfZbhapkar)methodr   )	enumeratetablessmstatsSquareTablehomogeneityr   	statistic	r_resultslocdfsum)ktablestZhmZhmb r*   S/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/stats/tests/test_contingency_tables.pytest_homogeneity"   s    r,   c                  C   s   t jd tjtdddgd} t jddd| d< t jddd| d< t| d | d }t	|}tj	
| }t	t |}t|  |   t|  |   t|}t|dd	 t|jd
 d d S )Ni  d   v1v2indexcolumnsr   r   z$A 5x5 contingency table with counts:Tr   r   g       @)nprandomseedpd	DataFramerangerandintcrosstabctabr    	from_dataasarrayr   summaryas_textstr
startswithr(   )r%   r(   rslt1rslt2Zrslt3sr*   r*   r+   test_SquareTable_from_data/   s"    


rF   c                  C   s   dddgdddgdddgg} t j| dddgdddgd}tj|dd	}tjddddgddddgddddgddddggtjd
}t||j d S )Nr   r   r   r   r   r   r0   Fr   Zdtype)	r7   r8   r<   r    r4   r>   float64r   r(   )tabr%   Zdf2er*   r*   r+   test_SquareTable_nonsquareF   s    .rK   c                  C   s   dddgdddgddd	gg} t | } t| }|j}t|d
 dtd  t|d dtd ddd tt ||jddd d S )Nr   r   r   r   r   r         	   r3      7   r   r   -   H   h㈵>atolrtol)	r4   r>   r<   TableZcumulative_oddsratiosr   floatlogZcumulative_log_oddsratios)r(   tbl_objZcum_oddsr*   r*   r+   test_cumulative_oddsS   s    

 r\   c                  C   s|   dddgdddgddd	gg} t | } t| }|j}t|d
 d t|d dtd ddd tt ||jddd d S )Nr   r   r   r   r   r   rL   rM   rN   r3   g      ?rQ      r   rT   rU   )	r4   r>   r<   rX   Zlocal_oddsratiosr   rY   rZ   Zlocal_log_oddsratios)r(   r[   Zloc_oddsr*   r*   r+   test_local_oddsa   s    

 r^   c                  C   s   t jdt jd} t dd}ttj| ddj|  ttj| ddj| t jddd	gd
ddgdddggt jd} t jddd	gd
ddgdddggt jd}tt| j| ttj| ddj| d S )N)r   r   rG   g      ?Fr   Tr   r   r   r   r   r   r   )	r4   zerosrH   fullr   r<   rX   r(   r>   )tresultrr*   r*   r+   test_shiftingo   s$    rd   c                  C   sn   ddgddggddgddggddgddggg} t | j}t| }t|}t|j|j t|j|j d S )NrM   rN   r   rL   r   r      )r4   r>   Tr<   StratifiedTabler   oddsratio_pooledlogodds_pooled)tab1Ztab2Zct1Zct2r*   r*   r+   test_stratified_table_cube   s    .

rk   c                  C   s   ddddgddddgg} d	d
ddgddddgg}ddddgddddgg}t ddddgdddd gg}t d!d"d#d$gd%d&d'd(gg}t| }t|j|d)d)d* t|j|d)d)d* t|j|d)d)d* t|j|d)d)d* d S )+Nr]   rM   r   )   i3     i     gh|?6@gh|?1@gS㥛D@@g?5^I3@gQr@g=
ףpm@g(\W{@g33333p@g|a2U0j@g1Z@g(\?gNbX96@g'?gw/?g_vOv?gh o?g|ns;*g=yHg u5;ѿg}6`F@g8~?g]:?gW̲?g6gU朎hg-ջ.gW!<7ֿg0L@gU朎h@g-ջ.@gW!<7?g0L-C6?rU   )	r4   arrayr<   rX   r   ZfittedvaluesZchi2_contribsZresid_pearsonZstandardized_resids)r(   Zfitc2prsrrI   r*   r*   r+   test_resids   s$    






rt   c                  C   sn  t tD ]^\} }dt|jd  }dt|jd  }tj|dd||}t|j	t
j| df  t|jt
j| df  t|jd t
j| df  t|jd t
j| d	f d
d
d t|jt
j| df d
d
d tj|dd||d }t|j	t
j| df  t|jt
j| df  t|jd t
j| df  t|jd t
j| df  t|jt
j| df d
d
d qd S )Nr   r   Fr   Zlbl_statZ
lbl_expvalr   Zlbl_varZlbl_chi2rT   rW   rV   Z
lbl_pvalueZ	lbl2_statZlbl2_expvalZlbl2_varZ	lbl2_chi2Zlbl2_pvalue)r   r   r4   arangeshaper<   rX   test_ordinal_associationr   r"   r#   r$   Z	null_meanZnull_sdZzscorepvalue)r'   r(   Z
row_scoresZ
col_scoresrsltr*   r*   r+   rx      s     rx   c                  C   sd   t jd t jjdddd} ddlm} || }t|  }t	|j
|d  t	|j|d  d S )	Ni'"  r   r   )r   r   )sizer   )chi2_contingencyr   )r4   r5   r6   r:   Zscipy.statsr|   r<   rX   Ztest_nominal_associationr   r"   ry   )r(   r|   Z
rslt_scipybr*   r*   r+   test_chi2_association   s    r~   c                  C   sp   t tD ]b\} }tjj|dd}| }t|jtj	| df  t
|jtj	| df  t|jtj	| df  qd S )NFr   Zbowker_statZ	bowker_dfZbowker_pvalue)r   r   r   r   r    Zsymmetryr   r"   r#   r$   r   r%   ry   )r'   r(   r)   r}   r*   r*   r+   test_symmetry   s    r   c                  C   s   t jtd ddd} tjtd }| }t| j|j t	|j
d t jtd ddd}t|jtjd  t jtd dd}t|jtjd  d S )	Nr   Fexact
correctionr   T)r   Zhomog_cont_p)r   )r   Zhomog_binom_p)r<   mcnemarr   r   r   r    r!   r   r"   r   r%   ry   r#   r$   )b1r)   b2Zb3Zb4r*   r*   r+   test_mcnemar   s    r   c                  C   s   t ddddddddgddddddddgddddddddggj} tddgddggddgddggg}tjddd| }t|j	| tjdddt| }t|j	| d S )Nr   r   r   )
r7   r8   rf   r4   r>   r<   rg   r=   r   r(   r%   rJ   rj   r*   r*   r+   test_from_data_stratified   s    (&r   c                  C   s   t ddddddddgddddddddggj} tddgddgg}tjj| dd}t|j	| tjjt| dd}t|j	| d S )Nr   r   r   r   Fr   )
r7   r8   rf   r4   r>   r<   Table2x2r=   r   r(   r   r*   r*   r+   test_from_data_2x2   s    0r   c                  C   s  ddddgddddgddddgddddgddddgddddgddddgddddgddddgg	} t | } tj| dd\}}}t|d t|d dddddgdddddgdddddgdddddgdddddgdddddgdddddgdddddgdddddgg	} t | } tj| dd\}}}t|ddd	 t|d
 | d d ddf }t t|d d df |d d df }tj|dd}tj|ddd}t|j|j t|j	|j	 t
t|dd d S )Nr   r   F)Zreturn_objectg@r   g
h"lxz?ro   )rW   r   r   Tr   zdf          1
pvalue      0.65)r4   r>   r<   Z
cochrans_qr   r7   r;   r   r"   ry   r   rA   rB   )r(   statry   r%   dataZxtabr   r   r*   r*   r+   test_cochranq  sF    








	


	

*r   c                   @   sZ   e Zd ZedddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd ZdS )CheckStratifiedMixinFc                 C   sL   |s|nt |}t|| _tj|dd| _dd |D }t|| _d S )NTr   c                 S   s   g | ]}t |qS r*   )r7   r8   ).0xr*   r*   r+   
<listcomp>M  s     z3CheckStratifiedMixin.initialize.<locals>.<listcomp>)r4   Zdstackr<   rg   rz   Zrslt_0rslt_pandas)clsr   use_arrZtables1Ztables_pandasr*   r*   r+   
initializeH  s
    zCheckStratifiedMixin.initializec                 C   s   t | jj| jddd d S Nro   ru   )r   rz   rh   selfr*   r*   r+   test_oddsratio_pooledQ  s     z*CheckStratifiedMixin.test_oddsratio_pooledc                 C   s   t | jj| jddd d S r   )r   rz   ri   r   r*   r*   r+   test_logodds_pooledV  s     z(CheckStratifiedMixin.test_logodds_pooledc                 C   s:   | j jdd}t|j| jddd t|j| jddd d S )NT)r   ro   rT   ru   )rz   test_null_oddsr   r"   mh_statry   	mh_pvaluer   rz   r*   r*   r+   r   [  s    z#CheckStratifiedMixin.test_null_oddsc                 C   s6   | j  \}}t|| jddd t|| jddd d S r   )rz   Zoddsratio_pooled_confintr   or_lcbor_ucbr   ZlcbZucbr*   r*   r+   test_oddsratio_pooled_confinta  s    z2CheckStratifiedMixin.test_oddsratio_pooled_confintc                 C   sB   | j  \}}t|t| jddd t|t| jddd d S r   )rz   Zlogodds_pooled_confintr   r4   rZ   r   r   r   r*   r*   r+   test_logodds_pooled_confintg  s    z0CheckStratifiedMixin.test_logodds_pooled_confintc                 C   s~   t | dsd S | jjdd}t|j| jddd t|j| jddd | jjdd}t|j| jddd t|j| j	ddd d S )Nor_homogF)adjustro   ru   T)
hasattrrz   test_equal_oddsr   r"   r   ry   
or_homog_por_homog_adjor_homog_adj_pr   r*   r*   r+   r   o  s    
z$CheckStratifiedMixin.test_equal_oddsc              	   C   sB   t  0 t dt t| j  | j   W 5 Q R X d S )Nignore)	warningscatch_warningssimplefilterRuntimeWarningr   rz   r?   r@   r   r   r*   r*   r+   test_pandas}  s
    
z CheckStratifiedMixin.test_pandasc              	   C   s   t jd tjtddd}t jddd|d< t jddd|d< t t d	t 	d	|d
< g }td	D ]B}t d	| d	|d  }|
t|j|df |j|df  qnt|}tjddd
|}t|  |   d S )N   r-   )r.   r/   stratr0   r   r   r.   r/   r   r   r   )r4   r5   r6   r7   r8   r9   r:   Zkronrv   Zonesappendr;   r$   r<   rg   r=   r   r?   r@   )r   r%   r   r'   iirC   rD   r*   r*   r+   test_from_data  s    (
z#CheckStratifiedMixin.test_from_dataN)F)__name__
__module____qualname__classmethodr   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r   F  s   r   c                   @   s   e Zd ZdZedd ZdS )TestStratified1z
    data = array(c(0, 0, 6, 5,
                   3, 0, 3, 6,
                   6, 2, 0, 4,
                   5, 6, 1, 0,
                   2, 5, 0, 0),
                   dim=c(2, 2, 5))
    rslt = mantelhaen.test(data)
    c                 C   s   d gd }t ddgddgg|d< t ddgddgg|d< t ddgddgg|d< t ddgddgg|d< t ddgddgg|d< | | d| _t d| _d	| _d
| _d| _d| _	d S )Nr   r   r   r   r   r   r   rL   gY8m@gM?g|Vjm?g |(G@)
r4   rp   r   rh   rZ   ri   r   r   r   r   r   r   r*   r*   r+   setup_class  s    

zTestStratified1.setup_classNr   r   r   __doc__r   r   r*   r*   r*   r+   r     s   
r   c                   @   s   e Zd ZdZedd ZdS )TestStratified2a_  
    library(DescTools)
    data = array(c(20, 14, 10, 24,
                   15, 12, 3, 15,
                   3, 2, 3, 2,
                   12, 3, 7, 5,
                   1, 0, 3, 2),
                   dim=c(2, 2, 5))
    rslt = mantelhaen.test(data)
    bd1 = BreslowDayTest(data, correct=FALSE)
    bd2 = BreslowDayTest(data, correct=TRUE)
    c                 C   s   d gd }t ddgddgg|d< t ddgd	dgg|d
< t d	dgd	dgg|d< t dd	gddgg|d	< t d
dgd	dgg|d< | j|dd d| _t d| _d| _d| _d| _d| _	d| _
d| _d| _d| _d S )Nr   r   r   r      r   r   r]   r   r   r   rL   r   T)r   g_)Ǻ@g48'@gq?FB?g,i?g}ZEh@g9m4?gX9v?gV}b?r4   rp   r   rh   rZ   ri   r   r   r   r   r   r   r   r   r   r*   r*   r+   r     s"    
zTestStratified2.setup_classNr   r*   r*   r*   r+   r     s   r   c                   @   s   e Zd ZdZedd ZdS )TestStratified3a  
    library(DescTools)
    data = array(c(313, 512, 19, 89,
                   207, 353, 8, 17,
                   205, 120, 391, 202,
                   278, 139, 244, 131,
                   138, 53, 299, 94,
                   351, 22, 317, 24),
                   dim=c(2, 2, 6))
    rslt = mantelhaen.test(data)
    bd1 = BreslowDayTest(data, correct=FALSE)
    bd2 = BreslowDayTest(data, correct=TRUE)
    c                 C   s   d gd }t ddgddgg|d< t ddgd	d
gg|d< t ddgddgg|d< t ddgddgg|d< t ddgddgg|d< t ddgddgg|d< | | d | _t d | _d!| _d"| _d#| _d$| _	d%| _
d&| _d%| _d&| _d S )'Nr   i9  i   r   Y   r      ia  rM      r      x   i     r   i           r      5   i+  ^   r   i_     i=  r   r   gcK?gOec?g6>W[?gZ ?gA%Pi?g=2@g+`?r   r   r*   r*   r+   r     s$    

zTestStratified3.setup_classNr   r*   r*   r*   r+   r     s   r   c                   @   s   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )Check2x2Mixinc                 C   s"   t | j| _t j| j| _d S N)r<   r   r(   r[   r=   r   tbl_data_obj)r   r*   r*   r+   r     s    zCheck2x2Mixin.initializec                 C   s   t | jj| j d S r   )r   r[   	oddsratior   r*   r*   r+   test_oddsratio  s    zCheck2x2Mixin.test_oddsratioc                 C   s   t | jj| j d S r   )r   r[   log_oddsratior   r*   r*   r+   test_log_oddsratio  s    z Check2x2Mixin.test_log_oddsratioc                 C   s   t | jj| j d S r   )r   r[   log_oddsratio_ser   r*   r*   r+   test_log_oddsratio_se  s    z#Check2x2Mixin.test_log_oddsratio_sec                 C   s   t | j | j d S r   )r   r[   oddsratio_pvaluer   r*   r*   r+   test_oddsratio_pvalue   s    z#Check2x2Mixin.test_oddsratio_pvaluec                 C   s2   | j d\}}| j\}}t|| t|| d S Ng?)r[   oddsratio_confintr   r   Zlcb1Zucb1Zlcb2Zucb2r*   r*   r+   test_oddsratio_confint$  s    

z$Check2x2Mixin.test_oddsratio_confintc                 C   s   t | jj| j d S r   )r   r[   	riskratior   r*   r*   r+   test_riskratio+  s    zCheck2x2Mixin.test_riskratioc                 C   s   t | jj| j d S r   )r   r[   log_riskratior   r*   r*   r+   test_log_riskratio/  s    z Check2x2Mixin.test_log_riskratioc                 C   s   t | jj| j d S r   )r   r[   log_riskratio_ser   r*   r*   r+   test_log_riskratio_se3  s    z#Check2x2Mixin.test_log_riskratio_sec                 C   s   t | j | j d S r   )r   r[   riskratio_pvaluer   r*   r*   r+   test_riskratio_pvalue7  s    z#Check2x2Mixin.test_riskratio_pvaluec                 C   s2   | j d\}}| j\}}t|| t|| d S r   )r[   riskratio_confintr   r   r*   r*   r+   test_riskratio_confint;  s    

z$Check2x2Mixin.test_riskratio_confintc                 C   s2   | j d\}}| j\}}t|| t|| d S r   )r[   log_riskratio_confintr   r   r*   r*   r+   test_log_riskratio_confintB  s    

z(Check2x2Mixin.test_log_riskratio_confintc                 C   s"   t | j  | j   d S r   )r   r[   r?   r@   r   r   r*   r*   r+   r   I  s    zCheck2x2Mixin.test_from_datac                 C   s   t | j  | j d S r   )r   r[   r?   r@   summary_stringr   r*   r*   r+   test_summaryM  s    zCheck2x2Mixin.test_summaryN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r     s   
r   c                   @   s   e Zd Zedd ZdS )	Test2x2_1c                 C   s   t d}ddddddddg|d d df< ddddddddg|d d df< t || _t ddgddgg| _d| _d| _t d| _ddg| _	d| _
d| _d| _dt d | _d| _d	d
g| _ddg| _dddddddg}d|| _|   d S )N)rM   r   r   r   r   g      ?g        gU3?g~3/@gvc?gL%@g,},g,},?z3               Estimate   SE   LCB    UCB   p-valuez3---------------------------------------------------z3Odds ratio        1.000        0.063 15.988   1.000z3Log odds ratio    0.000 1.414 -2.772  2.772   1.000z3Risk ratio        1.000        0.250  3.998   1.000z3Log risk ratio    0.000 0.707 -1.386  1.386   1.000
)r4   r_   r>   r   r(   r   r   sqrtr   r   r   r   r   r   r   r   r   joinr   r   )r   r   ssr*   r*   r+   r   U  s<    
  
zTest2x2_1.setup_classN)r   r   r   r   r   r*   r*   r*   r+   r   S  s   r   )2r   osr   Znumpyr4   Z$statsmodels.stats.contingency_tablesr   Zcontingency_tablesr<   Zpandasr7   Znumpy.testingr   r   Zstatsmodels.apiapir   pathdirnameabspath__file__Zcur_dirfnamer   ZfpathZread_csvr#   r   r>   r,   rF   rK   r\   r^   rd   rk   rt   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   <module>   sV   







AR,,E