ó
áp7]c           @   s#  d  Z  d d l Z d d l j j Z d d l j j Z	 d d l
 j j Z d d l m Z m Z d d l Z d d l Z d d l Z d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e j f d „  ƒ  YZ d e f d „  ƒ  YZ d e	 j f d „  ƒ  YZ e j e e ƒ d S(   sA   
Conditional logistic, Poisson, and multinomial logit regression
iÿÿÿÿN(   t   MultinomialResultst   MultinomialResultsWrappert   _ConditionalModelc        
   B   sk   e  Z d  d „ Z d „  Z d
 d d e e d d
 e e d „	 Z d d d
 e d „ Z e	 d
 d
 d	 „ ƒ Z
 RS(   t   nonec         K   sä  d | k r t  d ƒ ‚ n  | d } | j | j k rL d } t  | ƒ ‚ n  | j d | j k rw d } t  | ƒ ‚ n  t t |  ƒ j | | d | | |  j j d  k	 rÄ d d } t  | ƒ ‚ n  |  j	 } | j d	 |  _
 t j ƒ  } xD t | ƒ D]6 \ } }	 |	 | k rg  | |	 <n  | |	 j | ƒ qö Wt j | ƒ t j | ƒ } } | j d
 ƒ }
 g  |  _ g  |  _ g  |  _ |
 d  k	 r t j |
 ƒ }
 g  |  _ n  g  |  _ g  |  _ d |  _ d d g } xÿ | j ƒ  D]ñ \ }	 } | | j } t j | ƒ d k r.| d c d	 7<| d	 c t | ƒ 7<qÔn  |  j t | ƒ 7_ |  j j | ƒ |
 d  k	 rv|  j j |
 | ƒ n  |  j j t | ƒ ƒ |  j j | | d  d  … f ƒ |  j j t j | ƒ ƒ qÔW| d d k rýd d t | ƒ } t j  | ƒ n  |
 d  k	 rXg  |  _! xC t |  j ƒ D]/ \ } } |  j! j t j" |  j | | ƒ ƒ q"Wn  t |  j ƒ |  _# g  |  _$ g  |  _% xa t& |  j# ƒ D]P }	 |  j$ j t j" |  j |	 |  j |	 ƒ ƒ |  j% j t j |  j |	 ƒ ƒ qŒWd  S(   Nt   groupss   'groups' is a required arguments4   'endog' and 'groups' should have the same dimensionsi    sB   The leading dimension of 'exog' should equal the length of 'endog't   missings7   Conditional models should not have an intercept in the s   design matrixi   t   offsets1   Dropped %d groups and %d observations for having s   no within-group variance('   t
   ValueErrort   sizet   shapet   superR   t   __init__t   datat	   const_idxt   Nonet   exogt   k_paramst   collectionst   OrderedDictt	   enumeratet   appendt   npt   asarrayt   gett
   _endog_grpt	   _exog_grpt
   _groupsizet   _offset_grpt   _offsett   _sumyt   nobst   itemst   flatt   stdt   lent   sumt   tuplet   warningst   warnt   _endofst   dott	   _n_groupst   _xyt   _n1t   range(   t   selft   endogR   R   t   kwargsR   t   msgt   row_ixt   it   gR   t   dropst   ixt   yt   kt   ofs(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR      sz    
							 	*		*c         C   s5   d d l  m } | | |  j ƒ } t j | ƒ } | S(   Niÿÿÿÿ(   t   approx_fprime(   t   statsmodels.tools.numdiffR9   t   scoreR   t
   atleast_2d(   R-   t   paramsR9   t   hess(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyt   hessianb   s    t   BFGSid   c
         K   sÄ   t  t |  ƒ j d | d | d | d | d | d |	 ƒ } t |  | j | j ƒ  d ƒ } | | _ |  j | _ |  j | _	 d t
 |  j ƒ d t |  j ƒ d	 t j |  j ƒ g | _ t | ƒ } | S(
   Nt   start_paramst   methodt   maxitert   full_outputt   dispt   skip_hessiani   s   %ds   %.1f(   R
   R   t   fitt   ConditionalResultsR=   t
   cov_paramsRB   R   R)   t   n_groupst   minR   t   maxR   t   meant   _group_statst   ConditionalResultsWrapper(   R-   RA   RB   RC   RD   RE   t   fargst   callbackt   retallRF   R/   t   rsltt   crslt(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRG   i   s     		t   elastic_netg        c         K   s   d d l  m } | d k r+ t d ƒ ‚ n  i d d 6d d 6d	 d
 6d	 d 6} | j | ƒ | |  d | d | d | d | | S(   sL  
        Return a regularized fit to a linear regression model.

        Parameters
        ----------
        method :
            Only the `elastic_net` approach is currently implemented.
        alpha : scalar or array-like
            The penalty weight.  If a scalar, the same penalty weight
            applies to all variables in the model.  If a vector, it
            must have the same length as `params`, and contains a
            penalty weight for each coefficient.
        start_params : array-like
            Starting values for `params`.
        refit : bool
            If True, the model is refit using only the variables that
            have non-zero coefficients in the regularized fit.  The
            refitted model is not regularized.

        Returns
        -------
        An array of parameter estimates.
        iÿÿÿÿ(   t   fit_elasticnetRU   s-   method for fit_regularied must be elastic_neti2   RC   i   t   L1_wtg»½×Ùß|Û=t	   cnvrg_tolt   zero_tolRB   t   alphaRA   t   refit(   t   statsmodels.base.elastic_netRV   R   t   update(   R-   RB   RZ   RA   R[   R/   RV   t   defaults(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyt   fit_regularized‰   s    
c   	      O   s§   y | d } | d =Wn t  k
 r4 t d ƒ ‚ n Xt | t ƒ rQ | | } n  d | j d d ƒ k ry t j d ƒ n  t t |  ƒ j	 | d | d | | | Ž} | S(   NR   s   'groups' is a required arguments   0+t    t    s2   Conditional models should not include an interceptR   (
   t   KeyErrorR   t
   isinstancet   strt   replaceR%   R&   R
   R   t   from_formula(	   t   clst   formulaR   t   subsett	   drop_colst   argsR/   R   t   model(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRf   ·   s    	
N(    (   t   __name__t
   __module__R   R?   R   t   Truet   FalseRG   R_   t   classmethodRf   (    (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR      s$   P	*t   ConditionalLogitc           B   sV   e  Z d  Z d d „ Z d „  Z d „  Z d	 d „ Z d	 d „ Z d „  Z	 d „  Z
 RS(
   s°  
    Fit a conditional logistic regression model to grouped data.

    Every group is implicitly given an intercept, but the model is fit using
    a conditional likelihood in which the intercepts are not present.  Thus,
    intercept estimates are not given, but the other parameter estimates can
    be interpreted as being adjusted for any group-level confounders.

    Parameters
    ----------
    endog : array-like
        The response variable, must contain only 0 and 1.
    exog : array-like
        The array of covariates.  Do not include an intercept
        in this array.
    groups : array-like
        Codes defining the groups. This is a required keyword parameter.
    R   c         K   sv   t  t |  ƒ j | | d | | t j t j |  j ƒ t j d k ƒ r_ d } t | ƒ ‚ n  |  j	 j
 d |  _ d  S(   NR   i    i   s   endog must be coded as 0, 1(   i    i   (   R
   Rr   R   R   t   anyt   uniqueR.   t   r_R   R   R	   t   K(   R-   R.   R   R   R/   R0   (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR   æ   s    (c         C   s@   d } x3 t  t |  j ƒ ƒ D] } | |  j | | ƒ 7} q W| S(   Ni    (   R,   R"   R   t   loglike_grp(   R-   R=   t   llR3   (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyt   loglikeò   s    c         C   s:   d } x- t  |  j ƒ D] } | |  j | | ƒ 7} q W| S(   Ni    (   R,   R)   t	   score_grp(   R-   R=   R;   R3   (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR;   ú   s    c            sq   | d  k r d } n  t j t j |  j | | ƒ | ƒ ‰  i  ‰ ‡  ‡ ‡ f d †  ‰ ˆ |  j | |  j | ƒ S(   Ni    c            sŽ   |  | k  r d S| d k r  d Sy ˆ |  | f SWn t  k
 rE n Xˆ |  d | ƒ ˆ |  d | d ƒ ˆ  |  d } | ˆ |  | f <| S(   Ni    i   (   Rb   (   t   tR7   t   v(   t   exbt   ft   memo(    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR~     s    4(   R   R   t   expR(   R   R   R+   (   R-   t   grpR=   R8   (    (   R}   R~   R   sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyt   _denom  s    	&c            s}   | d  k r d } n  ˆ j | ‰  t j t j ˆ  | ƒ | ƒ ‰ i  ‰ ‡  ‡ ‡ ‡ ‡ f d †  ‰ ˆ ˆ j | ˆ j | ƒ S(   Ni    c   
         sÿ   |  | k  r" d t  j ˆ j ƒ f S| d k r2 d Sy ˆ |  | f SWn t k
 rW n Xˆ |  d } ˆ |  d | ƒ \ } } ˆ |  d | d ƒ \ } } | | ˆ  |  d d  d  … f } | | | | | | | } }	 | |	 f ˆ |  | f <| |	 f S(   Ni    i   (   i   i    (   R   t   zerosR   Rb   (
   R{   R7   t   ht   at   bt   ct   et   dt   uR|   (   t   exR}   R   t   sR-   (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRŒ   +  s    "!(   R   R   R   R€   R(   R   R+   (   R-   R   R=   R8   (    (   R‹   R}   R   RŒ   R-   sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyt   _denom_grad  s    	c         C   s„   d  } t |  d ƒ r% |  j | } n  t j |  j | | ƒ } | d  k	 r^ | |  j | 7} n  | t j |  j | | | ƒ ƒ 8} | S(   NR   (	   R   t   hasattrR   R   R(   R*   R'   t   logR‚   (   R-   R   R=   R8   t   llg(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRw   C  s    "c         C   sS   d } t  |  d ƒ r% |  j | } n  |  j | | | ƒ \ } } |  j | | | S(   Ni    R   (   RŽ   R   R   R*   (   R-   R   R=   R8   R‰   R„   (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRz   R  s
    N(   Rm   Rn   t   __doc__R   Ry   R;   R   R‚   R   Rw   Rz   (    (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRr   Ò   s   		$	t   ConditionalPoissonc           B   s    e  Z d  Z d „  Z d „  Z RS(   sU  
    Fit a conditional Poisson regression model to grouped data.

    Every group is implicitly given an intercept, but the model is fit using
    a conditional likelihood in which the intercepts are not present.  Thus,
    intercept estimates are not given, but the other parameter estimates can
    be interpreted as being adjusted for any group-level confounders.

    Parameters
    ----------
    endog : array-like
        The response variable
    exog : array-like
        The covariates
    groups : array-like
        Codes defining the groups. This is a required keyword parameter.
    c   	      C   sÝ   d  } t |  d ƒ r! |  j } n  d } x¯ t t |  j ƒ ƒ D]˜ } t j |  j | | ƒ } | d  k	 ry | | | 7} n  t j	 | ƒ } |  j | } | t j | | ƒ 7} | j
 ƒ  } | |  j | t j | ƒ 8} q= W| S(   NR   g        (   R   RŽ   R   R,   R"   R   R   R(   R   R€   R#   R   R   (	   R-   R=   R8   Rx   R2   t   xbR}   R6   RŒ   (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRy   o  s    "c   
      C   sê   d  } t |  d ƒ r! |  j } n  d } x¼ t t |  j ƒ ƒ D]¥ } |  j | } t j | | ƒ } | d  k	 r | | | 7} n  t j	 | ƒ } | j
 ƒ  } |  j | }	 | t j |	 | ƒ 7} | |  j | t j | | ƒ | 8} q= W| S(   NR   g        (   R   RŽ   R   R,   R"   R   R   R   R(   R€   R#   R   (
   R-   R=   R8   R;   R2   t   xR“   R}   RŒ   R6   (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR;   „  s    )(   Rm   Rn   R‘   Ry   R;   (    (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR’   \  s   	RH   c           B   s&   e  Z d  „  Z d d d d d „ Z RS(   c         C   s)   t  t |  ƒ j | | d | d | ƒd  S(   Nt   normalized_cov_paramst   scale(   R
   RH   R   (   R-   Rl   R=   R•   R–   (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR   œ  s
    gš™™™™™©?c   	      C   sú   d d d d |  j g f d d g } d d |  j g f d	 |  j d
 g f d |  j d g f d |  j d g f g } | d k rŠ d } n  d d l m } | ƒ  } | j |  d | d | d | d | d | ƒ| j |  d | d | d | d |  j ƒ| S(    s  
        Summarize the fitted model.

        Parameters
        ----------
        yname : string, optional
            Default is `y`
        xname : list of strings, optional
            Default is `var_##` for ## in p the number of regressors
        title : string, optional
            Title for the top table. If not None, then this replaces the
            default title
        alpha : float
            significance level for the confidence intervals

        Returns
        -------
        smry : Summary instance
            this holds the summary tables and text, which can be printed or
            converted to various output formats.

        See Also
        --------
        statsmodels.iolib.summary.Summary : class to hold summary
            results

        s   Dep. Variable:s   Model:s   Log-Likelihood:s   Method:s   Date:s   Time:s   No. Observations:s   No. groups:s   Min group size:i    s   Max group size:i   s   Mean group size:i   s*   Conditional Logit Model Regression Resultsiÿÿÿÿ(   t   Summaryt   gleftt   grightt   ynamet   xnamet   titleRZ   t   use_tN(   s   Dep. Variable:N(   s   Model:N(   s   Log-Likelihood:N(   s   Date:N(   s   Time:N(   s   No. Observations:N(	   R   RB   RJ   RN   t   statsmodels.iolib.summaryR—   t   add_table_2colst   add_table_paramsR   (	   R-   Rš   R›   Rœ   RZ   t   top_leftt	   top_rightR—   t   smry(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyt   summary¤  s2    			"N(   Rm   Rn   R   R   R¤   (    (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRH   ›  s   	t   ConditionalMNLogitc        
   B   sP   e  Z d  Z d d „ Z d d d e e d	 d e e d „	 Z d „  Z d „  Z	 RS(
   s‡  
    Fit a conditional multinomial logit model to grouped data.

    Parameters
    ----------
    endog : array-like
        The dependent variable, must be integer-valued, coded
        0, 1, ..., c-1, where c is the number of response
        categories.
    exog : array-like
        The independent variables.
    groups : array-like
        Codes defining the groups. This is a required keyword parameter.

    References
    ----------
    Gary Chamberlain (1980).  Analysis of covariance with qualitative
    data. The Review of Economic Studies.  Vol. 47, No. 1, pp. 225-238.

    Notes
    -----
    Equivalent to femlogit in Stata.
    R   c   	      K   so  t  t |  ƒ j | | d | | |  j j t j ƒ |  _ |  j j ƒ  d |  _ |  j d |  j	 j
 d |  _ |  j |  j |  _ d „  t |  j ƒ Dƒ |  _ |  j |  _ |  j	 j
 d |  _ |  j j ƒ  d k  ræ d } t | ƒ ‚ n  t j t ƒ } x. t |  j ƒ D] \ } } | | j | ƒ qWt | j ƒ  ƒ |  _ |  j j ƒ  g  |  j D] } | | ^ qR|  _ d  S(   NR   i   c         S   s   i  |  ] } t  | ƒ | “ q S(    (   Rd   (   t   .0t   j(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pys
   <dictcomp>  s   	 i    s%   endog may not contain negative values(   R
   R¥   R   R.   t   astypeR   t   intRL   t   k_catR   R	   t   df_modelR   t   df_residR,   t   _ynames_mapt   JRv   RK   R   R   t   defaultdictt   listR   R   R   t   keyst   _group_labelst   sortt   _grp_ix(	   R-   R.   R   R   R/   R0   t   grxR7   R|   (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR   ý  s$    R@   id   c
         K   sÌ   | d  k rE |  j j d } |  j d } t j j d | | ƒ } n  t j j	 |  d | d | d | d | d | d |	 ƒ} | j
 j |  j j d d	 f ƒ | _
 t |  | ƒ } | j d
 t j ƒ t | ƒ S(   Ni   R   RA   RB   RC   RD   RE   RF   iÿÿÿÿt   llnull(   R   R   R	   Rª   R   t   randomt   normalt   baset   LikelihoodModelRG   R=   t   reshapeR    t   set_null_optionst   nanR   (   R-   RA   RB   RC   RD   RE   RP   RQ   RR   RF   R/   t   qR‡   RS   (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRG     s     		%c         C   s;  |  j  j d } |  j d } | j | | f ƒ } t j t j | d f ƒ | f d d ƒ} t j |  j  | ƒ } d } x½ |  j D]² } | | d  d  … f } t j	 | j d d t j
 ƒ}	 |  j | }
 d } x: t j |
 ƒ D]) } | t j | |	 | f j ƒ  ƒ 7} qß W| | |	 |
 f j ƒ  t j | ƒ 7} q W| S(   Ni   t   axisg        i    t   dtype(   R   R	   Rª   R»   R   t   concatenateRƒ   R(   R´   t   arangeR©   R.   t	   itertoolst   permutationsR€   R#   R   (   R-   R=   R¾   R‡   t   pmatt   lprRx   t   iiR”   t   jjR6   t   denomt   p(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRy   <  s    *'+c         C   s  |  j  j d } |  j d } | j | | f ƒ } t j t j | d f ƒ | f d d ƒ} t j |  j  | ƒ } t j | | f ƒ } x‰|  j D]~} | | d  d  … f } t j	 | j d d t j
 ƒ}	 |  j | }
 d } t j | | f ƒ } x§ t j |
 ƒ D]– } t j | |	 | f j ƒ  ƒ } | | 7} xd t | ƒ D]V \ } } | d k r?| d  d  … | d f c | |  j  | | d  d  … f 7<q?q?WqWx` t |
 ƒ D]R \ } } | d k rª| d  d  … | d f c |  j  | | d  d  … f 7<qªqªW| | | 8} q W| j ƒ  S(   Ni   R¿   i    RÀ   g        (   R   R	   Rª   R»   R   RÁ   Rƒ   R(   R´   RÂ   R©   R.   RÃ   RÄ   R€   R#   R   t   flatten(   R-   R=   R¾   R‡   RÅ   RÆ   t   gradRÇ   R”   RÈ   R6   RÉ   t   denomgRÊ   R|   R2   t   r(    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR;   R  s.    *
F>N(    (
   Rm   Rn   R‘   R   R   Ro   Rp   RG   Ry   R;   (    (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyR¥   ä  s   	RO   c           B   s   e  Z RS(    (   Rm   Rn   (    (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyRO   s  s   (   R‘   t   numpyR   t   statsmodels.base.modelR¹   Rl   t#   statsmodels.regression.linear_modelt
   regressiont   linear_modelt   lmt   statsmodels.base.wrappert   wrappert   wrapt#   statsmodels.discrete.discrete_modelR    R   R   R%   RÃ   Rº   R   Rr   R’   t   LikelihoodModelResultsRH   R¥   t   RegressionResultsWrapperRO   t   populate_wrapper(    (    (    sF   lib/python2.7/site-packages/statsmodels/discrete/conditional_models.pyt   <module>   s   ÂŠ?I