
    !gL                        d 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 ddlmZ dd	lmZ  G d
 d      Z G d de      Z G d de      Z G d d      Z G d de      Z G d d      Zd Zy)z
Test  for ordinal models
    N)assert_allcloseassert_equal)Logit)OrderedModel)HessianInversionWarning)add_constant   )
data_storec                   *    e Zd Zd Zd Zd Zd Zd Zy)CheckOrdinalModelMixinc                 |   t         j                  }| j                  }| j                  }t	        |j
                  d | dz    |j                  d       t	        |j                  d | dz    |j                  dd       t	        |j                  d | dz    |j                  dd       t	        |j                  d | dz    |j                  dd       t	        |j                  j                  |j
                        dd	 |j                  d
       t	        |j!                         d dd d f   |j"                  d       y )Nr	   -C6*?atolg~jth?h㈵>)rtolr   gǺF?g;On?g-C6:?   -C6
?)dsn_ordinal_catres1res2r   paramscoefficients_valbsecoefficients_stdEtvaluescoefficients_tvalpvaluescoefficients_pvalmodeltransform_threshold_params
thresholdspredict	prob_pred)selfn_catr   r   s       l/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/miscmodels/tests/test_ordinal_model.py
test_basicz!CheckOrdinalModelMixin.test_basic   s     yyyyKeVaZ0--D	:5&1*-..U	G[ufqj1..U	G[ufqj1..U	G 	JJ11$++>qDOO$	(
 	rr1u-T	3    c                    | j                   }| j                  }t        |j                  |j                  d       t        |j                  |j                  d       t        |j
                  j                  |j
                  j                  d       t        |j
                  j                  |j
                  j                  d       y N绽|=r   r   )r   respr   r   r   r"   endogexog)r'   r   r0   s      r)   test_pandasz"CheckOrdinalModelMixin.test_pandas/   sx    yyyyT[[u=$((7

(($***:*:G

uEr+   c                    | j                   }| j                  }t        |j                  |j                  d       t        |j                  |j                  d       t        |j
                  j                  |j
                  j                  d       t        |j
                  j                  |j
                  j                  d       y )Nr   r   r.   r/   )r   resfr   r   r   r"   r1   r2   r'   r   r5   s      r)   test_formulaz#CheckOrdinalModelMixin.test_formula:   sx    yyyyT[[t<$((6

(($***:*:G

uEr+   c                    | j                   }| j                  }t        |j                  |j                  d       t        |j                  |j                  d       t        |j
                  j                  |j
                  j                  d       t        |j
                  j                  |j
                  j                  d       y r-   )r   resur   r   r   r"   r1   r2   r6   s      r)   test_unorderedz%CheckOrdinalModelMixin.test_unorderedE   sz     yyyyT[[u=$((7

(($***:*:G

uEr+   c                     | j                   }| j                  }g d}g d}|j                  j                  j                  |k(  sJ | j                  j                  j                  j                  |k(  sJ | j                  j                  j
                  dk(  sJ t        | d      r0|j                         }t        |j                  | j                         |j                          |j                  t        j                  t        |j                                    }t!        |j"                  |j$                  d       |j                  g d      }t!        |j"                  |j$                  d d d       |j'                  |j                  j(                  d	d  
      }|j'                         }t!        ||d	d  d       |j'                  |j                  j                  j*                  j,                  d	d  
      }|j'                         }t!        ||d	d  d       | j.                  j                  j                  j0                  }	t2        j4                  j7                  |	      }
| j.                  j'                  |
j,                  d	d  
      }| j.                  j'                         }t!        ||d	d  d       |j                  j(                  j8                  \  }}t        | j.                  j:                  ||dz   z
         |j                  j<                  j?                         |j                  j@                  k(  sJ |jB                  j<                  j?                         |j                  j@                  k(  sJ y )N)x1x2x3z0/1z1/2)paredpublicgpazunlikely/somewhat likelyzsomewhat likely/very likelyapply
pred_tablegvIh%<=r/   r?   r@   rA      )r2      )"r   r0   r"   dataparam_namesendog_nameshasattrrC   r   valuessummaryt_testnpeyelenr   r   pvaluer    r%   r2   	orig_exogilocr5   framepd	DataFrame	from_dictshapedf_residindextolist
exog_namesr   )r'   r   r0   param_names_npparam_names_pdtablettpredfitteddatafdataf_dfnks                r)   test_results_otherz)CheckOrdinalModelMixin.test_results_otherQ   s   yyyy99 zz**n<<<yy##//>AAAyy**g555 4&OO%Et7 	 [[DKK 012		4<<e<[[34		4<<#3%@||!5|6fRSk6||!:!:!?!?!D|EfRSk6		$$**<<))%0yy  hmmBC&8 9""$fRSk6zz$$1TYY''a!e5 {{  '')TZZ-B-BBBBxx~~$$&$***?*????r+   N)__name__
__module____qualname__r*   r3   r7   r:   rh    r+   r)   r   r      s    30	F	F
F/@r+   r   c                   "    e Zd Zed        Zd Zy)TestLogitModelc                    t         j                  }t         j                  }t        |d   j                  j
                  t        j                  |g d   t              d      }|j                  dd      }t        |d   |g d   d      }|j                  dd      }t        j                  d|d   j                  j
                  |d	   |d
   |d   dd      }|j                  dd      }t        |d   j                  j
                  t        j                  |g d   t              d      }	|	j                  dd      }
ddlm} || _        || _        || _        || _        |
| _        y )NrB   rD   logitdistrbfgsFmethoddisp apply ~ pared + public + gpa - 1r?   r@   rA   rB   r?   r@   rA   rH   rr   r	   )res_ord_logit)r   dfdf_unorderedr   rL   codesrO   asarrayfloatfitfrom_formularesults.results_ordinal_modelrz   r   r   r0   r5   r9   clsrH   data_unorderedmodresmodpr0   modfr5   modur9   r   s               r)   setup_classzTestLogitModel.setup_class   sU   uu 4=//55::d+E&FN!(* ggV%g0DM !;<")+ xxvEx2((.=//55= Ne&  xxvEx27#**00JJ~&@A5I xxvEx2Hr+   c           	      .   | j                   }| j                  }|j                  }t        |d t	        |j                         |j                  d       |j                         |j                         |j                         |j                  d      g}t        ||j                  d       d}d}d}d	d l
mc m} |j                         }	|j                  j                  d d d f   t!        j"                  d
      k(  j%                  t&              }
|	t!        j"                  dd      z  j)                  d      }|j+                  |
|	|dd dd      }t        |j,                  |d       t        |j.                  |d       t1        |j2                  |       y )N-C6?r   r	   )ddofr   g[Wq4@   gy
63?r   rE      
   Tstable)sort_varbinsr{   orderedsort_methodr   r/   )r   r   
resid_probr   rQ   meanminmaxvarresid_prob_stats statsmodels.stats.diagnostic_genstatsdiagnostic_genr%   r"   r1   rO   arangeastypeintsumtest_chisquare_binning	statisticrR   r   r{   )r'   r   r   r   
stats_probchi2r{   p_valuediarc   y_dummysvdts                r)   test_postestimationz"TestLogitModel.test_postestimation   sO   yyyy__

#8C$894??!	# oo')9:>>;K nn!n,.

D$9$9E ! 	76 ::##AtG,		!<DDSIryyC((--a0''VbrdD  ( " 	d6		76RUUBr+   N)ri   rj   rk   classmethodr   r   rl   r+   r)   rn   rn      s    # #J r+   rn   c                   .    e Zd Zed        Zd Zd Zd Zy)TestProbitModelc                 H   t         j                  }t         j                  }t        |d   j                  j
                  t        j                  |g d   t              d      }|j                  dd      }t        |d   |g d   d      }|j                  dd      }t        j                  d|d   j                  j
                  |d	   |d
   |d   dd      }|j                  dd      }t        |d   j                  j
                  t        j                  |g d   t              d      }	|	j                  dd      }
ddlm} || _        || _        || _        || _        |
| _        t        j$                  g dg dg dg dgt        j&                        | _        y )NrB   rD   probitrq   rs   Frt   rw   r?   r@   rA   rx   ry   r	   )res_ord_probit)      r      )p      r      )      r   (   )iU  ;   r   i  dtype)r   r{   r|   r   rL   r}   rO   r~   r   r   r   r   r   r   r   r0   r5   r9   arrayint64rC   r   s               r)   r   zTestProbitModel.setup_class   s   uu4=//55::d+E&FN!)+ ggV%g0DM !;<"*, xxvEx2((.=//55= Ne&  xxvEx27#**00JJ~&@A5I xxvEx2I #7#7#7#7#9 ACJr+   c                    | j                   }|j                  }d}|j                  |j                  |z        }|j	                  |j                  |z        }|j                  |j                  |z        }t        |j                  d      |d       t        |j                  d      |d |j                   d       t        |j                  d t        j                  |j                        |j                        }|j                  }|j!                  dd      }	t        |	j                  ||j                  d  d	
       t        |j"                  |	j$                  d	
       y )Ng?r   gư>r   offsetrr   rs   Frt   :0yE>r/   )r   r"   scorer   	score_obs
score_obs_r   r   k_varsr   r1   rO   zerosnobsrr   start_paramsr   llnullllf)
r'   r   r   factscore1score_obs_numdiffscore_obs_exogmod_nullnull_paramsres_nulls
             r)   test_loglikerelatedz#TestProbitModel.test_loglikerelated   s   yy jj4;;-.MM$++*<=d(:;)--a0&tD**1-vkszz/BN  		4')xx'9&)ii1 &&<<vE<:SZZ[)AMX\\=r+   c           	         | j                   }t        j                  }d}t        j                  ||d      }|j                  dd      }t        |j                  |j                  d       |j                  |j                  j                  k(  sJ |j                  j                  |j                  j                  j                  k(  sJ t        |j                  d	      sJ t        |d	      rJ d
}t        j                  t        |      5  t        j                  dt!        j"                  |d         |d   |d   |d   dd       d d d        y # 1 sw Y   y xY w)Nrw   r   rq   rs   Frt   r   r   rU   zOnly ordered pandas CategoricalmatchrB   r?   r@   rA   rx   ry   )r0   r   r{   r   r   r   r   r   r]   r"   rH   ynamesrK   pytestraises
ValueErrorrO   r~   )r'   r0   rH   formulamodf2resf2msgs          r)   test_formula_categoricalz(TestProbitModel.test_formula_categorical  s)   yyuu4))'*.h@		e	4dkk=4::#8#8888zz  DJJOO$:$::::uzz7+++5'***/]]:S1 		  %%2!zz$w-8#G} $X!%[*  		  		  		 s   =EEc                 .   | j                   }t        j                  }t        j                  t        |            }d}t        j                  |||d      }|j                  dd      }t        j                  |j                        }t        j                  |j                        }t        |d d |d d d	       t        |d   |d   d
z   d	       |j                         }	|j                         }
t        |
|	d	       |j                  |d d t        j                  d            }t        ||	d d d	       |j                  |d d       }|j                  |d d d      }t        ||d	       |j                  |g d   j                  d d t        j                  d             }t        ||d	       |j                  j                         }|j                  dxx   d
z  cc<   |j                  j                  |      }t        ||d d d	       y )Nrw   r   r   rs   Frt   rE   r   r   r	      )r   r   rD   )r0   r   r{   rO   onesrQ   r   r   r   r~   r   r   r%   rT   copyr"   )r'   r0   rH   r   r   r   r   resf2_paramsresp_paramsrc   fitted2	pred_ones
pred_zero1
pred_zero2	pred_zero
params_adjfitted_zeros                    r)   test_offsetzTestProbitModel.test_offset+  s   yyuuT#4))'408:		e	4zz%,,/jj-Ra(+bq/EQQ!);$G--/d3MM$r(2771:M>		6"1:D9 ]]48,
]]48A]6

JT: LL&@!A!F!Fr!J)+ ! 5	
ID9[[%%'
ajj((4
KO$?r+   N)ri   rj   rk   r   r   r   r   r   rl   r+   r)   r   r      s'    (J (JT>. 6$@r+   r   c                   "    e Zd Zed        Zd Zy)TestLogitModelFormulac                    t         j                  }t        |      }t        j                  |      |dz  k  j                  t              |d<   |d   |d<   || _        g d}t        |d   j                  j                  t        j                  ||   t              d      }|j                  dd	
      | _        t        |d   ||   d      }|j                  dd	
      | _        y )NrG   dummyC(dummy)[T.1.0])r   r?   r@   rA   rB   rp   rq   rs   Frt   )r   r{   rQ   rO   r   r   r   rH   r   rL   r}   r~   r   r   r0   )r   rH   r   columnsr   r   s         r)   r   z!TestLogitModelFormula.setup_classT  s    uu4y4D1H5==eDW"&w-?4=//55::d7mU;!(* ''e'4DM M")+ 88686r+   c                 *   | j                   }| j                  }|j                         }ddg}|D ]  }t        j                  ||d      }|j                  d      }|j                         }t        |      |j                  j                  |j                  j                  k(  sJ |j                  j                   j                  |j                  j                  k(  sJ t        fd|j                  j                   j                  D              sJ t        |j                  |d d       |d d         d	}t        j                  t        d
      5  t        j                  ||d       d d d        t        j                  ||dd      }	t!        j"                         5  t!        j$                  dt&               |	j                  d      }
d d d        t        
j                  |d d       |d d d       y # 1 sw Y   xY w# 1 sw Y   9xY w)Nz+apply ~ 1 + pared + public + gpa + C(dummy)z'apply ~ pared + public + gpa + C(dummy)rp   rq   rs   )ru   c              3   &   K   | ]  }|v  
 y w)Nrl   ).0name
summf1_strs     r)   	<genexpr>z3TestLogitModelFormula.test_setup.<locals>.<genexpr>w  s      4dtz) 4s      z+apply ~ 0 + pared + public + gpa + C(dummy)not be a constantr   F)rr   hasconstignorer   r/   )rH   r0   r%   r   r   r   rM   strr"   r]   rI   allr   r   r   r   warningscatch_warningssimplefilterr   )r'   rH   r0   fittedvaluesformulasr   modf1resf1summf1r   r   r   s              @r)   
test_setupz TestLogitModelFormula.test_setupi  s   yyyy||~A=? 		GG --gt7KEIIVI,E]]_FVJ;;))TZZ-B-BBBB;;##//4::3H3HHHH 4zz224 4 4 4EMM$r(3\"15EF		G @]]:-@A 	D%%gt7C	D ))'4w38: $$& 	-!!(,CDIIVI,E	- 	d2Ah/bq1AM	D 	D	- 	-s   G=$-H	=H	HN)ri   rj   rk   r   r   r  rl   r+   r)   r   r   R  s    7 7( Nr+   r   c                       e Zd Zed        Zy)TestCLogLogModelc                    t         j                  }t         j                  } G d dt        j                        } |       }t        |d   j                  j                  t        j                  |g d   t              |      }|j                  dd      }t        |d   |g d   |      }|j                  dd      }t        j                  d	|d   j                  j                  |d
   |d   |d   d|      }	|	j                  dd      }
t        |d   j                  j                  t        j                  |g d   t              |      }|j                  dd      }ddlm} || _        || _        || _        |
| _        || _        y )Nc                       e Zd Zd Zd Zy)-TestCLogLogModel.setup_class.<locals>.CLogLogc                 Z    t        j                  t        j                  d|z
               S Nr	   )rO   log)r'   qs     r)   _ppfz2TestCLogLogModel.setup_class.<locals>.CLogLog._ppf  s    vvrvva!e}n--r+   c                 Z    dt        j                  t        j                  |             z
  S r  )rO   exp)r'   xs     r)   _cdfz2TestCLogLogModel.setup_class.<locals>.CLogLog._cdf  s     266266!9*---r+   N)ri   rj   rk   r  r  rl   r+   r)   CLogLogr    s    ..r+   r  rB   rD   rq   rs   Frt   rw   r?   r@   rA   rx   ry   r	   )res_ord_cloglog)r   r{   r|   r   rv_continuousr   rL   r}   rO   r~   r   r   r   r   r  r   r   r0   r5   r9   )r   rH   r   r  cloglogr   r   r   r0   r   r5   r   r9   r   s                 r)   r   zTestCLogLogModel.setup_class  sp   uu	.e)) 	. )4=//55::d+E&FN!(* ggV%g0DM !;<")+ xxvEx2 ((.=//55= Ne&  xxvEx27#**00JJ~&@A5I xxvEx2Jr+   N)ri   rj   rk   r   r   rl   r+   r)   r  r    s    - -r+   r  c                       e Zd Zd Zy)TestLogitBinaryc                 L   t         j                  }|d   dk(  }|j                  | d d f   j                         }|d   j                  j                  d      |d<   t        |d   |g d   d      }|j                  dd      }t        |g d   d	      }t        |d   j                  j                  |      }|j                         }d
j                         }	|	dj                         z  }	t        j                  |j                        }
t        j                  |j                        }t        |
d d |d d d       t        |
d   |d    d       |	D ]$  }t        t!        ||      t!        ||      d       & |j                  dddddi      }|j                  dddddi      }|	D ]$  }t        t!        ||      t!        ||      d       & |j                  ddd      }|j                  ddd      }|	D ]$  }t        t!        ||      t!        ||      d       & y )NrB   zsomewhat likelyrD   rp   rq   rs   Frt   )prependzbse df_resid llf aic bic llnullzllnull llr llr_pvalue prsquaredrE   r   r/   r   hacmaxlagsrG   )ru   rv   cov_typecov_kwdshc1)ru   rv   r$  )r   r{   locr   catremove_categoriesr   r   r   r   r}   splitrO   r~   r   r   getattr)r'   rH   	mask_dropdata2r   r0   r2   	mod_logit	res_logit
attributesr   logit_paramsattrs                r)   test_attributeszTestLogitBinary.test_attributes  s1   uuM%66	)Q',,.w++==>OPg E'N!"<=")+ xxvEx2E"<=uM%.,,22D9	MMO	6<<>
7==??
DKK(zz)"2"23r
L!$44@q	LO#3$? 	'DGD$/D1I!%'	' xxvE!&)Q  AMMe+0Iq> " K	 	'DGD$/D1I!%'	' xxvEExBMMe+0 " 2	 	'DGD$/D1I!%'	'r+   N)ri   rj   rk   r3  rl   r+   r)   r  r    s    )'r+   r  c            	      x   d} t        j                  t        j                  d      | dz        }t        j                  t        j                  |       t        j                  |       f      }t        j                  t        d      5  t        ||d       d d d        |j                  t              }t         j                  |d<   t        j                  t        d      5  t        ||d d d	d f   d       d d d        t        t        d
      rt        j                  t        j                  |t        j                   g dd            |d d d	f   d      }d}t        j                  t        |      5  t        |d   |dg          d d d        y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N   rE   r   r   rp   rq   r   zNaN in dependent variabler	   CategoricalDtype)r	   rG   rE   T)r   r   )r1   r2   z#missing values in categorical endogr1   r2   )rO   repeatr   column_stackr   r   r   r   r   r   r   nanrK   rV   rW   Seriesr6  )r   yr  y_nanr{   r   s         r)   test_nan_endog_exceptionsr=    s^   D
		"))A,	*A
		$89A	z)<	= *Q)* HHUOEvvE!H	z)D	E 5UAaeHG45 r%&\\YY,,YEGadG  4]]:S1 	4Gb&l3	4 	4 '* *
5 5	4 	4s$   F!F$9F0F!$F-0F9)__doc__r  numpyrO   numpy.testingr   r   pandasrV   r   scipy.statsr   #statsmodels.discrete.discrete_modelr   $statsmodels.miscmodels.ordinal_modelr   statsmodels.tools.sm_exceptionsr   statsmodels.tools.toolsr   r   r
   r   r   rn   r   r   r  r  r=  rl   r+   r)   <module>rG     s      7    5 = C 0 ;k@ k@\F + F RC@, C@L7N 7Nt0- 0f+' +'\4r+   