U
    Kvf4                     @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlZd dlmZmZmZmZ d dlmZmZmZmZ d dlmZ d dlm  mZ ddlmZ G d	d
 d
Zdd Z G dd dZ!G dd dZ"G dd de"Z#dd Z$ej%&ej%'e(Z)ej%*e)dZ+e,e+Z-dd e-D Z-ej./de-ej./dddgej./dddgdd Z0dd  Z1d!d" Z2ej.j3d#d$ Z4d%d& Z5ej.j3d'd( Z6d)d* Z7G d+d, d,Z8d-d. Z9G d/d0 d0Z:d1d2 Z;d3d4 Z<dS )5    )PLATFORM_OSXN)sparse)MixedLMMixedLMParams_smw_solver_smw_logdet)assert_almost_equalassert_equalassert_allcloseassert_)
_penalties   )lme_r_resultsc                   @   s   e Zd ZdZdd ZdS )	R_ResultsaY  
    A class for holding various results obtained from fitting one data
    set using lmer in R.

    Parameters
    ----------
    meth : str
        Either "ml" or "reml".
    irfs : str
        Either "irf", for independent random effects, or "drf" for
        dependent random effects.
    ds_ix : int
        The number of the data set
    c              	   C   s  d|||f }t td| | _t td| | _t td| | _t td| | _t td| | _ttd| rt td| | _t td| | _	t
| j	| _	tjtjt}tj|d	}tj|d
| }t|dd&}t|}	t|	}
dd |	D }W 5 Q R X t
|}|d d |
df | _|d d |
df | _dd t|
D }|d d |f | _dd t|
D }|d d |f | _d S )Nz	_%s_%s_%dcoefZvcovcov_rescaleloglikeZ
ranef_meanranef_condvarresultszlme%02d.csvzutf-8)encodingc                 S   s   g | ]}d d |D qS )c                 S   s   g | ]}t |qS  )float.0xr   r   I/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/regression/tests/test_lme.py
<listcomp>@   s     z1R_Results.__init__.<locals>.<listcomp>.<listcomp>r   )r   liner   r   r   r   @   s     z&R_Results.__init__.<locals>.<listcomp>endoggroupsc                 S   s   g | ]\}}| d r|qS )exog_fe
startswithr   ir   r   r   r   r   F   s     
 c                 S   s   g | ]\}}| d r|qS exog_rer"   r$   r   r   r   r   H   s     
 )getattrr   r   vcov_rcov_re_rscale_rr   hasattrranef_postmeanr   npZ
atleast_2dospathdirnameabspath__file__joinopencsvreadernextasarrayindexr   r    	enumerater!   r'   )selfmethirfsds_ixZbnamecur_dirrdirfnameZfidrdrheaderdataiir   r   r   __init__)   s4    

zR_Results.__init__N)__name__
__module____qualname____doc__rG   r   r   r   r   r      s   r   c                    s    fdd}|S )Nc                    s*   t j| jjj d}j|d S )N)has_fe
profile_fe)r   Zfrom_packedk_fek_reuse_sqrtr   )r   paramsrL   modelrN   r   r   fP   s        zloglike_function.<locals>.fr   )rT   rN   rL   rU   r   rS   r   loglike_functionL   s    rV   c                   @   s   e Zd Zejjejdddgejdddgejdddgdd Zdd	 Zd
d Z	ejjejj
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejjdd Zdd Zejjd d! Zd"S )#TestMixedLMrQ   FTremlrN   c           $   	   C   s.  d}d}d}d}t jd t jj|| |fd}t jj|| |fd}	d|	d d df< t jj|| dfd}
t jj||fd}|d d d	f  d9  < t |t |df}t jj|dfd}t |t |df}|d d d	f  d9  < ||	 d}||
 d}t jj|| d}|d| | | }t t|t |}i i d
}t|D ]D}t ||k}|
|ddf |d |< |
|ddf |d |< qZt	j
tdd t||||	||d}W 5 Q R X |j|d}t||| d}ztdD ]}t jj|d}t jj||fd}t |j|}t jjddd }tj|||d}|j| |d}|j||d }t||}t||dd q|dkr|dkr||j\} }!|!rt	d | d	9 } |jjddd}t|ddd}"t||"}#t| |#dd W n* tk
r(   tr"t	d n Y nX d S )N            i  sizer   r   abra   rb   Using deprecated variancematch)exog_vcrQ   rX   )rN   rL   )r   vcomprL   rQ   rM   MbP?rtolFzhessian should not be singularT)rQ   rL   z4fails on OSX due to unresolved numerical differences)r.   randomseednormalkrononessumrangeflatnonzeropytestwarnsUserWarningr   fitrV   dotTr   from_components
get_packedZscorendZapprox_fprimer
   Zhessianparams_objectfailZapprox_hessAssertionErrorr   Zxfail)$r<   rQ   rX   rN   n_grpZgrpsizerO   rP   r!   r'   rf   slopesZ	slopes_vcZ	re_valuesZ	vc_valueserrr   r    vcr%   ixrT   rsltr   Zkr	fe_paramsr   rh   rR   Z
params_vecgrZngrZhessZsingZ	loglike_hZnhessr   r   r   test_compare_numdiff[   s    
     
   z TestMixedLM.test_compare_numdiffc                 C   s   t jd t jjdd}t t ddddg}t t jjdddddg}|d| t jjdd }t||| }t|||t 	d }t
|j|jdd d S )	N  ,     r]   d   r   r      decimal)r.   rm   rn   ro   rp   arangerr   r   rx   rq   r   rR   )r<   exogr    g_errorsr   mdf1mdf2r   r   r   test_default_re   s    zTestMixedLM.test_default_rec                 C   s   t jd t jjdd}t t ddddg}t t jjdddddg}|d| t jjdd }t|||}|jdd}t	t
|d	d d S )
Nr   r   r]   r   r   r   T)Zfull_outputhist)r.   rm   rn   ro   rp   r   rr   r   rx   r	   r,   )r<   r   r    r   r   modr   r   r   r   test_history   s    zTestMixedLM.test_historyc              	   C   s  t jd d}d}d}t jj|| |fd}t || df}t t |t |}t jj|| d}t jj|| d}d}	t t jjddt |}
|	|
|d d df  7 }	t jj|d}|	t |t || 7 }	t jj|d}|	t |t || 7 }	|	t jj|| d7 }	|d|	 }i i d}t|D ]L}t 	||k}|| d d d f |d	 |< || d d d f |d
 |< q:t
jtdd t|||||d }W 5 Q R X |jddddddd |jd
dddddd d S )NiV&  r\   r[   r   r]   r   r   r`   ra   rb   rc   rd   )r    r'   rf   re)vtypeZdist_lowZnum_lowZ	dist_highZnum_highr         ?)r.   rm   rn   ro   rq   rp   r   rr   rs   rt   ru   rv   rw   r   rx   Z
profile_re)r<   rO   gsizer   r   r'   r    ZvcaZvcberrorsr   rcr   r   krF   r   r   r   r   test_profile_inference   sH    
    z"TestMixedLM.test_profile_inferencec              	   C   s  t jd t jjdd}t jjdd}t t dt d}t jjdd}|d d df  d	9  < t |t d
| }|dt jjdd }|d| }tdd	d}t d|_	t 
d	|_t d|_t||||d}|j|d}	i i d}
t|jD ]D\}}|j| }||ddf |
d |< ||dd	f |
d |< qtjtdd t||||
d}W 5 Q R X | }|  t|	j	|j	dd tt |	j|jddd t|	jdddg |jddd d S )N  )  r   r]   )r   r\   r   r   )r   r\   r   r\   r   r   r   r   r&   )freer`   ra   rb   rc   rd   )rf   -C6?)atol{Gz?)r   rl   r[   )r.   rm   rn   ro   rp   r   rq   rr   r   r   eyer   zerosrh   r   rx   r;   Zgroup_labelsZrow_indicesru   rv   rw   summaryr
   diagbse)r<   r   r'   r    r   r   r   r   model1result1rf   r   groupr   model2result2r   r   r   test_vcomp_1   sJ    


      zTestMixedLM.test_vcomp_1c                 C   sF  t jd d}t jj|dfd}t t |d t d}d}t jj|dfd}t jj|d dfd}t |t d| }||d7 }t t |d	 t d	}|t dt jj|d	 d t d	7 }t t |d t d}|t dt jj|d d t d7 }|t jj|d7 }|d| }	tj	t
|d
}
|	|
d< ||
d< |d d df |
d< |d d df |
d< |d d df |
d< |d d df |
d< ||
d< ||
d< ddd}tjd|d||
d}| }t|jdddgdd t|jddgdd ggd!d t|jd"d#gd!d t|jjdd$ d%d&d'gd!d d S )(Na  i@  r\   r]      r   )r   r   r   r   r:   yr    x1x2z1z2v1Zv2z	0 + C(v1)z	0 + C(v2)r`   zy ~ x1 + x2z0+z1+z2r    
re_formula
vc_formularE   gE>'?gh㈵?g|'f?r   rk   gCl?g㥛 ?gV-?rj   gjt@g`"@r[   gFx$?gD;)?g?)r.   rm   rn   ro   rp   r   rq   rr   pd	DataFramers   r   from_formularx   r
   r   r   rh   r   iloc)r<   nr   r    r   r'   r   Z
subgroups1Z
subgroups2r   dfvcfr   r   r   r   r   test_vcomp_2  sb    ((
      zTestMixedLM.test_vcomp_2c           	      C   s   t jd t jjdd}t t dt d}t jjdd}t |t d| }|t jjdd }ddi}t|||d}t	j
d	d
||d}| }|  t|jjdd t jd dd t|jjdd t jd dd d S )Nr   r   r]   r   r   ra   z0 + x1)r   r   r    zy ~ 1r    )r    r   rE   r   )gSvA]g{?gб?gP4`_rj   rk   )ghg 8L?g!Va̿g&R?o*)r.   rm   rn   ro   rp   r   rq   r   r   r   r   rx   r   r
   residr   r_fittedvalues)	r<   r   r    r   r   Zvc_fmlr   rT   resultr   r   r   test_vcomp_3Q  s4       zTestMixedLM.test_vcomp_3c           
      C   s   t jt jt}t j|d}t j|d}t|}ddi}tj	ddd||d}|
 }tj	ddd|d	|d
}|
 }	t|j|	j t|j|	j d S )Nr   
pastes.csvcask0 + caskstrength ~ 1batch1r   T)r    r   r   Z
use_sparserE   )r/   r0   r1   r2   r3   r4   r   read_csvr   r   rx   r
   rR   r   )
r<   r@   rA   rB   rE   r   rT   r   r   r   r   r   r   test_sparsek  s0    
zTestMixedLM.test_sparsec                 C   sP  t jt jt}t j|d}t j|d}t|}tj	dd|d}|
 }t|jtjd dd t|jd	d
 tjd dd t|jddd t|jddd t||jddd t|}tj	dd|d}|j
dd}t|jtjd dd t|jd	d
 tjd dd t|jddd t|jddd t||jddd d S )Nr   
dietox.csvWeight ~ TimePigr    rE   )gMqr/@gD @h㈵>rk   r   r\   )gKz7?gd"?g$0ܻ&@g-!l2D@ǧɢFrg   )g73pr/@g"J @)gǎ?g\?g0|&@gC@g/Ţ)r/   r0   r1   r2   r3   r4   r   r   r   r   rx   r
   r   r.   r   r   r   r   r   r~   r<   r@   rA   rB   rE   rT   r   r   r   r   test_dietox  sV    
    
  
    
  zTestMixedLM.test_dietoxc                 C   sr  t jt jt}t j|d}t j|d}t|}tj	ddd|d}|j
dd}t|jtjd	 d
d t|jdd tjd dd t|jddd t|jj tjd dd t||jdd
d t|}tj	ddd|d}|j
ddd}t|jtjd d
d t|jdd tjd dd t|jddd t|jj tjd dd t||jdd
d d S )Nr   r   r   r   z1 + Time)r    r   rE   Zcg)method)g|a2U0z/@g@r   rk   r   r\   )gUx_?gcoo?rj   gJY&@)g
zS~3@矊%?r   g=Ƃ ?皙?gMbRF)r   rX   )g`-z/@g(yu@)gS~;{?gjt1K?g?V&@)g@C03@wo?r   gl`q8?r   gK7O)r/   r0   r1   r2   r3   r4   r   r   r   r   rx   r
   r   r.   r   r   r   r   valuesZravelr   r~   r   r   r   r   test_dietox_slopes  sr    
       

  
     

  zTestMixedLM.test_dietox_slopesc           
      C   s  t jt jt}t j|d}t j|d}t|}ddi}tj	ddd||d}|
 }t|jjd	 d
dd t|jjd	 ddd t|jjd ddd t|jddd t|jddd t|jtj t|jtj tjd }t|jd	d |dd tjd }	t|jd	d |	dd tj	ddd||d}|j
dd}t|jjd	 d
dd t|jjd	 ddd t|jjd ddd t|jddd t|jddd t|jddd t|jddd d S )Nr   r   r   r   r   r   r   r   r   g;pΈN@rj   rk   ga2U0*?)r   r   gPn?gV-?g(\^r   )gVQ?g7BZg4Kbg0_^?gDrZ   )&NwPO@r   9}N@r   g7ُiO@r   Frg   g%C?gv/?g5{?g+^go@grp@)r/   r0   r1   r2   r3   r4   r   r   r   r   rx   r
   r   r   r   r   r   llfr	   Zaicr.   nanZbicr   r   r   )
r<   r@   rA   rB   rE   r   rT   r   r   rx   r   r   r   test_pastes_vcomp  sN    	


zTestMixedLM.test_pastes_vcompc              	   C   s  t jd d}t jj|dfd}d|d d df< g }t t |d t d}d}t jj|dfd}t jj|d dfd}t |t d| }||d7 }t jj|dfd}t jj|d dfd}|d d dd f  d9  < t |t d| }||d7 }|t jj|d7 }|d| }i i d	}	tt	t
|d D ]H\}
}t ||k}||ddf |	d
 |< ||dd f |	d |< qHtjtdd t|||||	d}W 5 Q R X | }tj|d d dd f dgd}||d< |d d df |d< |d d df |d< |d d df |d< |d d df |d< |d d df |d< |d d df |d< ddd	}tjd|d||d}| }t|j|jdd t|j|jdd t|j|jdd t|j|jdd t|j|jdd d S ) Nr   i   r\   r]   r   r   r   r   r`   ra   rb   rc   rd   )r'   rf   r   columnsr   Zre1Zre2Zvc1Zvc2Zvc3r[   Zvc4z0 + vc1 + vc2z0 + vc3 + vc4y ~ x1z0 + re1 + re2r   g:0yE>rk   )r.   rm   rn   ro   rp   r   rq   rr   r;   rs   intrt   ru   rv   rw   r   rx   r   r   r   r
   r   r   rh   rR   r   )r<   r   r   Zex_vcr    r   r'   r   r   rf   r   r   r   r   r   r   r   r   r   r   r   r   test_vcomp_formula^  sd    

 
zTestMixedLM.test_vcomp_formulac              	   C   s  t jd t jjdd}t jjdd}t t ddddg}|t t jjdddddg }|d| t jjdd }t||||}t|j	j
ddd	d
gk t|j	jdgk t|j	jdgk | }td|i}t|jd D ]}	|d d |	f |d|	 < q||d< d}
d}tj|
|||d}t|j	j
ddddgk t|j	jdgk t|j	jdgk | }t|j|j ||d< tj|
||dd}t|j	j
ddddgk t|j	jdgk t|j	jdgk |j|jd}t|j|jdd t jt|t jd}t||||}t  td | }W 5 Q R X ddlm} ||
|dd }t|j	jdgk t|j	jd!gk t  td | }W 5 Q R X t|j|j d S )"Nj	  r   r]   r   r   r   r   r   Zx3Zx4Zx_re1z	x_re1 Varr   exog%dr'   )endog ~ 0 + exog0 + exog1 + exog2 + exog3z0 + exog_rer   r    exog0exog1exog2exog3exog_re Varr    Zstart_paramsr   rk   Zdtypeignorer   )mixedlmr    z
groups Var)r.   rm   rn   ro   rp   r   rr   r   r   rE   xnamesexog_re_namesexog_re_names_fullrx   r   r   rs   shaper   r   rR   r
   rq   lenZfloat64warningscatch_warningssimplefilterZstatsmodels.formula.apir   )r<   r   r'   r    r   r   mod1Zrslt1r   r   fmlre_fmlmod2Zrslt2Zmod3Zrslt3Zmod4Zrslt4r   Zmod5Zrslt5r   r   r   test_formulas  s`        



zTestMixedLM.test_formulasc              	   C   sH  t jd t jjdd}t t dt d}|d d df |d d df  }|t t jjddt d t jjdd }t|||}|jd	d
}|	  t|||}|jdt d d
}|	  t
 }|j|dd}	|		  t
 }t  td |j|dd}
W 5 Q R X |
	  t
d}|j|d	d}|	  d S )Ni}  )r   rZ   r]   r   r   r   r\   r   g      ?)alpha
   rZ   g        )r   r  r   g      $@g333333?)r.   rm   rn   ro   rp   r   rq   r   fit_regularizedr   	penaltiesZL2r   r  r  ZPseudoHuber)r<   r   r    Zexpected_endogr   mdr   r   ZpenZmdf3Zmdf4Zmdf5r   r   r   test_regularized  s4     


zTestMixedLM.test_regularizedN)rH   rI   rJ   ru   markslowparametrizer   r   r   Zsmoker   r   r   r   r   r   r   r   r   r  r  r   r   r   r   rW   X   s,   T!&?>ER
6;rW   c                   @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
TestMixedLMSummaryc           
   
   C   s   t ddgd}t dgd}ddddddddd	d
g
}dddddddd
ddg
}ddddddddd
d	g
}t|||||d}|d j}|dddg j}|d j}	t|||	d | _d S Nr   r   rZ   r	     r[   r\      	   r   r   )r   pidx0r   r   r   r  r   r   r  r   )r.   repeatr   r   r   r   rx   res
clsr  r  r   r   r   r   r   r   r    r   r   r   setup_class  s    

zTestMixedLMSummary.setup_classc                 C   s2   | j  }ddddg}|jd jj}t|| d S )Nconstr   r   	Group Varr   r  r   Ztablesr:   r   r	   r<   ZsummZdesiredactualr   r   r   test_summary
  s    
zTestMixedLMSummary.test_summaryc                 C   s<   | j jdddgd}ddddg}|jd jj}t|| d S )NConstantZAgeZWeight)Zxname_fer  r   r  r   r   r   r   test_summary_xname_fe  s    z(TestMixedLMSummary.test_summary_xname_fec                 C   s8   | j jdgd}ddddg}|jd jj}t|| d S )NzRandom Effects)Zxname_rer  r   r   r   r  r   r   r   r   test_summary_xname_re  s    z(TestMixedLMSummary.test_summary_xname_reN)rH   rI   rJ   classmethodr  r"  r$  r%  r   r   r   r   r    s
   
r  c                   @   s   e Zd Zedd ZdS )TestMixedLMSummaryRegularizedc           
   
   C   s   t ddgd}t dgd}ddddddddd	d
g
}dddddddd
ddg
}ddddddddd
d	g
}t|||||d}|d j}|dddg j}|d j}	t|||	d | _d S r  )r.   r  r   r   r   r   r
  r  r  r   r   r   r  )  s    

z)TestMixedLMSummaryRegularized.setup_classN)rH   rI   rJ   r&  r  r   r   r   r   r'  &  s   r'  c              	   C   s  |r|dk rd S |rdnd}| r$dnd}t |||}t|j|j|j|j}|stt|j	dk rt
  t
d |jd| d	}W 5 Q R X n|jd| d	}n|jjd
 }|jjd
 }	t||	d}
t||
_t|	|
_tg |
_tt|j	dk r2t
   t
d |j| d|
d}W 5 Q R X n|j| d|
d}t|j|jdd t|j|j	dd t|j|jdd |j}t|j| d|d|f dd t|j|jd dd |st|jd |j dd t|j!d |j"dd d S )Nr  irfZdrfrX   mlr   r   Hz>)gtolrX   r   r   )rX   r+  r   r   r   r[   r\   )#r   r   r   r!   r    r'   r.   anyr   r*   r   r  r  rx   r   r   rq   r   r   r   arrayrh   r   r   r   r+   rO   r)   
cov_paramsr   r   random_effectsr-   random_effects_covr   )rX   r(  r?   r>   r=   r   r  mdfrO   rP   r   r   r   r   do1<  sX    



      r2  r   c                 C   s$   g | ]}| d r|dr|qS )Zlmez.csv)r#   endswithr   r   r   r   r   x  s     
 
 r   rB   rX   FTr(  c                 C   s    t | dd }t||| d S )Nr[   rZ   )r   r2  )rB   rX   r(  r?   r   r   r   test_r|  s    r4  c                  C   s^  t jd t jjdd} t jjdd}t t ddddg}|t t jjdddddg }| d| t jjdd }td|i}t	| j
d D ]}| d d |f |d| < q||d	< d
}d}tj||||d}	|	 }
|
  ddddg}dd	g}dddg}t|	jj|k t|	jj|k t|	jj|k |
j}t|j || k |
j}t|j || k |
j}t|j || k |
 }t|j || k t|j || k |
j}t|j |k |
j}t|j |k |
j}t|j |k t|j |k |
j}t|j |k t|j |k |
j}t|j |k d S )Nr   r   r]   r   r   r   r   r   r'   r   z	~ exog_rer   r   r   r   r   Groupr  zGroup x exog_re Covr   ) r.   rm   rn   ro   rp   r   rr   r   r   rs   r   r   r   rx   r   r   rE   r   r   r   rR   r:   tolistr   tvaluesr.  r   r   bse_fer   Zcov_re_unscaledbse_re)r   r'   r    r   r   r   r   r  r  r  r   r   Zre_namesZre_names_fullrR   r   r7  r.  Zfer8  r   Zcov_re_ur9  r   r   r   test_mixed_lm_wrapper  sT     
r:  c                  C   s   t jd d} d}d}d}|t jj| d }t |t |}||t jj| | d  }t t | t |}t | | }t|||d}	|	 }
|
j	}t
t|t t
t|| k t
t|d tj t
t|d d	k t||||d
}	|	 }
|
j	}t
t|t t
t|| k t
t|d tj t
t|d d	k t jj| | dfd}d	|d d df< t dd	|}t t | ||d d d	f< t||||d
}	|	 }
|
j	}t
t|t t
t|| k t
t|d tj t
t|d dk d S )Ni[  r   r	  r\   r[   r]   r   r   r   )r'   r    r_   )r.   rm   rn   ro   rp   rq   r   r   rx   r/  r   
isinstancedictr   r   SeriesZlinspace)Zngrpr   ZrsdZgsdmnZgmnr   r   r   rT   r   r   ZxrZqpr   r   r   test_random_effects  sF    r?  c                  C   s<  t jd t jjdd} t| } dddddd	g| _t t d
t 	d| d< t jjdd}t |t 	d}|d d df |d d df | j
  |d d df | j  | d< | d  |d d df | j t jjdd 7  < t j| jd< t j| jd< t j| jd< t j| jd< t j| jd< t j| jd< d}d}ddd}dD ]}dD ]}i }|  }dddg}	|rz||d< |	d |r||d< |	dd	g ||	  }t  td  tj|fd|d!|}
|
 }tj|fd| d"d#|}| }t|j|j t|j|j tt|j|j W 5 Q R X qHq@d S )$Ni[  )r   r  r]   r   gr   r   c1c22   r\   )rC  r   )r\   r   r   r   r[   r   )r   r   )r\   r@  )r[   r   )r   r   )rZ   rA  )r  rB  r   z1 + z1z0 + c1z0 + c2r`   )FTr   r   r   r   Zdrop)r    rE   missing) r.   rm   rn   ro   r   r   r   rp   r   rq   r   rA  rB  NaNloccopyappendextendZdropnar   r  r  r   r   rx   r
   rR   r   r	   r   r   Znobs)r   r   r  r   r   Z
include_reZ
include_vckwargsZdxvar   r   r   r   r   r   r   test_handle_missing  sl    
@0




   rL  c                  C   s  ddl m}  dddddddddddddddg}ddddddd	d
dddddddg}tddddddddddddddd g}|||d!}t|}td"d#d$g}tjd%||d& d'}|j|d(}td)d*d+g}tjd,||d& d'}	|	j|d(}
| ||
gd-d.d/d0d1gd2}d3}t	t
|| d S )4Nr   )summary_colr   r\   r[   r   rZ   r  r  r   r  r	                 goʡ?gd;OgZd;@gZd;O@gjt@gl@grh@gGz@g"~@g(\O$@g$@gDl)1@g-F1@g`"-@g-,@)YXIDSg@{Fg~eJ?gͣT?Y ~ XrU  r   r   g&ʓ@g.?g<H.*?zX ~ YTr  Z	InterceptrT  rS  )ZstarsZregressor_ordera  
=============================
              Y         X    
-----------------------------
Group Var 0.1955    1.3854   
          (0.6032)  (2.7377) 
Intercept -1.2672   3.4842*  
          (1.6546)  (1.8882) 
X         1.1618***          
          (0.1959)           
Y                   0.5529***
                    (0.2080) 
=============================
Standard errors in
parentheses.
* p<.1, ** p<.05, ***p<.01)Zstatsmodels.iolib.summary2rM  r.   r-  r   r   r   r   rx   r	   str)rM  idsr   r   dZsp1r  Zresults1Zsp2r  Zresults2outsr   r   r   test_summary_col   sF    ""             

r\  c                     s  t jd d} d}g g g g g g g g g f	\	}}}}}}}}	}
t| D ]f}t jj|dfd}|d d df dt jj|d  }t jj|dfd}t jjdd}|d  d9  < |d	  d	9  < |t ||j7 }|| t t j	d
 t 
|d t}t jjdd}||| 7 }|| |	| t t 
|d t j	d
 t}t jjdd}||| 7 }|| |
| || || || |d| g|  qDt |}t |}t |}t |}t |}t |}t||d d df |d d d	f |d d df |d d d	f |||d}t |}t |	}	t |
}
t j|	|
fd	d}tjdddddd|d}| }|j  fddt| D }t |}t |d d df |d d df d
 dkstt |d d d	f |d d d	f d
 dkst fddt| D }t |}tdD ]8}t |d d |f |d d |f d
 dks:tq:|j}| D ](} | j}|| j||fkstqd S )Ni  i  r	  r\   r]   r   r   r[   r   )r   r   g%d)r   r  r   z0r   v0r   r@  )Zaxiszy ~ x0 + x1z~0 + z0 + z1z~0+C(v0)z0+C(v1))r_  r   r@  )r   r   r    rE   c                    s    g | ]} d |  dd qS )r]  r   r\   r   r   r   refr   r   r     s     z/test_random_effects_getters.<locals>.<listcomp>g?c                    s    g | ]} d |  dd qS )r]  r\   r  r   r`  ra  r   r   r     s     r   )r.   rm   rn   rs   ro   ry   ZflatrH  rp   r   rq   Zastyper   Zconcatenater   r   r9   r   r   rx   r/  Zcorrcoefr   r0  keysr^   r   )Zngmr   r   zr_  r   r@  rb   Zc0rA  r%   ZxxyyzzZbbZvv0Zcc0Zvv1Zcc1r   ccrT   r   Zb0Zcf0r   Zrefcpr   ra  r   test_random_effects_gettersF  s    ("
"

"













	
22
6
rj  c              
   C   s6  || }t jj| |fd}t |j|}t ||f}t jj||fd|d|d|f< t jj|d}t d| |||||f< t j	|d|d|f }	d}t jj| d}
t j
|t | |  t |t ||j |
}t||||	|}||
}t|| t|t|t||	|}||
}t|| d S )Nr]   r   r   r   )r.   rm   ro   ry   rz   r   uniformr   linalginvZsolver   r   r
   r   Z
csr_matrix)ri  qrr[  rY  AAtABdiQir   y2rU   y1r   r   r   check_smw_solver  s&    "0
rw  c                   @   sh   e Zd Zedd Zejdddgejdddgejd	d
dgejdddgdd ZdS )TestSMWSolverc                 C   s   t jd d S N   r.   rm   rn   r  r   r   r   r    s    zTestSMWSolver.setup_classri  rZ   r	  rn  r   r   ro  r\   r[   r[  r   r   c                 C   s   t |||| d S N)rw  r<   ri  rn  ro  r[  r   r   r   test_smw_solver  s    zTestSMWSolver.test_smw_solverN)	rH   rI   rJ   r&  r  ru   r  r  r  r   r   r   r   rx    s   
rx  c              
   C   s&  || }t jj| |fd}t |j|}t ||f}t jj||fd}t |j||d|d|f< t jj|d}	t d|	 |||||f< t j	|d|d|f }
d}t j
|t | |  t |t ||j \}}t j
|\}}t||||
|	|}trdnd}t|||d d S )Nr]   r   r   r   gư>r*  rk   )r.   rm   ro   ry   rz   r   rk  r   rl  rm  Zslogdetr   r   r   r
   )ri  rn  ro  r[  rY  rp  rq  rr  crs  rt  _Zd2Zbdd1rl   r   r   r   check_smw_logdet  s    2r  c                   @   sh   e Zd Zedd Zejdddgejdddgejd	d
dgejdddgdd ZdS )TestSMWLogdetc                 C   s   t jd d S ry  r{  r|  r   r   r   r    s    zTestSMWLogdet.setup_classri  rZ   r	  rn  r   r   ro  r\   r[   r[  r   r   c                 C   s   t |||| d S r}  )r  r~  r   r   r   test_smw_logdet  s    zTestSMWLogdet.test_smw_logdetN)	rH   rI   rJ   r&  r  ru   r  r  r  r   r   r   r   r    s   
r  c               	   C   s   t jd d} t j| d}tj|ddgd}tjdd |jD |jd	|d
< t	t
8}tjd||d
 d}| }|  |std W 5 Q R X d S )Ni_  r   r\   rS  rT  r   c                 S   s   g | ]}|d  qS )r[   r   )r   r%   r   r   r   r     s     z!test_singular.<locals>.<listcomp>r   classrV  r   zwarning expected)r.   rm   rn   Zrandnr   r   r=  r:   ru   rv   Warningr   r   rx   r   r   )r   rE   r   Zwrnr  r1  r   r   r   test_singular  s     r  c               	   C   s   t jd d} d}t jd }t ddgddgg}t jd }d	}t jj| dfd
}t jj| dfd
}t jj| dfd
}t jj| dfd
}	t t j|td| | }
t 	||}t jj|dfd
}t 	|t j
|j}t |d t jj|dfd
 }t |d t jj|dfd
 }|||
d d f | d }|||
d d f | d7 }|||
d d f |	 d7 }|t |t jj| d
 7 }t||d d df |d d df |d d df |d d df |
d}|d d df |d< |d d df |d< |	d d df |d< |	d d df |d< ddd}tjddd||d}dd l}|jjj}|j|||d}|jddd}|t|d   |  < |||d }|d}t 	||| d }||d |d d  7 }||d |	d d  7 }||7 }tt || |ddd d S ) N   r   r	  )r   r   r   r\   )g      ?g      @g      ?r]   r   r   )r   r   r   r^  r   grpr   Zz3Zz4Zz5z0 + z2 + z3z0 + z4 + z5r`   zy ~ 0 + x1 + x2r  z0 + z0 + z1r   )r   r   rh   TFri   r   r   )rl   r   )r.   rm   rn   r   r9   ro   r  r   r   ry   rl  Zcholeskyrz   sqrtrr   r   r   r   r   statsmodelsZ
regressionZmixed_linear_modelr   r{   r|   r   get_distributionZrvsZmeanr
   var)r   Zn_groupsr   r   rh   r   r!   r'   Zexog_vcaZexog_vcbr    Zeyuu1u2r   r   r   rd  r  mpZpopadistyrvr   r   r   test_get_distribution  sh    

  " 
 

r  )=Zstatsmodels.compat.platformr   r/   r6   r   Znumpyr.   Zpandasr   Zscipyr   ru   Z)statsmodels.regression.mixed_linear_modelr   r   r   r   Znumpy.testingr   r	   r
   r   Zstatsmodels.baser   r  Zstatsmodels.tools.numdiffZtoolsZnumdiffr}   r   r   r   rV   rW   r  r'  r2  r0   r1   r2   r3   r@   r4   rA   listdirfnamesr  r  r4  r:  r?  r  rL  r\  rj  rw  rx  r  r  r  r  r   r   r   r   <module>   sX   3     ',9
3-
8&
^