U
    Ãmœdà²  ã                   @   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| ƒršt 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   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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ÚfnameÚfidÚrdrÚheaderÚdataÚiir   r   r   Ú__init__)   s4    ÿ

zR_Results.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rH   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©rM   ÚmodelrO   r   r   ÚfP   s        ÿzloglike_function.<locals>.fr   )rU   rO   rM   rV   r   rT   r   Úloglike_functionL   s    rW   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 )#ÚTestMixedLMrR   FTÚremlrO   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¡\} }!|!�r¼t	 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Úbrb   rc   úUsing deprecated variance©Úmatch)Úexog_vcrR   ©rY   )rO   rM   )r   Úvcomp©rM   rR   rN   çü©ñÒMbP?©ÚrtolFzhessian should not be singularT)rR   rM   z4fails on OSX due to unresolved numerical differences)r.   ÚrandomÚseedÚnormalÚkronÚonesÚsumÚrangeÚflatnonzeroÚpytestÚwarnsÚUserWarningr   ÚfitrW   ÚdotÚTr   Úfrom_componentsÚ
get_packedZscoreÚndZapprox_fprimer
   ZhessianÚparams_objectÚfailZapprox_hessÚAssertionErrorr   Zxfail)$r<   rR   rY   rO   Ún_grpZgrpsizerP   rQ   r!   r'   rg   ÚslopesZ	slopes_vcZ	re_valuesZ	vc_valuesÚerrr   r    Úvcr%   ÚixrU   Úrsltr   ÚkrÚ	fe_paramsr   ri   rS   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.   rn   ro   rp   rq   Úarangers   r   ry   rr   r   rS   )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.   rn   ro   rp   rq   r”   rs   r   ry   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   ra   rb   rc   rd   re   )r    r'   rg   Úre)ZvtypeZdist_lowZnum_lowZ	dist_highZnum_highr…   ç      à?)r.   rn   ro   rp   rr   rq   r”   rs   rt   ru   rv   rw   rx   r   ry   Z
profile_re)r<   rP   Úgsizer‚   r•   r'   r    ZvcaZvcbÚerrorsr–   Úrcr   r…   ÚkrG   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&   )Úfreera   rb   rc   rd   re   )rg   ç-Cëâ6?)Úatolç{®Gáz„?)r©   rm   r\   )r.   rn   ro   rp   rq   r”   rr   rs   r   r‰   Úeyer   Úzerosri   r   ry   r;   Zgroup_labelsZrow_indicesrv   rw   rx   Úsummaryr
   ÚdiagÚbse)r<   r•   r'   r    rƒ   r    r   r§   Úmodel1Úresult1rg   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 )(Néa  i@  r]   r^   é   r   )r·   r   r   r�   ©r:   Úyr    Úx1Úx2Úz1Úz2Úv1Zv2z	0 + C(v1)z	0 + C(v2)ra   zy ~ x1 + x2z0+z1+z2©r    Ú
re_formulaÚ
vc_formularF   gE�>‘'Å?gñhãˆµøï?g|'f½Êî?r¨   rl   g�•C‹lçó?gã¥›Ä °Â?gV-²�ïõ?rk   gj¼t“@g`åÐ"Ûù@r\   gÜFx$À?gD£;ˆ�)¤?g¤‹¦³£?)r.   rn   ro   rp   rq   r”   rr   rs   ÚpdÚ	DataFramert   r   Úfrom_formulary   r
   r‰   r   ri   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�   rb   z0 + x1)r¹   rº   r    zy ~ 1r    )r    rÁ   rF   r   )gSvúA]äò¿gá{ƒöêÑ?gÈÐ±ƒâ?gP4`‘_å¿rk   rl   )ghñ�ÿ¹¿g 8öì¹L�?g!V„aÀÌ¿g&üR?o*À¿)r.   rn   ro   rp   rq   r”   rr   rÂ   rÃ   r   rÄ   ry   r­   r
   ÚresidrÅ   Úr_Úfittedvalues)	r<   rº   r    rƒ   r¹   Zvc_fmlrÇ   rU   Ú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_sparserF   )r/   r0   r1   r2   r3   r4   rÂ   Úread_csvr   rÄ   ry   r
   rS   r¯   )
r<   r@   rA   rB   rF   rÈ   rU   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    rF   )gÀÎM›qr/@gDÝ Å@çñhãˆµøä>rl   r   r]   )g«Kz¼7é?gÄd�á"¡?g$0ðÜ»&@g-!ôl2D@gÍÌÌÌŒÉ¢ÀFrh   )g73úÑpr/@g–"ùJ Å@)g€®ÇŽ×é?g×—ˆ\¡?g£Ó0|´&@g¢‚‹éC@g¾Ÿ/ÝÅ¢À)r/   r0   r1   r2   r3   r4   rÂ   rÕ   r   rÄ   ry   r
   r‰   r.   rË   r¯   r   r   r   r   ©r<   r@   rA   rB   rF   rU   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À   rF   Zcg)Úmethod)g|a2U0z/@gÐñÑâŒÁ@rÛ   rl   r   r]   )gUx†_ šá?gÍÞcúoo´?rk   gØðôJY&@)gˆ
zS~3@çŸŠÀý%ÎÒ?rß   g=ïÆ‚Â Ú?çš™™™™™¹?gÓMbR¡ÀF)rÞ   rY   )g`°¶-z/@gá(yuŽÁ@)gS~;{á?gjtÞ1K´?g?úîV&@)g@¢Cà03@çw¼ÉoÑÉÒ?rá   gl•`q8Ú?rª   gÇK7‰�O¡À)r/   r0   r1   r2   r3   r4   rÂ   rÕ   r   rÄ   ry   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@rk   rl   ga2U0*©å?)r   r   gP�—nƒú?gV-²å?g�Âõ(\ß^Àrà   )g³µßVQîÅ?g7ÏBZ�¿g4KÔÔbñ¿gÿç0_^Ðñ?gDˆŽ‘ªõ¾¿r[   )çÕ&NîwPO@rä   çë9é}ã—N@rå   g7ýÙ�iO@r¨   Frh   g%�•C‹ä?gÉv¾Ÿ/ó?g5{ ²å?g+‡ÙÎÿ^Àg�äòÒÿo@grŠŽäò…p@)r/   r0   r1   r2   r3   r4   rÂ   rÕ   r   rÄ   ry   r
   r‰   rÅ   r¯   r   r   Úllfr	   Zaicr.   ÚnanZbicrË   rÊ   rÌ   )
r<   r@   rA   rB   rF   rÈ   rU   rÍ   rÊ   ry   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¦   ra   rb   rc   rd   re   )r'   rg   rº   ©Úcolumnsr¹   Zre1Zre2Zvc1Zvc2Zvc3r\   Zvc4z0 + vc1 + vc2z0 + vc3 + vc4úy ~ x1z0 + re1 + re2r¿   g:Œ0âŽyE>rl   )r.   rn   ro   rp   rq   r”   rr   rs   r;   rt   Úintru   rv   rw   rx   r   ry   rÂ   rÃ   rÄ   r
   r‰   r   ri   rS   r¯   )r<   rÆ   r•   Zex_vcr    r    r'   rƒ   r   rg   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 )"Néj	  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¨   rl   ©ZdtypeÚignorer   )Úmixedlm©r    z
groups Var)r.   rn   ro   rp   rq   r”   rs   r   r   rF   ÚxnamesÚexog_re_namesÚexog_re_names_fullry   rÂ   rÃ   rt   ÚshaperÄ   r   rS   r
   rr   ÚlenZfloat64ÚwarningsÚcatch_warningsÚsimplefilterZstatsmodels.formula.apirú   )r<   r•   r'   r    r–   r   Úmod1Zrslt1rÇ   r¢   ÚfmlÚre_fmlÚmod2Zrslt2Zmod3Zrslt3Ú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¥   r[   r^   r�   r�   r   r]   r¥   g      ð?)Úalphaé
   r[   g        )rÞ   r
  rù   g      $@g333333Ó?)r.   rn   ro   rp   rq   r”   rr   r   Úfit_regularizedr­   Ú	penaltiesZL2r  r  r  ZPseudoHuber)r<   r•   r    Zexpected_endogr   Úmdr—   r˜   ÚpenZmdf3Zmdf4Zmdf5r   r   r   Útest_regularizedÐ  s4     ÿþ


zTestMixedLM.test_regularizedN)rI   rJ   rK   rv   ÚmarkÚslowÚparametrizer‹   r™   rœ   Zsmoker£   rµ   rÉ   rÎ   rÖ   rÝ   rã   rè   rí   r	  r  r   r   r   r   rX   X   s,   T!&?>ER
6;rX   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   r[   r  é   r\   r]   é   é	   r‘   r�   )r¹   ÚpidÚx0rº   r»   r¹   r  rº   r»   r  rû   )r.   ÚrepeatrÂ   rÃ   râ   r   ry   Ú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)rI   rJ   rK   Ú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)rI   rJ   rK   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ƒ}|s¢t t |j	¡dk ¡r’t
 ¡ � 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� |�sêt|jd |j dd� t|j!d |j"dd� d S )Nr  ÚirfZdrfrY   ÚmlrÛ   rù   çH¯¼šò×z>)ÚgtolrY   r   r   )rY   r.  r§   r�   r’   r\   r]   )#r   r   r   r!   r    r'   r.   Úanyr®   r*   r  r  r  ry   rÿ   r   rr   r‰   r«   r   Úarrayri   r   r   r   r+   rP   r)   Ú
cov_paramsræ   r   Úrandom_effectsr-   Úrandom_effects_covr   )rY   r+  r?   r>   r=   r‡   r  ÚmdfrP   rQ   r§   r   r   r   Údo1<  sX    



  ÿ  ÿ  ÿr5  r   c                 C   s$   g | ]}|  d ¡r| d¡r|‘qS )Zlmez.csv)r#   Úendswithr   r   r   r   r   x  s     
 
 r   rB   rY   FTr+  c                 C   s    t | dd… ƒ}t|||ƒ d S )Nr\   r[   )rì   r5  )rB   rY   r+  r?   r   r   r   Útest_r|  s    r7  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.   rn   ro   rp   rq   r”   rs   rÂ   rÃ   rt   rÿ   r   rÄ   ry   r­   r   rF   rü   rý   rþ   rS   r:   Útolistr¯   Útvaluesr1  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_fullrS   r¯   r:  r1  Zfer;  r   Zcov_re_ur<  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.   rn   ro   rp   rq   rr   r”   r   ry   r2  r   Ú
isinstanceÚdictr   rÂ   ÚSeriesZlinspace)ZngrprŸ   ZrsdZgsdZmnZgmnr¹   rŠ   r   rU   rÍ   r�   ZxrZqpr   r   r   Útest_random_effectsº  sF    rA  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Úc2é2   r]   )rE  r�   )r]   r   r   r   r\   r�   )r   r¹   )r]   rB  )r\   rº   )r�   r¼   )r[   rC  )r  rD  rë   z1 + z1z0 + c1z0 + c2ra   )FTrÀ   rÁ   rù   rÚ   Zdrop)r    rF   Úmissing) r.   rn   ro   rp   rÂ   rÃ   rê   rq   r”   rr   r¼   rC  rD  ÚNaNÚlocÚcopyÚappendÚextendZdropnar  r  r  r   rÄ   ry   r
   rS   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




ÿ ÿÿÿ  ÿÿrN  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/}t	t
|ƒ|ƒ d S )0Nr   )Úsummary_colr   r]   r\   r�   r[   r  r  r‘   r  r  é   é   é   é   é   goƒÀÊ¡û?gd;ßO�—ð¿g¬Zd;@gZd;ßO�@gj¼t“„@g‹lçû©ñ@g°rh‘íü@g®Gáz@gåÐ"Ûù~@g�Âõ(\O$@gÍÌÌÌÌÌ$@gD‹lçû)1@g-²�ï§F1@g`åÐ"Ûù-@g-²�ïç,@)ÚYÚXÚIDSg@{ÂŽFô¿gà~eJ�–ò?g¥Í£¨TÉ?úY ~ XrW  rû   r÷   g&™ÍÊ“ß@gô×ñ€.±á?gÛ<H.ƒ*ö?zX ~ YT)Ústarsa£  
=============================
              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.summary2rO  r.   r0  rÂ   rÃ   r   rÄ   ry   r	   Ústr)rO  Zidsr   r¹   ÚdZsp1r  Zresults1Zsp2r  Zresults2ÚoutÚsr   r   r   Útest_summary_col   s>    ""             þ
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�sàt‚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�s‚t‚�q‚d S )Niº…  iô  r  r]   r^   r   rž   r\   r   )r   r   úg%d)r¹   r  rº   Úz0r¼   Úv0r¾   rB  )Zaxiszy ~ x0 + x1z~0 + z0 + z1z~0+C(v0)z0+C(v1))ra  r¾   rB  )rÀ   rÁ   r    rF   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   rb  rc  r   r   r   •  s     r�   )r.   rn   ro   rt   rp   rz   ZflatrJ  rq   rË   rr   Zastyperì   ZconcatenaterÂ   rÃ   r9   r   rÄ   ry   r2  Zcorrcoefr�   r3  Úkeysr_   rÿ   )ÚngÚmr¹   r   Úzra  r¾   rB  rc   Zc0rC  r%   ZxxÚyyÚzzZbbZvv0Zcc0Zvv1Zcc1rÇ   ÚccrU   rÍ   Zb0Zcf0r¢   ZrefcÚpr   rc  r   Útest_random_effects_gettersB  sŒ    ("
"

"










ø


þø	
22
6
rm  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.   rn   rp   rz   r{   r¬   Úuniformr®   ÚlinalgÚinvZsolver«   r   r
   r   Z
csr_matrix)rl  ÚqÚrr]  r[  ÚAÚAtAÚBÚdiÚQir   Úy2rV   Úy1r   r   r   Úcheck_smw_solver¡  s&    "0
ÿrz  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.   rn   ro   ©r  r   r   r   r  ¾  s    zTestSMWSolver.setup_classrl  r[   r  rq  r�   r‘   rr  r]   r\   r]  r   rž   c                 C   s   t ||||ƒ d S ©N)rz  ©r<   rl  rq  rr  r]  r   r   r   Útest_smw_solverÂ  s    zTestSMWSolver.test_smw_solverN)	rI   rJ   rK   r)  r  rv   r  r  r‚  r   r   r   r   r{  ½  s   
r{  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-  rl   )r.   rn   rp   rz   r{   r¬   rn  r®   ro  rp  Zslogdetr«   r   r   r
   )rl  rq  rr  r]  r[  rs  rt  ru  Úcrv  rw  Ú_Zd2ZbdZd1rm   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 r|  r~  r  r   r   r   r  â  s    zTestSMWLogdet.setup_classrl  r[   r  rq  r�   r‘   rr  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)	rI   rJ   rK   r)  r  rv   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�}| ¡ }| ¡  |sŽt d¡ W 5 Q R X d S )Ni_  r�   r]   rU  rV  ré   c                 S   s   g | ]}|d  ‘qS )r\   r   )r   r%   r   r   r   r   ö  s     z!test_singular.<locals>.<listcomp>r¸   ÚclassrX  rû   zwarning expected)r.   rn   ro   ZrandnrÂ   rÃ   r@  r:   rv   rw   ÚWarningr   rÄ   ry   r­   r€   )rÆ   rF   rÇ   Zwrnr  r4  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 + z5ra   zy ~ 0 + x1 + x2r�  z0 + z0 + z1r¿   )r‰   r   ri   TFrj   rª   r¨   )rm   r©   )r.   rn   ro   rË   r9   rp   r  r”   rì   rz   ro  Zcholeskyr{   Úsqrtrs   rÂ   rÃ   r   rÄ   ÚstatsmodelsZ
regressionZmixed_linear_modelr   r|   r}   r   Úget_distributionZrvsZmeanr
   Úvar)rÆ   Zn_groupsr‰   r   ri   r   r!   r'   Zexog_vcaZexog_vcbr    ZeyÚuÚu1Úu2r¹   rÇ   rÈ   rg  r�  ÚmpÚpoÚpaÚdistÚyrÚvr   r   r   Útest_get_distribution   sh    

ÿ  " þ
 þ
ÿ
r›  )=Zstatsmodels.compat.platformr   r/   r6   r  Únumpyr.   ZpandasrÂ   Zscipyr   rv   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   rW   rX   r  r*  r5  r0   r1   r2   r3   r@   r4   rA   ÚlistdirÚfnamesr  r  r7  r=  rA  r  rN  r^  rm  rz  r{  r…  r†  rŠ  r›  r   r   r   r   Ú<module>   sX   3     ',9
3-
8"
^