U
    Kvfp                     @   s`  d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
mZ ddlZddlmZmZmZmZ ddlZddlZddlmZ ddlmZmZ ddlm  mZ dd	l m!Z! G d
d dZ"G dd de"Z#G dd de"Z$G dd de"Z%G dd de"Z&G dd de"Z'G dd de"Z(G dd de"Z)G dd de"Z*G dd de"Z+G dd de"Z,G d d! d!e"Z-G d"d# d#e"Z.G d$d% d%e"Z/G d&d' d'Z0d(d) Z1G d*d+ d+e0Z2G d,d- d-e0Z3G d.d/ d/e0Z4G d0d1 d1e0Z5G d2d3 d3e0Z6G d4d5 d5e0Z7G d6d7 d7Z8G d8d9 d9e8Z9G d:d; d;e8Z:G d<d= d=e8Z;G d>d? d?e8Z<G d@dA dAe8Z=dS )BzTests that use cross-checks for generic methods

Should be easy to check consistency across models
Does not cover tsa

Initial cases copied from test_shrink_pickle

Created on Wed Oct 30 14:01:27 2013

Author: Josef Perktold
    )pytest_warns)assert_index_equalassert_series_equal)PLATFORM_LINUX32PLATFORM_OSXPLATFORM_WIN32)SCIPY_GT_14N)assert_assert_allcloseassert_array_equalassert_equal)glmols)HessianInversionWarningc                   @   sP   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S )CheckGenericMixinc                 C   sN   d}t jd t j|d}t|}|| _dt d | _i | _	d | _
d S )N  )    g      ?)      )nprandomseedrandnsmadd_constantexogonesZxfpredict_kwdstransform_index)clsnobsx r#   O/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/base/tests/test_generic_methods.pysetup_class(   s    
zCheckGenericMixin.setup_classc                 C   s   t | j | j}tt|j}||d }dd }| }t	|j
|jd dd t|dt|k |jdd}d	}t|t|k |jdd}|jd
krdnd}|jd
krdnd}	dd|	|ddg}
t|jj|
 d S )Nr   c                 S   s   d| d d| d  f S )Nz[%4.3F      %4.3F]r      r#   alphar#   r#   r$   <lambda>;   s    
z6CheckGenericMixin.test_ttest_tvalues.<locals>.<lambda>g&.>rtolg?g?r'   z[0.05       0.95]FzP>|z|zP>|t|ztZcoefzstd errzConf. Int. LowzConf. Int. Upp.)smtZcheck_ttest_tvaluesresultsr   eyelenparamst_testsummaryr
   pvaluepvaluesr	   strsummary_frameuse_tr   columnsvalues)selfresmatttZstring_confintZsummssZsummfZpvstring_use_tZtstring_use_tcolsr#   r#   r$   test_ttest_tvalues3   s&     z$CheckGenericMixin.test_ttest_tvaluesc                 C   s   t | j d S N)r.   Zcheck_ftest_pvaluesr/   r<   r#   r#   r$   test_ftest_pvaluesM   s    z$CheckGenericMixin.test_ftest_pvaluesc                 C   s   t | j d S rC   )r.   Zcheck_fittedr/   rD   r#   r#   r$   test_fittedP   s    zCheckGenericMixin.test_fittedc                 C   s   t | j d S rC   )r.   Zcheck_predict_typesr/   rD   r#   r#   r$   test_predict_typesS   s    z$CheckGenericMixin.test_predict_typesc                 C   s>  t | jjtjrtd t | jjtjtjtj	f }|| _
tt| jjjjd }tt| jjjd }dg}|D ]}||= ||= qt|r| jjj|d| jjd}n| jjj|dd}| ||}t|j| |jddd t|j| d t|j| |jddd t|j| d trd	nd}|j| }	t|	|j||d tsHtrT|j| }
n
|j| }
t|
|j||d t|d
rd}d}tstrd	}d}t|j|j||d | jjjd}|j|f| j}|j|| f| j}t||dd | jjjd d }|j|f| j}|j|d d |f f| j}t||dd d S )Nz%GEE does not subclass LikelihoodModelr&   r   r   )maxiterstart_paramsrH   绽|=r+   atol:0yE>residg-q=r*      ) 
isinstancer/   modelr   GEEpytestskipRLMOLSWLSuse_start_paramslistranger   shaper2   Z
_fit_zeros_get_constrainedr
   r   bser   tvaluesr   r   r6   hasattrr   rO   meanpredictr   )r<   rY   
keep_indexkeep_index_p
drop_indexires1res2toltvals1pvals1r+   rM   ex
predicted1
predicted2r#   r#   r$   test_zero_constrainedV   s`    


z'CheckGenericMixin.test_zero_constrainedc                 C   sb   | j j}|j}| }||j|jd d |f f|}| jrR|j| j j| dd}n|jdd}|S )Nr   )rI   rH   rJ   )	r/   rR   	__class___get_init_kwdsendogr   rY   fitr2   )r<   rc   rd   mod2mod_cls	init_kwdsmodr=   r#   r#   r$   r]      s    z"CheckGenericMixin._get_constrainedc              
   C   s  t | jjtjrtd t | jjtjtjtj	tj
f }|| _tt| jjjjd }tt| jjjd }g }|D ]}||= ||= qvtt| jjjd }| jj}|j}| }t|j|jf}	||j|	f|}
tt| jjjjd }tt| jjjjd }|	jd }d}t|
drJ|
jdkrJ|tt|||
j 7 }|
j}t |
tj
r\tnd }ddg}|D ] }|dkrt | jjtjr d S |rJt|| }| jjd }| jjd  }| jd k	rt|| j || j< |||< t| |
j|||dd	}W 5 Q R X |dkrt| | jjj |||dd	}W 5 Q R X nVt|. t | jjtjrp|
 }n|
j|d
}W 5 Q R X |dkr| jjj |d
}|dkr| j}t|dr4t!|j"jd |jd  d|jkr4|j"jd }t#||jd ddd t!|jd |jd  t#|jd |jd ddd t#|j| |jdd t#|j| ddd t#|j$| |j$dd t#|j$| ddd |j%| }t#||j%dd t&st'r|j(| }n
|j(| }t#||j(ddd t|drt#|j)|j)ddd |jj*d}	|j+|	f| j,}|j+|	| f| j,}t#||ddd |jjd d }	t-| di }|j+|	f|}|j+|	d d |f f|}t#||ddd qld S )NzNot completely generic yetr&   r   k_extraZ	nonrobustHC0Z	optimizerrI   )cov_typerI   methoddisprz   mle_settingsrK   g#B;rL   gư>r*   rN   gHj>gKH9rO   h㈵>gdy=rP   predict_kwds_5).rQ   r/   rR   r   rS   rT   rU   rV   rW   rX   GLMrY   rZ   r[   r   r\   r2   rp   rq   r   Zcolumn_stackrr   r`   rx   r   zerosr~   copyr   expr   Z_fit_collinearrs   r   Zresults_constrainedr
   r^   r_   r   r   r6   rO   ra   rb   r   getattr)r<   rY   rc   rd   re   rf   rt   ru   rv   rl   rw   Zk_varsrx   Zwarn_clsZ	cov_typesrz   rI   r{   sprg   rh   Zspcrj   rk   rm   rn   kwdsr#   r#   r$   test_zero_collinear   s    



 


 



 

 

z%CheckGenericMixin.test_zero_collinearN)__name__
__module____qualname__classmethodr%   rB   rE   rF   rG   ro   r]   r   r#   r#   r#   r$   r   &   s   

Ar   c                   @   s   e Zd Zdd ZdS )TestGenericOLSc                 C   sF   | j }tjd |dtj|jd  }t|| j 	 | _
d S Nr   r&   r   )r   r   r   r   sumr   r\   r   rW   rs   r/   r<   r"   yr#   r#   r$   setup_method)  s    zTestGenericOLS.setup_methodNr   r   r   r   r#   r#   r#   r$   r   '  s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestGenericOLSOneExogc                 C   sJ   | j d d df }tjd |tj|jd  }t|| | _	d S )Nr&   r   r   )
r   r   r   r   r   r\   r   rW   rs   r/   r   r#   r#   r$   r   4  s    z"TestGenericOLSOneExog.setup_methodc                 C   s   t d d S )Nz/Override since cannot remove the only regressor)rT   rU   rD   r#   r#   r$   ro   ;  s    
z+TestGenericOLSOneExog.test_zero_constrainedN)r   r   r   r   ro   r#   r#   r#   r$   r   1  s   r   c                   @   s   e Zd Zdd ZdS )TestGenericWLSc                 C   sT   | j }tjd |dtj|jd  }tj|| j t	t
|d | _d S )Nr   r&   r   )weights)r   r   r   r   r   r   r\   r   rX   r   r1   rs   r/   r   r#   r#   r$   r   C  s    zTestGenericWLS.setup_methodNr   r#   r#   r#   r$   r   A  s   r   c                   @   s   e Zd Zdd ZdS )TestGenericPoissonc                 C   sf   | j }tjd tjt|d|  }t	||}t
ddddg}|j|ddd	| _d S )
Nr   r&   c<sm?&?`C?Z9(
?bfgsr   rI   r{   r|   )r   r   r   r   poissonr   r   ra   r   Poissonarrayrs   r/   )r<   r"   y_countrR   rI   r#   r#   r$   r   M  s     zTestGenericPoisson.setup_methodNr   r#   r#   r#   r$   r   K  s   r   c                   @   s   e Zd Zdd ZdS )TestGenericPoissonOffsetc                 C   s   | j }|jd }tjd tjt|d|  }t	j
||dt| t|d}tdddd	g}|j|d
dd| _tdtd tdd| _tddd| _d S )Nr   r   r&   {Gz?)offsetexposurer   r   r   r   r   r   rP   r   r   )r   r\   r   r   r   r   r   r   ra   r   r   r   r   rs   r/   dictr   r   r<   r"   r!   r   rR   rI   r#   r#   r$   r   [  s    
 z%TestGenericPoissonOffset.setup_methodNr   r#   r#   r#   r$   r   Y  s   r   c                   @   s   e Zd Zdd ZdS )TestGenericNegativeBinomialc                 C   s   t jd tjj }t |j|_t |j	|_	tj
|jdd}t|j	|}t dddddd	d
ddddg}|j|ddd| _d| _d S )Nr   F)prependgJtصgiڋIѿg}E	?g0on~gLa/?g9?gigZ?g<pc?g}[D?g!4'x?r   r   )rI   r|   rH   )r   r   r   r   ZdatasetsZrandhieloadZasarrayr   rr   r   NegativeBinomialr   rs   r/   r   )r<   datar   rw   rI   r#   r#   r$   r   n  s"         z(TestGenericNegativeBinomial.setup_methodNr   r#   r#   r#   r$   r   l  s   r   c                   @   s   e Zd Zdd ZdS )TestGenericLogitc              	   C   s   | j }|jd }tjd tj|ddt|d|    k 	t
}t||}tddddg}tjtd	d
 |j|dddd| _W 5 Q R X d S )Nr   r         ?r&   gdb=}gu7$gGZHgzdz"Keyword arguments have been passed)matchr   r   )rI   r{   r|   ri   )r   r\   r   r   r   Zrandr   r   ra   Zastypeintr   ZLogitr   rT   ZwarnsFutureWarningrs   r/   )r<   r"   r!   Zy_binrR   rI   r#   r#   r$   r     s    
2  zTestGenericLogit.setup_methodNr   r#   r#   r#   r$   r   }  s   r   c                   @   s   e Zd Zdd ZdS )TestGenericRLMc                 C   sF   | j }tjd |dtj|jd  }t|| j 	 | _
d S r   )r   r   r   r   r   r   r\   r   rV   rs   r/   r   r#   r#   r$   r     s    zTestGenericRLM.setup_methodNr   r#   r#   r#   r$   r     s   r   c                   @   s   e Zd Zdd ZdS )TestGenericGLMc                 C   sF   | j }tjd |dtj|jd  }t|| j 	 | _
d S r   )r   r   r   r   r   r   r\   r   r   rs   r/   r   r#   r#   r$   r     s    zTestGenericGLM.setup_methodNr   r#   r#   r#   r$   r     s   r   c                   @   s   e Zd Zdd ZdS )TestGenericGLMPoissonOffsetc                 C   s   | j }|jd }tjd tjt|d|  }t	j
||t	j dt| t|d}tdddd	g}|j|d
dd| _tdtd tdd| _tddd| _d S )Nr   r   r&   r   )familyr   r   r   r   r   r   r   r   rP   r   )r   r\   r   r   r   r   r   r   ra   r   r   familiesr   r   r   rs   r/   r   r   r   r   r#   r#   r$   r     s    
 z(TestGenericGLMPoissonOffset.setup_methodNr   r#   r#   r#   r$   r     s   r   c                   @   s   e Zd Zdd ZdS )TestGenericGEEPoissonc                 C   s   | j }tjd tjt|d|  }tjjdd|j	d d}t
ddddg}tj }tj }tj|| j |||dj|d	| _d S )
Nr   r&   r   r   size        r   r   
cov_struct)rI   r   r   r   r   r   r   r   ra   randintr\   r   r   r   ZIndependencer   r   rS   rs   r/   r<   r"   r   groupsrI   vir   r#   r#   r$   r     s     

z"TestGenericGEEPoisson.setup_methodNr   r#   r#   r#   r$   r     s   r   c                   @   s   e Zd Zdd ZdS )TestGenericGEEPoissonNaivec                 C   s   | j }tjd tjt|d|dd }tjjdd|j	d d}t
ddddg}tj }tj }tj|| j |||dj|d	d
| _d S )Nr   r&   r   r   r   r   r   r   ZnaiverI   rz   r   r   r#   r#   r$   r     s    (

z'TestGenericGEEPoissonNaive.setup_methodNr   r#   r#   r#   r$   r     s   r   c                   @   s   e Zd Zdd ZdS )TestGenericGEEPoissonBCc                 C   s   | j }tjd tjt|d|dd }tjjdd|j	d d}t
ddddg}tj }tj }tj|| j |||d}|j|d	d
| _d S )Nr   r&   r   r   r   r   r   r   Zbias_reducedr   r   )r<   r"   r   r   rI   r   r   rw   r#   r#   r$   r     s    (

z$TestGenericGEEPoissonBC.setup_methodNr   r#   r#   r#   r$   r     s   r   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )CheckAnovaMixinc                 C   sH   dd l m  m  m} | }|  |jdddg| _|   d S )Nr   r&   r   )	"statsmodels.stats.tests.test_anovastatstests
test_anova
TestAnova3r%   r   drop
initialize)r    ttmodtestr#   r#   r$   r%     s
    zCheckAnovaMixin.setup_classc           
   	   C   s   | j }|jdddgdd}tt|j}|d }|ddg }|d	 }|d
dg }|dd }|d	d
dg }	t|||||||	|g d S )NFDurationWeightTskip_singleZcombine_termsscalarr   r   r   r&   r   rP      r=   wald_test_termsr   r0   r1   r2   compare_waldres)
r<   r=   war0   Zc_constc_wc_dc_dwc_weight
c_durationr#   r#   r$   test_combined  s    zCheckAnovaMixin.test_combinedc                 C   sP   | j }|jddd}tt|j}|ddg }|ddg }t||||g d S )NT)r   r   r   r   r   rP   r   )r<   r=   r   r0   r   r   r#   r#   r$   test_categories	  s    zCheckAnovaMixin.test_categoriesN)r   r   r   r   r%   r   r   r#   r#   r#   r$   r     s   
	r   c                 C   s6  t |D ]\}}| j|dd}t|jj|df |j t|jj|df |j |jdkrb|jd nd}t	|jj|df | t|j| |j t|j
| |j t	|j| | | jrt	|j| | j q|j}| jrt	|jd t	|d d t	|d d n(t	|jd t	|d d t	|d d	 |  d S )
NT)r   r   r&   r   FzP>FZchi2zP>chi2)	enumerateZ	wald_testr
   tabler;   Z	statisticr5   ndimr\   r   r6   df_constraintsr9   Zdf_denomZdf_resid	col_namesdistributionr8   )r=   r   Z
constrastsrf   cwtZdfr   r#   r#   r$   r     s(    r   c                   @   s    e Zd Zedd Zdd ZdS )TestWaldAnovaOLSc                 C   s   t d| j}|jdd| _d S N0np.log(Days+1) ~ C(Duration, Sum)*C(Weight, Sum)F)r9   r   r   rs   r=   r    rw   r#   r#   r$   r   2  s    zTestWaldAnovaOLS.initializec           
      C   s   | j jj}| j jjj}t|}t||	 }|j
dddgdd}tt|j}dd |D }|dd	 }|d
ddg }t|||||g  d
gt| ddg }	t|j|	 d S )NFr   r   Tr   c                 S   s   g | ]}|qS r#   r#   ).0rowr#   r#   r$   
<listcomp>D  s     z3TestWaldAnovaOLS.test_noformula.<locals>.<listcomp>r   r   r&   r   rP   r   )r=   rR   rr   r   Z	orig_exogpdZ	DataFramer   rW   rs   r   r   r0   r1   r2   r   r   r   )
r<   rr   r   r=   r   r0   Zc_singler   r   r   r#   r#   r$   test_noformula7  s    

zTestWaldAnovaOLS.test_noformulaN)r   r   r   r   r   r   r#   r#   r#   r$   r   0  s   
r   c                   @   s    e Zd Zedd Zdd ZdS )TestWaldAnovaOLSFc                 C   s   t d| j}| | _d S )Nr   r   r   r#   r#   r$   r   Q  s    zTestWaldAnovaOLSF.initializec                 C   sv   | j d d  }tj|jd< | j|}| j|dd  }t|j|j t	|jdd  | t
|jd tj d S )NrP   )r   r&   r&   r   )r   r   r   nanilocr=   rb   r   indexr   r   r;   )r<   rl   rm   rn   r#   r#   r$   test_predict_missingV  s    z&TestWaldAnovaOLSF.test_predict_missingN)r   r   r   r   r   r   r#   r#   r#   r$   r   O  s   
r   c                   @   s   e Zd Zedd ZdS )TestWaldAnovaGLMc                 C   s   t d| j}|jdd| _d S r   )r   r   rs   r=   r   r#   r#   r$   r   c  s    zTestWaldAnovaGLM.initializeNr   r   r   r   r   r#   r#   r#   r$   r   a  s   r   c                   @   s   e Zd Zedd ZdS )TestWaldAnovaPoissonc                 C   s,   ddl m} |d| j}|jdd| _d S )Nr   r   &Days ~ C(Duration, Sum)*C(Weight, Sum)ry   r}   )#statsmodels.discrete.discrete_modelr   from_formular   rs   r=   )r    r   rw   r#   r#   r$   r   k  s    zTestWaldAnovaPoisson.initializeNr   r#   r#   r#   r$   r   i  s   r   c                   @   s   e Zd Zedd ZdS )TestWaldAnovaNegBinc                 C   s0   ddl m} d}|j|| jdd}| | _d S )Nr   r   r   Znb2Zloglike_methodr   r   r   r   rs   r=   r    r   Zformularw   r#   r#   r$   r   u  s    
zTestWaldAnovaNegBin.initializeNr   r#   r#   r#   r$   r  s  s   r  c                   @   s   e Zd Zedd ZdS )TestWaldAnovaNegBin1c                 C   s4   ddl m} d}|j|| jdd}|jdd| _d S )Nr   r  r   Znb1r  ry   r}   r  r  r#   r#   r$   r     s    
zTestWaldAnovaNegBin1.initializeNr   r#   r#   r#   r$   r    s   r  c                   @   s   e Zd Zdd ZdS )CheckPairwisec                 C   sL   | j }|| j}|| j}|j}t|jd d d df j|	 j d S )Nr   )
r=   r3   constraintst_test_pairwise	term_nameresult_framer
   r   r;   r8   )r<   r=   r?   pwZpw_framer#   r#   r$   test_default  s    zCheckPairwise.test_defaultN)r   r   r   r  r#   r#   r#   r$   r    s   r  c                   @   s    e Zd Zedd Zdd ZdS )TestTTestPairwiseOLSc                 C   st   ddl m} dd lm  m  m} | }|  |j	dddg| _|d| j}|
 | _d| _ddd	g| _d S )
Nr   r   r&   r   z(np.log(Days+1) ~ C(Duration) + C(Weight)	C(Weight)C(Weight)[T.2]C(Weight)[T.3]C(Weight)[T.3] - C(Weight)[T.2]statsmodels.formula.apir   r   r   r   r   r   r%   r   r   rs   r=   r
  r  r    r   r   r   rw   r#   r#   r$   r%     s    
z TestTTestPairwiseOLS.setup_classc                 C   s   | j j| jdd d}| j j| jddd}t|jjd d d df j|jjd d d df jdd t|jjd d d	f jd
gd  t|jjd d d	f jdd
dg t|jj	jt
jdddgtd d S )NZhommelzA B C)r{   Zfactor_labelsr   )r{   r(      rK   r*   r   Tr   FzB-AzC-AzC-B)Zdtype)r=   r	  r
  splitr
   r  r   r;   r   r   r   r   object)r<   Zpw1Zpw2r#   r#   r$   
test_alpha  s&     
zTestTTestPairwiseOLS.test_alphaN)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 )TestTTestPairwiseOLS2c                 C   st   ddl m} dd lm  m  m} | }|  |j	dddg| _|d| j}|
 | _d| _ddd	g| _d S )
Nr   r  r&   r   z(np.log(Days+1) ~ C(Weight) + C(Duration)r  r  r  r  r  r  r#   r#   r$   r%     s    
z!TestTTestPairwiseOLS2.setup_classNr   r   r   r   r%   r#   r#   r#   r$   r    s   r  c                   @   s   e Zd Zedd ZdS )TestTTestPairwiseOLS3c                 C   st   ddl m} dd lm  m  m} | }|  |j	dddg| _|d| j}|
 | _d| _ddd	g| _d S )
Nr   r  r&   r   z,np.log(Days+1) ~ C(Weight) + C(Duration) - 1r  zC(Weight)[2] - C(Weight)[1]zC(Weight)[3] - C(Weight)[1]zC(Weight)[3] - C(Weight)[2]r  r  r#   r#   r$   r%     s    
z!TestTTestPairwiseOLS3.setup_classNr  r#   r#   r#   r$   r    s   r  c                   @   s   e Zd Zedd ZdS )TestTTestPairwiseOLS4c                 C   st   ddl m} dd lm  m  m} | }|  |j	dddg| _|d| j}|
 | _d| _ddd	g| _d S )
Nr   r  r&   r   z6np.log(Days+1) ~ C(Weight, Treatment(2)) + C(Duration)zC(Weight, Treatment(2))z-C(Weight, Treatment(2))[T.1]z;C(Weight, Treatment(2))[T.3] - C(Weight, Treatment(2))[T.1]zC(Weight, Treatment(2))[T.3]r  r  r#   r#   r$   r%     s    
z!TestTTestPairwiseOLS4.setup_classNr  r#   r#   r#   r$   r    s   r  c                   @   s   e Zd Zedd ZdS )TestTTestPairwisePoissonc                 C   sz   ddl m} dd lm  m  m} | }|  |j	dddg| _|
d| j}|jdd| _d| _d	d
dg| _d S )Nr   r   r&   r   zDays ~ C(Duration) + C(Weight)ry   r}   r  r  r  r  )r   r   r   r   r   r   r   r%   r   r   r   rs   r=   r
  r  )r    r   r   r   rw   r#   r#   r$   r%     s    z$TestTTestPairwisePoisson.setup_classNr  r#   r#   r#   r$   r    s   r  )>__doc__Zstatsmodels.compat.pytestr   Zstatsmodels.compat.pandasr   r   Zstatsmodels.compat.platformr   r   r   Zstatsmodels.compat.scipyr   Znumpyr   Znumpy.testingr	   r
   r   r   Zpandasr   rT   Zstatsmodels.apiapir   r  r   r   Zstatsmodels.tools._testingZtoolsZ_testingr.   Zstatsmodels.tools.sm_exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r#   r#   r#   r$   <module>   sT     



$
"