U
    Kvf>                     @   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resultszvarname        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
zvarname      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-16zvarname 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{Gz?rtolatolzdifferent from expectednpZallcloseAssertionErrorlist)abepsname r   H/tmp/pip-unpacked-wheel-2v6byqio/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EstimateMbP?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 )Nr5   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Ơ>gh㈵>)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 )NvIh%<=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Ő/`<g3T qN@g!Ly	Z@g1wEU@)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:0yE>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   gpM-`4?gYy0?gH;a8?gﭣmh2?g;2?g`<6?   gHz>F)	transformZ	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dfmaZ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   Z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       ^ /