
    M/Ph>                     ,   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 j!        e          d          Z" e	j          e j!        e          d          Z# e	j          e j!        e          d          Z$ e	j          e j!        e          d          Z% e	j&        ej                            ed                    Z' e	j&        ej                            ed                    Z(d Z)d Z* G d d          Z+ G d d          Z, G d d          Z-dS )    N)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                     t          j        | |d|          s(J d|t          |           t          |          f            d S )N{Gz?rtolatolzdifferent from expectednpallcloselist)abepsnames       d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/othermod/tests/test_beta.py
check_samer   >   sZ    ;q!$S111 @ @&d1ggtAww?@ @ @ @ @    c                     t          j        | |d|          s&J t          |           t          |          f            d S )Nr   r   r   )r   r   r   s      r   assert_closer   C   s@    ;q!$S111EEDGGT!WW3EEEEEEr   c                   N    e Zd Zed             Zd Zd Zd Zd Zd Z	d Z
d Zd	S )
TestBetaModelc                    d}t          j        |t                                                    | _        dx}| _        t          j        dt                    x}| _	        t          j        |t          |t                                                    }|                                | _        t          j        |t          |t                                                    }|                                | _        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/   mods       r   setup_classzTestBetaModel.setup_classI   s    3"/v>>BBDD88	M';777CE$UK49NN4D4DF F Fwwyy$UK49IIKKA A A7799r   c                 
   | 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rslts     r   test_income_coefficientsz&TestBetaModel.test_income_coefficientsW   sx    T["%';J'GNNNT\#2#&(<X(FLLLT\#2#&(<Z(H$OOOOOr   c                     | j         }t          t          j        |j        dd                    t
          d         d           t          |j        dd          t
          d         d           d S )Nr9   r:   r;   r>   )r*   r   r   expr?   expected_income_precisionrB   rC   s     r   test_income_precisionz#TestBetaModel.test_income_precision]   sy    RVDK,--.z:D	B 	B 	B 	T\"##&.z:D	B 	B 	B 	B 	Br   c                 
   | j         }t          |j        d d         t          d         d           t          |j        d d         t          d         d           t          |j        d d         t          d         d           d S )Nr:   r   r<   r=   r>   )r2   r   r?   expected_methylation_meanrA   rB   rC   s     r   test_methylation_coefficientsz+TestBetaModel.test_methylation_coefficientsh   s    }T["%.z:D	B 	B 	BT\#2#&.x8#	? 	? 	?T\#2#&.z:D	B 	B 	B 	B 	Br   c                 j    | j         }t          |j        dd          t          d         dd           d S )NrL   r:   h㈵>绽|=r   r   )r4   r   r?   expected_methylation_precisionrC   s     r   test_methylation_precisionz(TestBetaModel.test_methylation_precisionq   sE     BCC(6zB!	/ 	/ 	/ 	/ 	/ 	/r   c                    t          j        | j        t          dt                                                    }|                                }t          |j        | j	        j        d           t          |j        t          j                  sJ t          j        t          d          5  t          j        | j        t          dt                                          d           d d d            d S # 1 swxY w Y   d S )Nr#   exog_precision_formular&   rQ   zunknown kwargs)matchF)rW   r&   junk)r   r'   r+   r.   r0   r1   r)   r   r?   r2   
isinstancepdSeriespytestwarnsr   )rD   mrE   s      r   test_precision_formulaz$TestBetaModel.test_precision_formula}   s!   "4:{:A27..2B2BD D D uuwwT[$-"6>>>$+ry11111\,.>??? 	/ 	/"4:{:A27..2B2B(-/ / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   *;C22C69C6c           	      .   | j         | j        }}t                                          t                                          fD ]}t          j        |t          ||          }|                                }|j         	                    |j
        dz            }|j                             |j
        dz            }t          ||dd           t          |                    |dd                    |                    |dd                    dd           d S )Nr$   g)\(?ư>r      gƠ>gh㈵>)r+   r/   r0   r1   r3   r   r'   r.   r)   scorer?   _score_checkr   inverse)rD   r+   r/   linkmod2rslt_m
analytical	numericals           r   test_scoreszTestBetaModel.test_scores   s   :tvq^^%%uyy{{3 
	O 
	OD)%Q9=? ? ?DXXZZF  ++FMD,@AAJ11&-$2FGGIJ	4HHHHDLLABB88 LL12277dO O O O O
	O 
	Or   c                    | j         }|                                }|                                \  }}t          |j        |d           t          |j                            |j                  |d           |j        j        |z
  }t          |j	        |d           t          |j
        |t          j        |          z  d           d S )NvIh%<=r   g-q=)r2   get_distributionstatsr   fittedvaluesr+   _predict_varr?   endogresidresid_pearsonr   sqrt)rD   rE   distrmeanvarru   s         r   test_results_otherz TestBetaModel.test_results_other   s    }%%''KKMM	c)4e<<<<
//<<cNNNN
 4'
E6666*EBGCLL,@uMMMMMMr   N)__name__
__module____qualname__classmethodr7   rF   rJ   rN   rT   r`   rl   r{    r   r   r   r   G   s        % % [%P P P	B 	B 	BB B B/ / // / /O O O	N 	N 	N 	N 	Nr   r   c                   <    e Zd Zed             Zd Zd Zd Zd ZdS )TestBetaMethc                     d}t          j        |t          dt                                                    }|                    d          | _        t          j        | _	        d S )Nr"   r#   rV   eim)cov_type)
r   r'   r.   r0   r3   r)   res1resultsbresults_methres2)r5   formular6   s      r   r7   zTestBetaMeth.setup_class   sX    .$Wk<C49IIKKA A A 77E7**(r   c                    | j         }| j        }d}|j        j        \  }}}}t	          |j        d |         |d           t	          |j        d |         |d           t	          |j        d |         |d           t	          |j        d |         |d           |j	        j        \  }}}}t	          |j        |d          |d           t	          |j        |d          |d           t	          |j        |d          |d           t	          |j        |d          |d           t	          |j
        |j        d           t	          |j        |j        d           t	          |j        |j        d           t	          |j        |j        d           t!          |j        |j                   t!          |j        |j                   |j        |j        z
  }t!          |j        d           d	}d
}	d}
d}d}t!          ||           t	          |j
        |
d           t	          |j        |	d           t	          |j        |d           t	          |j        |d           d S )N   rb   ro   rP   rQ   r   )r      gŐ/`<g3T qN@g!Ly	Z@g1wEU@)r   r   
table_meanTr   r?   bserA   rB   table_precisionllfloglikaicbic	prsquaredpseudo_r_squaredr   df_residdf_residualnobsdf_resid_nullk_nullllnullllr
llr_pvalue)rD   r   r   k_meanpsezvpvdf_cllnr   chisqdfcs                r   
test_basiczTestBetaMeth.test_basic   sx   yy)2r2GVG,ad;;;;&)2D9999WfW-r====WfW-r====,.2r2FGG,ad;;;;)2D9999VWW-r====VWW-r====$+E::::$(7777$(7777(=DIIIIT]D$4555TY	*** !DM1T[!$$$ " !T3#E2222Su5555%e4444$777777r   c                     | j         }| j        }t          |j        |j        d         d           t          |j        |j        d         dd           d S )Nrr   g:0yE>ro   responserR   )r   r   r   rr   ru   )rD   r   r   s      r   
test_residzTestBetaMeth.test_resid   sk    yy)4:n+E!	# 	# 	# 	#
DJz$:!	. 	. 	. 	. 	. 	.r   c                    | j         j                                        }| j        }d}|j        j        \  }}}}t          |j        d |         |d           t          |j        d |         |d           t          |j	        d |         |d           t          |j
        d |         |dd           |j        j        \  }}}}t          |j        |d          |d           t          |j        |d          |d           t          |j	        |d          |d           t          |j
        |d          |d           d S )Nr   rb   ro   rP   rR   r;   r   )r   r+   r)   r   table_mean_oimr   r   r?   r   rA   rB   table_precision_oim)rD   r   r   r   r   r   r   r   s           r   test_oimzTestBetaMeth.test_oim   sQ   y""$$y+-2r2GVG,ad;;;;&)2D9999WfW-r====WfW-r4HHHH022r2FGG,ad;;;;)2D9999VWW-r====VWW-r======r   c                 R   | j         }|                                }|j                            |j                  }|                                }|                                \  }}t          ||d           t          ||d           g d}d}t          |d |         |d           |j        j        d |         }	|j        j	        d |         }
|                    |	d          }|                    d	          }|                    |
dd
          }|j                            |j        |	|
          }t          ||d |         d           t          ||d |         d           t          ||d |         d           t          ||d           |j                            |j        |	|
          }|                                \  }}t          ||d |         d           t          ||d |         d           |                    |	|
d          }|                                \  }}t          ||d |         d           t          ||d |         d           t          j        d d         }|                    |          }t          ||d |         d           |                    ||
          }|                                \  }}t          ||d |         d           t          ||d |         d           t          |j        d         t          j                  sJ |                    dd          }|                                }t          |j        |                                d           t)          |j        d           |                    |dd          }|                                }t          |j        |d           t)          |j        d           |                    ||
dd          }|                                }t          |j        |d           t)          |j        d           |                    dd           |                    dd           |                    |
dd           |                    dd           |                    |dd          }|                                }t          j        t/          |j        j                            }d|d d<   ||                                z  }|                    |dd          }|                                }|                    dd|          }|                                }t          |j        |j        d           t          ||d           d S )Nrn   ro   )gpM-`4?gYy0?gH;a8?gﭣmh2?g;2?g`<6?   gHz>F)	transform	precision)which)r%   r   r   )exogr%   )r   r%   r   r   ry   T)r   average)r   r   )r   r   r   )r   r   rz   )r   r%   r   r   linear)r%   r   r   zlinear-precisionr   )r   r   agg_weights)r   predictr+   rs   r?   rp   rq   r   r   r%   r.   ilocrZ   argsr   ndarrayget_predictionsummary_frame	predictedry   r   shapezeroslenrt   ) rD   r   ry   var_rx   m2v2var_r6nexex_precmean6precprec6var6distr6m26v26distr6fdf6mean6fpmadfmapmdfmr   dfvawpm6dfm6pmwdfmws                                    r   test_predict_distributionz&TestBetaMeth.test_predict_distribution   s   y||~~z&&t{33%%''Bbu----bu----K K K 2A2T2222Z_RaR *+BQB/R511||+|..G;',  . .z&&t{6= ' ? ? 	tBQBxe4444tBQBxe4444d2A2hU3333f40000,,T[24W - N N<<>>SRV%0000RV%0000''R27 ( 9 9==??SRV%0000RV%0000 rr"c"" 	RaRu5555 ''S'II==??SRV%0000RV%0000',q/2:66666 !!!==  ""tyy{{????TZ(((  c GG  e%8888SY'''  c'',e ! = =  d7777SY'''(E:::+t<<<7+$) 	 	+ 	+ 	+"4dCCC   c FF  Xc$**++,,2A2
bggii!!s&$!GG  ""!!"!MM  ""s}5AAAAd//////r   N)	r|   r}   r~   r   r7   r   r   r   r   r   r   r   r   r      so        ) ) [)(8 (8 (8T. . .> > >&[0 [0 [0 [0 [0r   r   c                   0    e Zd Zed             Zd Zd ZdS )TestBetaIncomec                    d}t          j        dt                    }t          j        |t          |t
                                                    }|                    d          }t          j        |t          t
                                                    }|                    d          }|| _        || _	        d S )Nr!   z	~ personsr$   newton)method)r&   )
r,   r-   r(   r   r'   r0   r3   r)   r   resr)r5   r   	exog_prec
mod_income
res_incomemod_restrictedres_restricteds          r   r7   zTestBetaIncome.setup_classU  s     6M+v66	+$ 99;;	  
  ^^8^44
"/ 99;;  
 (++8+<<!r   c                    | j         }| j        }t          j        |j        dgg          }t          j        dt          |          f          }d|d<   |j        j        d d dd f         }ddl	m
}  |||d          } ||d |f          }t          |d d         |d d                     |||d|d	          }	 ||d |fd
          }
t          |
d d         |	d d                    d S )Nr   r   )r   r9   )
score_test)params_constrainedk_constraints)
exog_extrar   HC0)r   r   r_matrixr   )r   r   )r   r   r   concatenater?   r   r   r+   r%   %statsmodels.base._parameter_inferencer   r   )rD   r   r   params_restrr   exog_prec_extrar   sc1sc2sc1_hcsc2_hcs              r   test_score_testzTestBetaIncome.test_score_testl  s<   yy~t{QC&8998QL 1 1233*3AAAqrrE:DDDDDDj,'(* * *j4*ABBBBQBRaR)))D\*+hP P PDdO-D%*, , ,rr
F2A2J/////r   c                    | j         }ddlm}  ||          }|                                }g d}|D ]}t	          ||           |                                }|                                }t          ||dd           d S )Nr   )MLEInfluence)cooks_distanced_fittedvaluesd_fittedvalues_scaledd_paramsdfbetashat_matrix_diagresid_studentizedrn   r   )r   $statsmodels.stats.outliers_influencer   get_influencegetattrr   r   )	rD   r   r   influ0influattrsattrframeframe0s	            r   test_influencezTestBetaIncome.test_influence  s    yEEEEEEd##""$$    	! 	!DE4    ##%%%%''vE>>>>>>r   N)r|   r}   r~   r   r7   r   r  r   r   r   r   r   S  sK        " " [",0 0 0(? ? ? ? ?r   r   ).ioosr]   numpyr   numpy.testingr   r   pandasr[   r,   statsmodels.apir   statsmodels.tools.sm_exceptionsr   statsmodels.othermod.betaregr   r
   r	   r   r0   pathdirnameabspath__file__cur_dirjoinres_dir_income_estimates_mean_income_estimates_precision_methylation_estimates_mean _methylation_estimates_precision
read_tableStringIOr@   rI   rM   rS   read_csvr(   r.   r   r   r   r   r   r   r   r   <module>r$     s   				 				      7 7 7 7 7 7 7 7      $ $ $ $ $ $      3 2 2 2 2 2 0 0 0 0 0 0
'//"'//(33
4
4
',,w	
*
*>  
3 $4   %r}BK&''V5 5 5 )BMBK+,,&: : :  *BMBK+,,&: : : !.BK011v"? "? "?  
RW\\'+@AA	B	Bbk"',,w0FGGHH@ @ @
F F F[N [N [N [N [N [N [N [N|k0 k0 k0 k0 k0 k0 k0 k0\<? <? <? <? <? <? <? <? <? <?r   