ó
áp7]c           @   s*  d  Z  d d l Z d d l m Z m Z d d l Z d d l m	 Z	 m
 Z
 d d l m Z d d l m Z d d l m Z d d l m Z d	 e e	 f d
 „  ƒ  YZ d e e
 f d „  ƒ  YZ d e e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   s>   
Created on Wed May 23 12:53:27 2018

Author: Josef Perktold

iÿÿÿÿN(   t   assert_allcloset   assert_equal(   t   Poissont   Logit(   t   GLM(   t   family(   t   PenalizedMixin(   t   VariableScreeningt   PoissonPenalizedc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyR      s   t   LogitPenalizedc           B   s   e  Z RS(    (   R	   R
   (    (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyR      s   t   GLMPenalizedc           B   s   e  Z RS(    (   R	   R
   (    (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyR      s   c    	      C   s+  t  j j d ƒ d \ }  } d } t  j j |  | ƒ d t  j j |  d ƒ d d d } | d	 9} | | j d
 ƒ | j d
 ƒ } d | d  d  … d
 f <t  j | ƒ } d
 d d d d g } d t  j d | d ƒ | | <t  j | ƒ } | j	 | ƒ } t  j
 | ƒ } t  j j | ƒ } | | | | f S(   NiÙ id   iô  i   g      ð?i   g      à?i   g333333ó?i    i,  i  i›  (   id   iô  (   t   npt   randomt   seedt   randt   meant   stdt   zerost   aranget   sqrtt   dott   expt   poisson(	   t   nobst   k_varst	   k_nonzerot   xt   betat   idx_nonzero_truet   linpredt   mut   y(    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   _get_poisson_data    s     &
 c          C   sï  t  j j d ƒ t ƒ  \ }  } } } t |  ƒ } g  | D] } d | ^ q8 } d | d <t j | | d | d d g ƒ} t j | d  d  … | f d | ƒ} t |  | ƒ j ƒ  }	 |	 j	 | d <t
 |  t  j | ƒ d	 | d
 ƒ}
 t |
 ƒ } | d  d  … d d  … f } | j | d d ƒ} t t  j | j ƒ | ƒ g  | j D] } d | ^ qC} d | d <| j j d | ƒ | j j ƒ  t | j j d t ƒ t j | j j	 d | d d ƒ} | j | d d ƒ} t | d | d d d ƒd  S(   NiÙ s   var%4dt   consti    t   indext   columnst   truet   oraclet
   pen_weighti   i   t   maxiteri
   t   xnamet	   convergedt   namet   finalt   howt   outert   atolgñhãˆµøÔ>(   R   R   R   R"   t   lent   pdt	   DataFrameR   t   fitt   paramsR   t   onesR   t   screen_exogR   t   sortt   idx_nonzerot   results_finalt   summaryt   results_pent   mle_retvalst   Truet   Seriest   joinR    (   R!   R   R   R   R   t   iit   xnames_truet
   parameterst   xframe_truet
   res_oraclet   mod_initialt   screenert   exog_candidatest
   res_screent   xnamest   ps(    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   test_poisson_screening5   s.    
%" 
!c             sf  t  j j d ƒ d \ ‰ ‰ t  j j ˆ ˆ d ƒ d t  j j ˆ d ƒ d d d }  |  d 9}  |  |  j d	 ƒ |  j d	 ƒ }  t  j t  j ˆ ƒ |  f ƒ }  d t  j d ˆ d ƒ } t  j	 | ƒ } |  j
 | ƒ } t  j | ƒ } t  j j | ƒ } |  d  d  … d d  … f j d ƒ d  d  … d  f ‰  |  ‰ ‡  ‡ ‡ ‡ f d
 †  } t  j ˆ ƒ } d	 | ˆ d *t  j t  j ˆ ƒ | f ƒ } xØ d d g D]Ê } t | | d  d  … d  | … f d ˆ d ƒ}	 t |	 ƒ }
 d |
 _ |
 j | ƒ  ƒ } d d d d g } t | j | ƒ t  j d	 d g d d g d d g d d g g d t  j ƒ} t | j | ƒ q”Wd  S(   NiÙ id   i   i   g      ð?g      à?i   g333333ó?i    c          3   sÓ   d }  d } xÀ t  | ƒ D]² } d ˆ  t j j ˆ |  ƒ d t j j ˆ d ƒ d d d } | d 9} | ˆ d k  r¦ ˆ d  d  … | d f | d  d  … d	 f <n  | | j d
 ƒ | j d
 ƒ } | Vq Wd  S(   Nid   i   gš™™™™™©?g      ð?i   g      à?i   g333333ó?i
   i    (   t   rangeR   R   R   R   R   (   R   t	   n_batchest   iR   (   t   commonR   R   t	   x_nonzero(    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   exog_iteratorp   s    &
- R(   iô  i   t   var0_10t   var1_10t   var2_10t   var3_10i
   i   t   dtype(   id   i   (   R   R   R   R   R   R   t   column_stackR6   R   R   R   R   R   t   sumt   NoneR   R   t	   k_max_addt   screen_exog_iteratorR   t   exog_final_namest   arrayt   int64t   idx_nonzero_batches(   R   R   R   R    R!   RR   t   dummyt	   exog_keept   kRF   RG   R-   t   namest   idx_full(    (   RP   R   R   RQ   sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   test_screen_iterated[   s<    &
 5/			c          C   sí  t  ƒ  \ }  } } } t |  ƒ } g  | D] } d | ^ q( } d | d <t j | | d | d d g ƒ} t j | d  d  … | f d | ƒ} t |  | d t j ƒ  ƒj ƒ  }	 |	 j | d <t |  t	 j
 | ƒ d t j ƒ  ƒ}
 t |
 ƒ } | d  d  … d	 d  … f } | j | d
 d ƒ} t t	 j | j ƒ | ƒ g  | j D] } d | ^ qA} d | d <| j j d | ƒ | j j ƒ  t | j j d t ƒ t j | j j d | d d ƒ} | j | d d ƒ} t | d | d d d ƒd  S(   Ns   var%4dR#   i    R$   R%   R&   R   R'   i   R)   i
   R*   R+   R,   R-   R.   R/   R0   gñhãˆµøÔ>(   R"   R1   R2   R3   R   R   R   R4   R5   R   R6   R   R7   R   R8   R9   R:   R;   R<   R=   R>   R?   R@   R    (   R!   R   R   R   R   RA   RB   RC   RD   RE   RF   RG   RH   RI   RJ   RK   (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   test_glmpoisson_screening   s*    
"%!$ 
!c    	      C   sM  t  j j d ƒ d \ }  } d } t  j j |  | ƒ d t  j j |  d ƒ d d d } | d	 9} | | j d
 ƒ | j d
 ƒ } d | d  d  … d
 f <t  j | ƒ } d
 d d d d g } d t  j d | d ƒ d | | <t  j | ƒ } | j	 | ƒ } d d t  j
 | ƒ } t  j j t | ƒ ƒ | k  j t ƒ } | | | | f S(   NiÙ i,  iô  i   g{®Gáz„?i   g      à?i   g333333ó?i    id   i  i›  g      ð?(   i,  iô  (   R   R   R   R   R   R   R   R   R   R   R   R1   t   astypet   int(	   R   R   R   R   R   R   R   R    R!   (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   _get_logit_data³   s     &
 "'c          C   sU  t  ƒ  \ }  } } } t |  ƒ } t d | d d d ƒ } g  | D] } d | ^ qA } d | d <t j | | d | d	 d
 g ƒ} t j | d  d  … | f d	 | ƒ}	 t |  |	 ƒ j ƒ  }
 |
 j | d <t |  t	 j
 | ƒ d | d ƒ} t | |  } d | _ | d  d  … d d  … f } | j | d d ƒ} t	 j | j j ƒ d k } t t	 j | j | ƒ | ƒ t	 j d d d d d d d g ƒ } t t	 j | j ƒ | ƒ g  | j D] } d | ^ q´} d | d <| j j d | ƒ | j j ƒ  t | j j d t ƒ t j | j j d | d d ƒ} | | d <t | d | d d d ƒd  S(   NR(   gffffffæ?t   threshold_trimgü©ñÒMbP?s   var%4dR#   i    R$   R%   R&   R'   g      à?i   i   R)   gš™™™™™¹?iJ   id   i£   i,  i  i›  R*   R+   R,   R-   R0   g{®Gázt?(   Rj   R1   t   dictR2   R3   R   R4   R5   R   R   R6   R   R[   R7   t   absR:   R   R8   R9   R^   R;   R<   R=   R>   R?   R    (   R!   R   R   R   R   t   screener_kwdsRA   RB   RC   RD   RE   RF   RG   RH   RI   t   maskt   idx_rRJ   RK   (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   test_logit_screeningÈ   s6    
%"	$ 
!
c          C   s  t  ƒ  \ }  } } } t |  ƒ } t d | d d d d d ƒ } g  | D] } d | ^ qG } d | d	 <t j | | d
 | d d g ƒ} t j | d  d  … | f d | ƒ}	 t |  |	 d t j ƒ  ƒj ƒ  }
 |
 j	 | d <t |  t
 j | ƒ d t j ƒ  ƒ} t | |  } d | _ | d  d  … d d  … f } | j | d d ƒ} | j | j g  | j D] } d | ^ qa} d | d	 <| j j d | ƒ | j j ƒ  t | j j d t ƒ t j | j j	 d
 | d d ƒ} | | d <t | d | d d d ƒd  S(   NR(   g      è?Rk   gü©ñÒMbP?t   ranking_attrs   model.score_factors   var%4dR#   i    R$   R%   R&   R   R'   i
   i   R)   i   R*   R+   R,   R-   R0   g{®Gázt?(   Rj   R1   Rl   R2   R3   R   R   t   BinomialR4   R5   R   R6   R   R[   R7   R9   R:   R;   R<   R   R=   R>   R?   R    (   R!   R   R   R   R   Rn   RA   RB   RC   RD   RE   RF   RG   RH   RI   RJ   RK   (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   test_glmlogit_screeningõ   s4    	
%!$	 
!
c          C   s*  t  j j d ƒ d \ }  } d } t  j j |  | ƒ d t  j j |  d ƒ d d d } | d	 9} | | j d
 ƒ | j d
 ƒ } d | d  d  … d
 f <t  j | ƒ } d
 d d d d g } d t  j d | d ƒ | | <t  j | ƒ } | j	 | ƒ } | d t  j j
 t | ƒ ƒ } | | | | f S(   NiÙ id   iô  i   g{®Gáz„?i   g      à?i   g333333ó?i    i,  i  i›  g      ð?gš™™™™™¹?(   id   iô  (   R   R   R   R   R   R   R   R   R   R   t   randnR1   (   R   R   R   R   R   R   R   R!   (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   _get_gaussian_data#  s    &
  c          C   sM  t  ƒ  \ }  } } } t |  ƒ } |  |  j d ƒ }  t d | d d d d d ƒ } g  | D] } d | ^ qZ } d	 | d <t j | | d
 | d d g ƒ} t j | d  d  … | f d | ƒ}	 t |  |	 d t j ƒ  ƒj	 ƒ  }
 |
 j
 | d <xWd d g D]I} t |  | d  d  … d  | … f d t j ƒ  ƒ} t | |  } | d  d  … | d  … f } | j | d d ƒ} t t j | j ƒ | ƒ g  | j D] } d | ^ q–} d	 | d <| j j d | ƒ | j j ƒ  t | j j d t ƒ t j | j j
 d
 | d d ƒ} | j | d d ƒ} t | d | d d d ƒ| d =qü Wd  S(   Ni    R(   g      è?Rk   gü©ñÒMbP?Rr   s   model.score_factors   var%4dR#   R$   R%   R&   R   R'   i   i   R)   i   R*   R+   R,   R-   R.   R/   R0   gñhãˆµøä>(   Rv   R1   R   Rl   R2   R3   R   R   t   GaussianR4   R5   R   R7   R   R   R8   R9   R:   R;   R<   R=   R>   R?   R@   R    (   R!   R   R   R   R   Rn   RA   RB   RC   RD   RE   t   k_keepRF   RG   RH   RI   RJ   RK   (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   test_glmgaussian_screening8  s6    	
%!1 
!(   t   __doc__t   numpyR   t   numpy.testingR    R   t   pandasR2   t#   statsmodels.discrete.discrete_modelR   R   t+   statsmodels.genmod.generalized_linear_modelR   t   statsmodels.genmod.familiesR   t   statsmodels.base._penalizedR   t   statsmodels.base._screeningR   R   R   R   R"   RL   Rf   Rg   Rj   Rq   Rt   Rv   Ry   (    (    (    sD   lib/python2.7/site-packages/statsmodels/base/tests/test_screening.pyt   <module>   s(   		&	5	#		-	.	