ó
áp7]c           @   s  d  d l  Z d  d l Z d  d l Z d  d l m Z d  d l j Z	 d  d l
 m Z m Z d  d l Z y d  d l j Z Wn e k
 r‹ n Xe Z e r· d  d l m Z e d ƒ Z n d Z d „  Z d „  Z d „  Z d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d S(   iÿÿÿÿN(   t   mice(   t   assert_equalt   assert_allclose(   t   PdfPagess   test_mice.pdfc         C   s   t  r |  j | ƒ n  d  S(   N(   t
   pdf_outputt   savefig(   t   pdft   fig(    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   close_or_save   s    c           C   s   t  r t j ƒ  n  d  S(   N(   R   R   t   close(    (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   teardown_module   s    c          C   sÔ  t  j j d ƒ d }  d } t  j j d |  | f ƒ } | d d … d f | d d … d f d | d d … d f | d d … d	 f <| d d … d	 f c t  j j d |  ƒ 7<d | d d … d f d	 k | d d … d f <| j d ƒ t  j j d |  ƒ } t j | ƒ } g  t d | d ƒ D] } d
 | ^ q)| _ | | d <t  j	 | j
 d	 d +t  j	 | j d	 d +t  j	 | j d d d … <t  j	 | j d d d … <t  j	 | j d d +t  j	 | j d d d … <| S(   s0   
    Create a data set with missing values.
    iÃ…  iÈ   i   t   sizeNi   i   i   i    s   x%dt   yi<   i(   i
   i   i   i2   i   i-   id   (   t   npt   randomt   seedt   normalt   sumt   pdt	   DataFramet   ranget   columnst   nant   x1t   x2t   x3t   x4t   x5R   (   t   nt   pt   exogt   endogt   dft   k(    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   gendat"   s$    R+0"-
t   TestMICEDatac           B   s’   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e j	 j
 d „  ƒ Z e j	 j
 d „  ƒ Z e j	 j
 d „  ƒ Z e j	 j
 d	 „  ƒ Z RS(
   c         C   sÈ  t  ƒ  } | j ƒ  } t j | ƒ } t j | ƒ } | j \ } } t | j d t	 j
 d ƒ ƒ t | j d t	 j
 d d ƒ ƒ t | j d t	 j
 d ƒ ƒ t | j d t	 j
 d d d	 ƒ ƒ t | j d t	 j t	 j
 d ƒ t	 j
 d
 d d	 ƒ t	 j
 d d ƒ f ƒ ƒ t g  | j D] } t | j | ƒ ^ qg  | D] } t | | j ƒ  ƒ ^ q9ƒ x· t d ƒ D]© } | j ƒ  t | j j d | ƒ t | j j d | ƒ t | | | j | ƒ t g  | j D] } t | j | ƒ ^ qÌg  | D] } t | | j ƒ  ƒ ^ qïƒ qiWd }	 t | j d |	 ƒ t | j d d d d d d g ƒ | | j k	 sgt ‚ | j d ƒ \ }
 } } } } t t |
 ƒ d ƒ t | j d d g ƒ t | j d d g ƒ d  S(   NR   i<   iÈ   R   i(   R   i
   i   i   i   i   i    i   s   x1 ~ x2 + x3 + x4 + x5 + yR   R   R   i¾   i   (   R"   t   copyR   t   notnullR    t   MICEDatat   shapeR   t   ix_missR   t   aranget   ix_obst   concatenateR   t   datat   sett   dropnaR   t
   update_allt   conditional_formulat   _cycle_ordert   AssertionErrort   get_split_datat   len(   t   selfR    t   origt   mxt   imp_datat   nrowt   ncolt   colR!   t   fmlt	   endog_obst   exog_obst	   exog_misst   predict_obs_kwdst   predict_miss_kwds(    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_defaultD   s<    	 #)*
)."c         C   sÖ   t  ƒ  } t j t | ƒ ƒ | d <| j j d ƒ | d <t j | ƒ } t j	 d d ƒ w t
 j d t ƒ ^ } t
 j d ƒ | j ƒ  t | ƒ d k sÆ t g  | D] } | j t k ^ q¢ ƒ sÆ t ‚ Wd QXWd QXd S(	   s   Test that MICEData does not throw a SettingWithCopyWarning when imputing (https://github.com/statsmodels/statsmodels/issues/5430)t   intcolt   int32s   mode.chained_assignmentt   warnt   recordt   alwaysi    N(   R"   R   R)   R4   RC   t   astypeR    R&   R   t   option_contextt   warningst   catch_warningst   Truet   simplefilterR/   t   allt   categoryt   DeprecationWarningR2   (   R5   R    t   miceDatat   wst   w(    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_settingwithcopywarningn   s    	
c         C   s—   t  ƒ  } t j | ƒ } g  } xX t d ƒ D]J } | j ƒ  } t | t j ƒ sU t ‚ t	 | j
 | j
 ƒ | j | ƒ q+ W| d | d k s“ t ‚ d  S(   Ni   i    i   (   R"   R    R&   R   t   next_samplet
   isinstanceR   R   R2   R   R'   t   append(   R5   R    R8   t   all_xt   jt   x(    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_next_sampleƒ   s    	c   	      C   sæ   t  ƒ  } | j ƒ  } t j | ƒ } | j \ } } xŠ d D]‚ } t j | d | ƒ} xd t d ƒ D]V } | j ƒ  t	 | j
 j d | ƒ t	 | j
 j d | ƒ t | | | j
 | ƒ qb Wq: Wt	 | j d d d	 d
 d d g ƒ d  S(   Nt   gaussiant   boott   perturbation_methodi   i    i   R   R   R   R   R   R   (   R\   R]   (   R"   R$   R   R%   R'   R    R&   R   R/   R   R,   R   R1   (	   R5   R    R6   R7   R9   R:   t	   pert_methR8   R!   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_pertmeth“   s    	
 c            s+  t  j j d ƒ d } t  j j d | ƒ } t  j j d | ƒ } t  j j d | ƒ t  j | ƒ } t  j j d | ƒ } t  j | | k  | | ƒ } t  j | | k d d ƒ } t j i | d 6| d 6| d 6| d	 6ƒ } t  j	 | j
 d
 d … d f <t  j	 | j
 d
 d … d f <t  j	 | j
 d d … d f <t  j	 | j
 d d … d	 f <d d l m }	 g  ‰  ‡  f d †  }
 xŒ d D]„ } t j | d | d |
 ƒ} | j d d d |	 d i t j d ƒ d 6d i d d 6d | ƒ| j ƒ  } t | t j ƒ stt ‚ qtWt g  ˆ  D] } | d k ^ qƒ s't ‚ d  S(    Ni&"  i,  R   i   i    t   timet   statusR   R   i
   i(   i   i2   i<   iÿÿÿÿ(   t   PHRegc            s   ˆ  j  |  j j ƒ d  S(   N(   RW   R,   R'   (   t   imp(   t   hist(    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   cb½   s    R\   R]   R^   t   history_callbacks   0 + x1 + x2t   model_classt	   init_kwdst   predict_kwdst   hrt	   pred_typei+  i   (   R\   R]   (   i+  i   (   R   R   R   R   t   exponentialt   expt   whereR   R   R   t   loct&   statsmodels.duration.hazard_regressionRc   R    R&   t   set_imputert   PatsyFormulaRU   RV   R2   RN   (   R5   R   R   R   t
   event_timet   obs_timeRa   Rb   R    Rc   Rf   t   pmt   idataRZ   t   val(    (   Re   sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt
   test_phreg¨   s2    "+c         C   s)  d d l  m } d d l m } t ƒ  } | j ƒ  } t j | ƒ } | j \ } } t	 j
 | ƒ } | j d d ƒ | j d d ƒ | j d d	 t j d
 i t j j ƒ  d 6ƒ| j ƒ  t | j j d | ƒ t | j j d | ƒ t | | | j | ƒ xÎ t d d ƒ D]½ }	 |	 d k r†t t | j d t j ƒ t ƒ t t | j d j t j j ƒ t ƒ t t | j d | ƒ t ƒ qt t | j d |	 t j ƒ t ƒ t t | j d |	 | ƒ t ƒ qWd }
 t | j d |
 ƒ d }
 t | j d |
 ƒ t | j d d d d d d g ƒ d  S(   Niÿÿÿÿ(   t   RegressionResultsWrapper(   t   GLMResultsWrapperR   s   x3 + x4 + x3*x4R   s   x4 + I(x5**2)R   Rh   Ri   t   familyi    i   i   i   s   x%ds   x1 ~ x3 + x4 + x3*x4s   x4 ~ x1 + x2 + x3 + x5 + yR   R   R   (   t#   statsmodels.regression.linear_modelRz   t+   statsmodels.genmod.generalized_linear_modelR{   R"   R$   R   R%   R'   R    R&   Rr   t   smt   GLMt   familiest   BinomialR/   R   R,   R   R   RV   t   modelsRL   R|   t   resultst   OLSR0   R1   (   R5   Rz   R{   R    R6   R7   R9   R:   R8   RY   R<   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_set_imputerÌ   s6    	
 & $%c      
   C   s—   t  ƒ  } t j | ƒ } xx d D]p } xg t t f D]Y } xP t t f D]B } t j ƒ  | j d | d | d | ƒ } t t	 | ƒ | ƒ  qE Wq2 Wq Wd  S(   Nt   patternt   rawt	   row_ordert   hide_complete_rowst   color_row_patterns(   R‡   Rˆ   (
   R"   R    R&   t   FalseRL   t   pltt   clft   plot_missing_patternR   R   (   R5   t   close_figuresR    R8   R‰   RŠ   R‹   R   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_plot_missing_patternó   s    	
	c         C   sŠ   t  ƒ  } t j | ƒ } | j ƒ  t j ƒ  xW t t f D]I } | j d d d | ƒ} | j	 ƒ  d j
 d ƒ t t | ƒ | ƒ  q9 Wd  S(   NR   R   t   plot_pointsi    t   plot_bivariate(   R"   R    R&   R/   R   RŽ   RŒ   RL   R“   t   get_axest	   set_titleR   R   (   R5   R   R    R8   R’   R   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_plot_bivariate  s    	

c         C   s‡   t  ƒ  } t j | ƒ } | j ƒ  t j ƒ  xT t t f D]F } | j d d | ƒ} | j	 ƒ  d j
 d ƒ t t | ƒ | ƒ  q9 Wd  S(   NR   R’   i    t   plot_fit_scatterplot(   R"   R    R&   R/   R   RŽ   RŒ   RL   t   plot_fit_obsR”   R•   R   R   (   R5   R   R    R8   R’   R   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_fit_obs  s    	

c         C   s   t  ƒ  } t j | ƒ } | j ƒ  t j ƒ  xN t t f D]@ } | j d ƒ } | j	 ƒ  d j
 d ƒ t t | ƒ | ƒ  q9 Wd  S(   NR   i    t   plot_imputed_hist(   R"   R    R&   R/   R   RŽ   RŒ   RL   Rš   R”   R•   R   R   (   R5   R   R    R8   R’   R   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_plot_imputed_hist"  s    	

(   t   __name__t
   __module__RB   RT   R[   R`   Ry   R†   t   pytestt   markt
   matplotlibR‘   R–   R™   R›   (    (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyR#   B   s   	*				$	't   TestMICEc           B   sA   e  Z d  „  Z d „  Z d „  Z d „  Z e j j d „  ƒ Z	 RS(   c         C   sm   t  ƒ  } t j | ƒ } t j d t j | ƒ } | j d d ƒ } t | j t j	 ƒ s] t
 ‚ | j ƒ  } d  S(   Ns   y ~ x1 + x2 + x1:x2i   i   (   R"   R    R&   t   MICER   R…   t   fitt
   issubclasst	   __class__t   MICEResultsR2   t   summary(   R5   R    R8   t   mit   resultt   smr(    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt	   test_MICE3  s    	c         C   s   t  ƒ  } t j | ƒ } t j d t j | ƒ } d d l m } x8 t d ƒ D]* } | j	 ƒ  } t
 | j | ƒ sM t ‚ qM Wd  S(   Ns   y ~ x1 + x2 + x1:x2iÿÿÿÿ(   Rz   i   (   R"   R    R&   R¢   R   R…   R}   Rz   R   RU   R¤   R¥   R2   (   R5   R    R8   R¨   Rz   RY   RZ   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt
   test_MICE1@  s    	c         C   sP   t  ƒ  } t j | d d ƒ} | j d d d i d d 6d d	 6ƒ| j ƒ  d  S(
   NR^   R]   R   s   x2 + yt   fit_kwdsi   t   alphai    t   L1_wt(   R"   R    R&   Rr   R/   (   R5   R    Rd   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_MICE1_regularizedM  s    	$c         C   s°   d d l  m } t ƒ  } t j | ƒ } t j d t j | d i t j j	 ƒ  d 6ƒ} xS t
 d ƒ D]E } | j ƒ  } t | | ƒ sŠ t ‚ t | j t j j	 ƒ sc t ‚ qc Wd  S(   Niÿÿÿÿ(   R{   s   x3 ~ x1 + x2Ri   R|   i   (   R~   R{   R"   R    R&   R¢   R   R€   R   R‚   R   RU   RV   R2   R|   (   R5   R{   R    R8   R¨   RY   RZ   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt
   test_MICE2U  s    	c         C   se  t  j j d ƒ t  j j d d ƒ } t  j j d d ƒ } | | t  j j d d ƒ } t  j | d d +t  j | d )t j i | d 6| d 6| d	 6ƒ } t j | ƒ } t j	 d
 t
 j | d d ƒ} | j d d ƒ } t  j d d d g ƒ } t | j | d d ƒt  j d d d g ƒ }	 t | j |	 d d ƒt  j d d d g ƒ }
 t | j |
 d d ƒd  S(   Ni9  R   i,  i    id   iú   R   R   R   s   y ~ x1 + x2t   n_skipi   i
   gÍl¡užÂÆ?g7¨»º|N¼?gçùZöÒ?t   atolgñhãˆµøä>gmCœ¹MÙ¡¿g×Ê$¸Ëî?g Â,Yºçï?gk‹(õ~á¿g)K¥†Ó.@gß½'ÿ(:+@(   R   R   R   R   R   R   R   R    R&   R¢   R   R…   R£   t   asarrayR   t   frac_miss_infot   paramst   tvalues(   R5   R   R   R   R    Rw   R¨   R©   t   fmiR¶   R·   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_combinec  s     $(
   Rœ   R   R«   R¬   R°   R±   Rž   RŸ   t   slowR¹   (    (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyR¡   1  s
   				c          C   sG  t  j j d ƒ t j t  j j d d ƒ ƒ }  d d d d g |  _ t  j |  j d <t  j |  j d d	 g d
 f <t	 j
 |  ƒ } | j ƒ  t | j j ƒ  j j ƒ  d ƒ i t  j g  d t  j ƒd 6t  j d g d t  j ƒd 6t  j d d	 g d t  j ƒd 6t  j g  d t  j ƒd 6} x& | D] } t | j | | | ƒ q!Wd  S(   Ni    i2   i   t   var1t   var2t   var3t   var4i   i   i   t   dtype(   i   i   (   R   R   R   R   R   t   randR   R   t   ilocR    R&   R/   R   R,   t   isnullt   valuesR   t   arrayt   int64R(   (   R,   t   data_impR(   R!   (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   test_micedata_miss1{  s    
(   t   numpyR   t   pandasR   Rž   t   statsmodels.imputationR    t   statsmodels.apit   apiR   t   numpy.testingR   R   RJ   t   matplotlib.pyplott   pyplotR   t   ImportErrorRŒ   R   t   matplotlib.backends.backend_pdfR   R   t   NoneR   R
   R"   t   objectR#   R¡   RÇ   (    (    (    sE   lib/python2.7/site-packages/statsmodels/imputation/tests/test_mice.pyt   <module>   s*   			 ïJ