
    !g>                     T   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*                  j-                  ej*                  j/                  e            Zej*                  j5                  ed      Zd	Zd
ZdZdZ e	j@                   e jB                  e      d      Z" e	j@                   e jB                  e      d      Z# e	j@                   e jB                  e      d      Z$ e	j@                   e jB                  e      d      Z% e	jL                  ej*                  j5                  ed            Z' e	jL                  ej*                  j5                  ed            Z(d Z)d Z* G d d      Z+ G d d      Z, G d d      Z-y)    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                 p    t        j                  | |d|      sJ d|t        |       t        |      f       y )N{Gz?rtolatolzdifferent from expectednpallcloselist)abepsnames       a/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/othermod/tests/test_beta.py
check_samer   >   s7    ;;q!$S1 @&d1gtAw?@1    c                 l    t        j                  | |d|      sJ t        |       t        |      f       y )Nr   r   r   )r   r   r   s      r   assert_closer   C   s,    ;;q!$S1EDGT!W3EE1r   c                   F    e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
d Zy	)
TestBetaModelc                    d}t        j                  |t              j                         | _        dx}| _        t        j                  dt              x}| _	        t        j                  |t        |t        j                               }|j                         | _        t        j                  |t        |t        j                               }|j                         | _        y )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88	MM';77CE$$UK49NN4DFwwy$$UK49IIKA779r   c                     | j                   }t        |j                  d d t        d   d       t        |j                  d d t        d   d       t        |j
                  d d t        d   d       y )NEstimateMbP?zvalue皙?Pr(>|z|))r*   r   paramsexpected_income_meantvaluespvaluesselfrslts     r   test_income_coefficientsz&TestBetaModel.test_income_coefficientsW   sb    T[["%';J'GNT\\#2&(<X(FLT\\#2&(<Z(H$Or   c                     | j                   }t        t        j                  |j                  dd        t
        d   d       t        |j                  dd  t
        d   d       y )Nr9   r:   r;   r>   )r*   r   r   expr?   expected_income_precisionrB   rC   s     r   test_income_precisionz#TestBetaModel.test_income_precision]   sV    RVVDKK,-.z:D	B 	T\\"#&.z:D	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       y )Nr:   r   r<   r=   r>   )r2   r   r?   expected_methylation_meanrA   rB   rC   s     r   test_methylation_coefficientsz+TestBetaModel.test_methylation_coefficientsh   sj    }}T[["%.z:D	BT\\#2&.x8#	?T\\#2&.z:D	Br   c                 b    | j                   }t        |j                  dd  t        d   dd       y )NrL   r:   h㈵>绽|=r   r   )r4   r   r?   expected_methylation_precisionrC   s     r   test_methylation_precisionz(TestBetaModel.test_methylation_precisionq   s/      BC(6zB!	/r   c                    t        j                  | j                  t        dt        j                               }|j                         }t        |j                  | j                  j                  d       t        |j                  t        j                        sJ t        j                  t        d      5  t        j                  | j                  t        dt        j                         d       d d d        y # 1 sw Y   y xY w)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..2BD uuwT[[$--"6"6>$++ryy111\\,.>? 	/""4::{:A27..2B(-/	/ 	/ 	/s   6;C::Dc           	         | j                   | j                  }}t        j                         t        j	                         fD ]  }t        j                  |t        ||      }|j                         }|j                   j                  |j                  dz        }|j                   j                  |j                  dz        }t        ||dd       t        |j                  |dd        |j                  |dd        dd        y )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    ::tvvq^^%uyy{3 
	OD))%Q9=?DXXZF  ++FMMD,@AJ11&--$2FGIJ	4HDLLAB8 LL127dO
	Or   c                    | j                   }|j                         }|j                         \  }}t        |j                  |d       t        |j
                  j                  |j                        |d       |j
                  j                  |z
  }t        |j                  |d       t        |j                  |t        j                  |      z  d       y )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    }}%%'KKM	c))4e<

//<cN

  4'

E6**EBGGCL,@uMr   N)__name__
__module____qualname__classmethodr7   rF   rJ   rN   rT   r`   rl   r{    r   r   r   r   G   s<    % %P	BB//O	Nr   r   c                   4    e Zd Zed        Zd Zd Zd Zd Zy)TestBetaMethc                     d}t        j                  |t        dt        j	                               }|j                  d      | _        t        j                  | _	        y )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   sI    .$$Wk<C49IIK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	        |j0                  |d       y )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   s   yyyy))2r2GV,ad;&)2D9Wf-r=Wf-r=,,..2r2FG,ad;)2D9VW-r=VW-r=$++E:$((7$((7(=(=DIT]]D$4$45TYY		* !!DMM1T[[!$ " !T3#E2Su5%e4$7r   c                     | j                   }| j                  }t        |j                  |j                  d   d       t        |j                  |j                  d   dd       y )Nrr   g:0yE>ro   responserR   )r   r   r   rr   ru   )rD   r   r   s      r   
test_residzTestBetaMeth.test_resid   sP    yyyy))4::n+E!	#

DJJz$:!	.r   c                    | j                   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       y )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   s   yy""$yy++--2r2GV,ad;&)2D9Wf-r=Wf-r4H00222r2FG,ad;)2D9VW-r=VW-r=r   c                 	   | j                   }|j                         }|j                  j                  |j                        }|j                         }|j                         \  }}t        ||d       t        ||d       g d}d}t        |d | |d       |j                  j                  d | }	|j                  j                  d | }
|j                  |	d      }|j                  d	      }|j                  |
dd
      }|j                  j                  |j                  |	|
      }t        ||d | d       t        ||d | d       t        ||d | d       t        ||d       |j                  j                  |j                  |	|
      }|j                         \  }}t        ||d | d       t        ||d | d       |j                  |	|
d      }|j                         \  }}t        ||d | d       t        ||d | d       t        j                  d d }|j                  |      }t        ||d | d       |j                  ||
      }|j                         \  }}t        ||d | d       t        ||d | d       t        |j                  d   t        j                        sJ |j!                  dd      }|j#                         }t        |j$                  |j'                         d       t)        |j*                  d       |j!                  |dd      }|j#                         }t        |j$                  |d       t)        |j*                  d       |j!                  ||
dd      }|j#                         }t        |j$                  |d       t)        |j*                  d       |j!                  dd       |j!                  dd       |j!                  |
dd       |j!                  dd       |j!                  |dd      }|j#                         }t        j,                  t/        |j                  j0                              }d|d d ||j'                         z  }|j!                  |dd      }|j#                         }|j!                  dd|      }|j#                         }t        |j$                  |j$                  d       t        ||d       y )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   yy||~zz&&t{{3%%'Bbu-bu-K 2AT2ZZ__Ra **++BQ/R51||+|.G;',  .zz&&t{{6= ' ? 	tBQxe4tBQxe4d2AhU3f40,,T[[24W - N<<>SRV%0RV%0''R27 ( 9==?SRV%0RV%0 r"c" 	Rau5 ''S'I==?SRV%0RV%0',,q/2::666 !!!=  "tyy{?TZZ(  c G e%8SYY'  c'',e ! = d7SYY'(E:+t<7+$) 	 	+"4dC   c F XXc$****+,2A
bggi!!s&$!G  "!!"!M  "s}}5Ad/r   N)	r|   r}   r~   r   r7   r   r   r   r   r   r   r   r   r      s*    ) )(8T.>&[0r   r   c                   (    e Zd Zed        Zd Zd Zy)TestBetaIncomec                 Z   d}t        j                  dt              }t        j                  |t        |t
        j                               }|j                  d      }t        j                  |t        t
        j                               }|j                  d      }|| _        || _	        y )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MM+v6	++$ 99;	
  ^^8^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        y )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    yyyy~~t{{QC&8988QL 123**33AqrE:D,'(*4*ABBQRa)D\*+hPDdO-D%*,r
F2AJ/r   c                     | j                   }ddlm}  ||      }|j                         }g d}|D ]  }t	        ||        |j                         }|j                         }t        ||dd       y )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  st    yyEd#""$  	!DE4 	! ##%%%'vE>r   N)r|   r}   r~   r   r7   r   r  r   r   r   r   r   S  s    " ",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   $ 3 0
''//"''//(3
4
'',,w	
*>  
3 $4   %r}}BKK&'V5 )BMMBKK+,&:  *BMMBKK+,&: !.BKK01v"?  
RWW\\'+@A	Bbkk"'',,w0FGH@
F[N [N|k0 k0\<? <?r   