U
    Ãmœdó>  ã                   @   sj  d dl mZ d dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
Zd dlZd dlmZ d dlmZ d dlmZ ddlmZ ejZej ej e¡¡Zej ed	¡Zd
ZdZdZ dZ!ej"e #e¡dd�Z$ej"e #e¡dd�Z%ej"e #e ¡dd�Z&ej"e #e!¡dd�Z'e (ej ed¡¡Z)e (ej ed¡¡Z*dd„ Z+dd„ Z,G dd„ dƒZ-G dd„ dƒZ.G dd„ dƒZ/dS )é    )Úprint_functionN)Úassert_allcloseÚassert_equal)Úfamilies)ÚValueWarning)Ú	BetaModelé   )Úresults_betaregÚresultszèvarname        Estimate  StdError   zvalue     Pr(>|z|)
(Intercept) -0.62254806 0.223853539 -2.781051 5.418326e-03
income      -0.01229884 0.003035585 -4.051556 5.087819e-05
persons      0.11846210 0.035340667  3.352005 8.022853e-04z`varname  Estimate StdError  zvalue     Pr(>|z|)
(phi) 35.60975   8.079598 4.407366 1.046351e-05
zïvarname      Estimate StdError zvalue Pr(>|z|)
(Intercept)  1.44224    0.03401  42.404   2e-16
genderM      0.06986    0.04359   1.603    0.109
CpGCpG_1     0.60735    0.04834  12.563   2e-16
CpGCpG_2     0.97355    0.05311  18.331   2e-16z‹varname Estimate StdError zvalue Pr(>|z|)
(Intercept)  8.22829    1.79098   4.594 4.34e-06
age         -0.03471    0.03276  -1.059    0.289z\s+)Úsepzfoodexpenditure.csvzmethylation-test.csvc                 C   s.   t j| |d|d�s*td|t| ƒt|ƒfƒ‚d S )Nç{®Gáz„?©ÚrtolÚatolzdifferent from expected©ÚnpZallcloseÚAssertionErrorÚlist)ÚaÚbÚepsÚname© r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/othermod/tests/test_beta.pyÚ
check_same?   s    ÿr   c                 C   s*   t j| |d|d�s&tt| ƒt|ƒfƒ‚d S )Nr   r   r   )r   r   r   r   r   r   Úassert_closeD   s    r   c                   @   sP   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestBetaModelc                 C   sv   d}t  |t¡ ¡ | _d }| _t dt¡ }| _	t j|t|t
 ¡ d�}| ¡ | _t j|t|t
 ¡ d�}| ¡ | _d S )Nú!I(food/income) ~ income + personsúmethylation ~ gender + CpGú~ age©Úexog_precisionÚlink_precision)r   Úfrom_formulaÚincomeÚfitÚ
income_fitÚmodelÚpatsyÚdmatrixÚmethylationÚZÚlinksÚIdentityÚmeth_fitÚLogÚmeth_log_fit)Úclsr'   r+   Úmodr   r   r   Úsetup_classJ   s    

ÿ

ÿzTestBetaModel.setup_classc                 C   sX   | j }t|jd d… td dƒ t|jd d… td dƒ t|jd d… td dƒ d S )NéÿÿÿÿÚEstimateçü©ñÒMbP?Úzvalueçš™™™™™¹?úPr(>|z|))r&   r   ÚparamsÚexpected_income_meanÚtvaluesÚpvalues©ÚselfÚrsltr   r   r   Útest_income_coefficientsX   s    z&TestBetaModel.test_income_coefficientsc                 C   sD   | j }tt |jdd … ¡td dƒ t|jdd … td dƒ d S )Nr4   r5   r6   r9   )r&   r   r   Úexpr:   Úexpected_income_precisionr=   r>   r   r   r   Útest_income_precision^   s     ÿ ÿz#TestBetaModel.test_income_precisionc                 C   sX   | j }t|jd d… td dƒ t|jd d… td dƒ t|jd d… td dƒ d S )Néþÿÿÿr5   r   r7   r8   r9   )r.   r   r:   Úexpected_methylation_meanr<   r=   r>   r   r   r   Útest_methylation_coefficientsi   s     ÿ ÿ ÿz+TestBetaModel.test_methylation_coefficientsc                 C   s(   | j }t|jdd … td ddd� d S )NrE   r5   çñhãˆµøä>ç»½×Ùß|Û=©r   r   )r0   r   r:   Úexpected_methylation_precisionr>   r   r   r   Útest_methylation_precisionr   s     þz(TestBetaModel.test_methylation_precisionc              	   C   s|   t j| jtdt ¡ d�}| ¡ }t|j| j	jdƒ t
|jtjƒsDt‚tjtdd��  t j| jtdt ¡ dd� W 5 Q R X d S )Nr   ©Úexog_precision_formular"   rI   zunknown kwargs)ÚmatchF)rN   r"   Zjunk)r   r#   r'   r*   r,   r-   r%   r   r:   r.   Ú
isinstanceÚpdZSeriesr   ÚpytestZwarnsr   )r?   Úmr@   r   r   r   Útest_precision_formula~   s    
þ
ýz$TestBetaModel.test_precision_formulac                 C   s¢   | j | j }}t ¡ t ¡ fD ]~}tj|t||d�}| ¡ }|j  	|j
d ¡}|j  |j
d ¡}t||ddd� t| |dd … ¡| |dd … ¡ddd� qd S )Nr    g)\�Âõ(ð?ç�íµ ÷Æ°>r   é   g�íµ ÷Æ >gñhãˆµøÔ>)r'   r+   r,   r-   r/   r   r#   r*   r%   Zscorer:   Z_score_checkr   Zinverse)r?   r'   r+   ÚlinkZmod2Zrslt_mZ
analyticalZ	numericalr   r   r   Útest_scoresŒ   s    
ÿ  ÿzTestBetaModel.test_scoresc                 C   s|   | j }| ¡ }| ¡ \}}t|j|dd� t|j |j¡|dd� |jj| }t|j	|dd� t|j
|t |¡ dd� d S )Nç‚vIhÂ%<=©r   gê-�™—q=)r.   Úget_distributionÚstatsr   Úfittedvaluesr'   Ú_predict_varr:   ÚendogÚresidZresid_pearsonr   Úsqrt)r?   r@   ÚdistrÚmeanÚvarr`   r   r   r   Útest_results_otherš   s    z TestBetaModel.test_results_otherN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr3   rA   rD   rG   rL   rT   rX   re   r   r   r   r   r   H   s   
	r   c                   @   s8   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestBetaMethc                 C   s4   d}t j|tdt ¡ d�}|jdd�| _tj| _	d S )Nr   r   rM   Zeim)Úcov_type)
r   r#   r*   r,   r/   r%   Úres1ÚresultsbZresults_methÚres2)r1   Úformular2   r   r   r   r3   ¨   s    þzTestBetaMeth.setup_classc                 C   sÎ  | j }| j}d}|jj\}}}}t|jd |… |dd� t|jd |… |dd� t|jd |… |dd� t|jd |… |dd� |j	j\}}}}t|j|d … |dd� t|j|d … |dd� t|j|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ƒ t|j|jƒ |j|j }t|jdƒ d	}d
}	d}
d}d}t||ƒ t|j
|
dd� t|j|	dd� t|j|dd� t|j|dd� d S )Né   rU   rZ   rH   rI   r   )r   é   gœ²Å�/¥`<gÑ3T ­qN@gõ!Ly	Z@g1¶ïwE¡U@)rl   rn   Z
table_meanÚTr   r:   Úbser<   r=   Ztable_precisionÚllfZloglikZaicZbicZ	prsquaredZpseudo_r_squaredr   Zdf_residZdf_residualZnobsZdf_resid_nullZk_nullZllnullZllrZ
llr_pvalue)r?   rl   rn   Úk_meanÚpÚseÚzvÚpvZdf_cZllnrt   ZchisqZdfcr   r   r   Ú
test_basic±   s>    
zTestBetaMeth.test_basicc                 C   s>   | j }| j}t|j|jd dd� t|j|jd ddd� d S )Nr]   g:Œ0âŽyE>rZ   ÚresponserJ   )rl   rn   r   r]   r`   )r?   rl   rn   r   r   r   Ú
test_residÛ   s    ÿ ÿzTestBetaMeth.test_residc                 C   sü   | j j ¡ }| j}d}|jj\}}}}t|jd |… |dd� t|jd |… |dd� t|j	d |… |dd� t|j
d |… |ddd� |jj\}}}}t|j|d … |dd� t|j|d … |dd� t|j	|d … |dd� t|j
|d … |dd� d S )Nrp   rU   rZ   rH   rJ   r6   r   )rl   r'   r%   rn   Ztable_mean_oimrr   r   r:   rs   r<   r=   Ztable_precision_oim)r?   rl   rn   ru   rv   rw   rx   ry   r   r   r   Útest_oimã   s    zTestBetaMeth.test_oimc                  C   s´  | j }| ¡ }|j |j¡}| ¡ }| ¡ \}}t||dd� t||dd� ddddddg}d	}t|d |… |d
d� |jjd |… }	|jj	d |… }
|j|	dd�}|jdd�}|j|
ddd�}|jj|j|	|
d�}t||d |… dd� t||d |… dd� t||d |… dd� t||d
d� |jj|j|	|
d�}| ¡ \}}t||d |… dd� t||d |… dd� |j|	|
dd�}| ¡ \}}t||d |… dd� t||d |… dd� t
jd d	… }| |¡}t||d |… dd� |j||
d�}| ¡ \}}t||d |… dd� t||d |… dd� t|jd tjƒ�sDt‚|jddd�}| ¡ }t|j| ¡ dd� t|jdƒ |j|ddd�}| ¡ }t|j|dd� t|jdƒ |j||
ddd�}| ¡ }t|j|dd� t|jdƒ |jddd� |jddd� |j|
ddd� |jddd� |j|ddd�}| ¡ }t t|jjƒ¡}d|d d	…< || ¡  }|j|ddd�}| ¡ }|jdd|d�}| ¡ }t|j|jdd� t||dd� d S ) NrY   rZ   gp™MÊ-`4?gYçy0?g­ÓH;a8?gœï­£mh2?g¨;ý¼ü2?gºèì`<6?é   gH¯¼šò×z>F)Ú	transformÚ	precision)Úwhich)r!   r�   r   )Úexogr!   )r‚   r!   r   r   rc   T)r�   Úaverage)r   rp   )r‚   r�   rƒ   )r~   rp   rd   )r‚   r!   r�   rƒ   Zlinear)r!   r�   rƒ   zlinear-precisionr   )r�   rƒ   Zagg_weights)rl   Zpredictr'   r^   r:   r[   r\   r   r‚   r!   r*   ZilocrP   Úargsr   Zndarrayr   Zget_predictionÚsummary_frameZ	predictedrc   r   ÚshapeÚzerosÚlenr_   ) r?   rl   rc   Zvar_rb   Úm2Zv2Zvar_r6ÚnÚexZex_precZmean6ÚprecZprec6Zvar6Zdistr6Zm26Zv26Zdistr6fZdf6Zmean6fZpmaZdfmaÚpmZdfmry   ZdfvZawZpm6Zdfm6ZpmwZdfmwr   r   r   Útest_predict_distributionö   s¦        þÿÿ
 ÿÿ
 ÿÿz&TestBetaMeth.test_predict_distributionN)	rf   rg   rh   ri   r3   rz   r|   r}   rŽ   r   r   r   r   rj   ¦   s   
*rj   c                   @   s(   e Zd Zedd„ ƒZdd„ Zdd„ ZdS )ÚTestBetaIncomec                 C   sb   d}t  dt¡}tj|t|t ¡ d�}|jdd�}tj|tt ¡ d�}|jdd�}|| _|| _	d S )Nr   z	~ personsr    Znewton)Úmethod)r"   )
r(   r)   r$   r   r#   r,   r/   r%   rl   Úresr)r1   ro   Z	exog_precZ
mod_incomeZ
res_incomeZmod_restrictedZres_restrictedr   r   r   r3   V  s"    üýzTestBetaIncome.setup_classc                 C   sÖ   | j }| j}t |jdgg¡}t dt|ƒf¡}d|d< |jjd d …dd …f }ddl	m
} |||dd�}||d |fd�}t|d d… |d d… ƒ |||d|dd	�}	||d |fdd
�}
t|
d d… |	d d… ƒ d S )Nr   r   )r   r4   )Ú
score_test)Úparams_constrainedÚk_constraints)Ú
exog_extrarq   ZHC0)r“   r”   Úr_matrixrk   )r•   rk   )rl   r‘   r   Zconcatenater:   r‡   rˆ   r'   r!   Z%statsmodels.base._parameter_inferencer’   r   )r?   rl   r‘   Zparams_restrr–   Zexog_prec_extrar’   Zsc1Zsc2Zsc1_hcZsc2_hcr   r   r   Útest_score_testm  s*    ÿ  ÿ
ÿzTestBetaIncome.test_score_testc           	      C   sl   | j }ddlm} ||ƒ}| ¡ }ddddddd	g}|D ]}t||ƒ q8| ¡ }| ¡ }t||d
d
d� d S )Nr   )ÚMLEInfluenceZcooks_distanceZd_fittedvaluesZd_fittedvalues_scaledZd_paramsZdfbetasZhat_matrix_diagZresid_studentizedrY   r   )rl   Z$statsmodels.stats.outliers_influencer˜   Zget_influenceÚgetattrr…   r   )	r?   rl   r˜   Zinflu0ZinfluÚattrsÚattrÚframeZframe0r   r   r   Útest_influence�  s       ÿzTestBetaIncome.test_influenceN)rf   rg   rh   ri   r3   r—   r�   r   r   r   r   r�   T  s   
r�   )0Ú
__future__r   ÚioÚosrR   Únumpyr   Znumpy.testingr   r   ZpandasrQ   r(   Zstatsmodels.apir   Zstatsmodels.tools.sm_exceptionsr   Zstatsmodels.othermod.betaregr   r
   r	   rm   r,   ÚpathÚdirnameÚabspathÚ__file__Zcur_dirÚjoinZres_dirZ_income_estimates_meanZ_income_estimates_precisionZ_methylation_estimates_meanZ _methylation_estimates_precisionZ
read_tableÚStringIOr;   rC   rF   rK   Zread_csvr$   r*   r   r   r   rj   r�   r   r   r   r   Ú<module>   sT    ÿ ÿ ÿ ÿ^ /