
    'YHh3                         d dl Zd dlZd dlZd dlmZ d dlmZ	 d dl
mZmZ d dlZ	 d dlmZ dZerd dlmZ  ed      ZndZd Zd Zd	 Z G d
 d      Z G d d      Zd Zy# e$ r Y =w xY w)    N)mice)assert_equalassert_allcloseF)PdfPagesztest_mice.pdfc                 4    t         r| j                  |       y y N)
pdf_outputsavefig)pdffigs     _/var/www/html/planif/env/lib/python3.12/site-packages/statsmodels/imputation/tests/test_mice.pyclose_or_saver      s    C     c                  :    t         rt        j                          y y r   )r	   r   close r   r   teardown_moduler      s    		 r   c                     t         j                  j                  d      } d}d}| j                  ||f      }|dddf   |dddf   z
  d|dddf   z  z   |ddd	f<   |ddd	fxx   | j                  |      z  cc<   d|dddf   d	kD  z  |dddf<   |j	                  d      | j                  |      z   }t        j                  |      }t        d|dz         D cg c]  }d
|z  	 c}|_        ||d<   t         j                  |j                  d	ddf<   t         j                  |j                  d	ddf<   t         j                  |j                  ddddf<   t         j                  |j                  ddddf<   t         j                  |j                  dddf<   t         j                  |j                  ddddf<   |S c c}w )z0
    Create a data set with missing values.
    iÅ        sizeN         r   x%dy;   x1'   x2
      x3   1      x4(   ,   x5   c   )nprandomRandomStatenormalsumpd	DataFramerangecolumnsnanloc)gennpexogendogdfks          r   gendatr@   "   s   
 ))


&CA	A::Aq6:"Dadd1a4j(1T!Q$Z<7DAJAJ#**!*$$JDAJN#DAJHHQK#**!*,,E	d	B%*1ac]3%!)3BJBsG BFF1R4:BFF1R4:FFBFF2b7D=FFBFF2b7D=&&BFF2b5$;66BFF2b7C<I 4s    Gc                      e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  d        Ze	j                  j                  d        Ze	j                  j                  d	        Ze	j                  j                  d
        Zy)TestMICEDatac                    t               }|j                         }t        j                  |      }t	        j
                  |      }|j                  \  }}t        |j                  d   t        j                  d             t        |j                  d   t        j                  dd             t        |j                  d   t        j                  d             t        |j                  d   t        j                  ddd	             t        |j                  d   t        j                  t        j                  d      t        j                  d
dd	      t        j                  dd      f             t        |j                  D cg c]  }t        |j                  |          c}|D cg c]  }t        ||   j!                                 c}       t#        d      D ]  }|j%                          t        |j                  j                  d   |       t        |j                  j                  d   |       t        ||   |j                  |          t        |j                  D cg c]  }t        |j                  |          c}|D cg c]  }t        ||   j!                                 c}        d}	t        |j&                  d   |	       t)        |j*                        dv sJ ||j                  usJ |j-                  d      \  }
}}}}t        t/        |
      d       t        |j                  ddg       t        |j                  ddg       y c c}w c c}w c c}w c c}w )Nr   <   r   r!   r)   r$   r"   r,   r      r'   r   r   zx1 ~ x2 + x3 + x4 + x5 + y)r+   r$   r(   r   r!   r   )r+   r(   r$   r   r!   r         )r@   copyr3   notnullr   MICEDatashaper   ix_missr.   arangeix_obsconcatenater   datasetdropnar5   
update_allconditional_formulatuple_cycle_orderget_split_datalen)selfr>   origmximp_datanrowncolcolr?   fml	endog_obsexog_obs	exog_misspredict_obs_kwdspredict_miss_kwdss                  r   test_defaultzTestMICEData.test_defaultE   s    XwwyZZ^==$XX
d((.		">-ryyS/AB((.		">((.		"b!0DE-		"(*		"b!(<(*		"c(:(< =	> 	G#c(--,-G79:c"S'..*+:	< q 	@A!,,Q/6,,Q/6DHhmmB&78X]]Kc#hmmC01K;=>C#bgnn./>@	@ +X11$7= X**+ 0
 
 	
 
 (--'(' 190G0G0M	.Hi	,S^S)X^^c1X.Y__r1g.9 H: L>s   M*#M
'M#
#M(c                    t               }t        j                  t        |            |d<   |j                  j                  d      |d<   t        j                  |      }t        j                  dd      5  t        j                  d      5 }t        j                  d       |j                          |D cg c]  }d|j                  v s| }}t        |      d	k(  sJ 	 d
d
d
       d
d
d
       y
c c}w # 1 sw Y   xY w# 1 sw Y   y
xY w)zTest that MICEData does not throw a SettingWithCopyWarning when imputing (https://github.com/statsmodels/statsmodels/issues/5430)intcolint32zmode.chained_assignmentwarnT)recordalwaysz\pandas\r   N)r@   r.   rN   rY   ri   astyper   rK   r3   option_contextwarningscatch_warningssimplefilterrT   filename)rZ   r>   miceDatawsws        r   test_settingwithcopywarningz(TestMICEData.test_settingwithcopywarningt   s     XyyR)8yy''08==$8&A 	$((5 $%%h/##% "$BA|qzz'AaBB2w!|#|$	$ 	$ C$ $	$ 	$s<   5D*C76C2
C2C7!D2C77D 	<DDc                 8   t               }t        j                  |      }g }t        d      D ]_  }|j	                         }t        |t        j                        sJ t        |j                  |j                         |j                  |       a |d   |d   u sJ y )Nr   r   r   )r@   r   rK   r5   next_sample
isinstancer3   r4   r   rL   append)rZ   r>   r]   all_xjxs         r   test_next_samplezTestMICEData.test_next_sample   s    X==$q 	A$$&Aa...177+LLO		 Qx58###r   c                    t               }|j                         }t        j                  |      }|j                  \  }}dD ]  }t        j                  ||      }t        d      D ]t  }|j                          t        |j                  j                  d   |       t        |j                  j                  d   |       t        ||   |j                  |          v  t        j                        dv sJ y )Ngaussianbootperturbation_methodr   r   r   rF   )r@   rI   r3   rJ   rL   r   rK   r5   rT   r   rQ   r   rV   rW   )	rZ   r>   r[   r\   r^   r_   	pert_methr]   r?   s	            r   test_pertmethzTestMICEData.test_pertmeth   s     XwwyZZ^XX
d+ 	=I}}RYGH1X =##%X]]003T:X]]003T:R(--*;<	=		= X**+ 0
 
 	
 
r   c           
         t         j                  j                  d      }d}|j                  |      }|j                  |      }|j	                  |      t        j
                  |      z  }|j	                  |      }t        j                  ||k  ||      }t        j                  ||k(  dd      }t        j                  ||||d      }	t         j                  |	j                  ddd	f<   t         j                  |	j                  ddd
f<   t         j                  |	j                  dddf<   t         j                  |	j                  dddf<   ddlm}
 g fd}dD ]t  }t        j                  |	||      }|j                  d	d|
d
t        j                   d
      iddi|       |j#                         }t%        |t        j                        rtJ  t'        D cg c]  }|dk(  	 c}      sJ y c c}w )Ni&"  ,  r   r   r   )timestatusr   r!   r"   r)   r   r   r,   2   r   rD   r!   )PHRegc                 P    j                  | j                  j                         y r   )r{   rQ   rL   )imphists    r   cbz#TestMICEData.test_phreg.<locals>.cb   s    KK'r   r   )r   history_callbackz0 + x1 + x2	pred_typehr)model_class	init_kwdspredict_kwdsr   )i+  r   )r.   r/   r0   r1   exponentialexpwherer3   r4   r7   r8   &statsmodels.duration.hazard_regressionr   r   rK   set_imputerPatsyFormulary   rz   all)rZ   r9   r:   r   r!   
event_timeobs_timer   r   r>   r   r   pmidatar~   valr   s                   @r   
test_phregzTestMICEData.test_phreg   s   ii##D)ZZQZZZQZ__!_,rvvbz9
???*xx
X-z8D$*,a3\\462NO "r"uf}"$&&r"uh ffr"ud{ ffr"ud{@ 	( % 	/BMM""rREfm)143D3DX3N(O,7+>24  6
 !!#Aa...	/ t4C8O45554s   "G8c                     ddl m} ddlm} t	               }|j                         }t        j                  |      }|j                  \  }}t        j                  |      }|j                  dd       |j                  dd       |j                  dt        j                  d	t        j                  j                         i
       |j!                          t#        |j$                  j                  d   |       t#        |j$                  j                  d   |       t'        ||   |j$                  |          t)        dd      D ]  }	|	dk(  rt#        t+        |j,                  d   t        j                        d       t#        t+        |j,                  d   j.                  t        j                  j                        d       t#        t+        |j0                  d   |      d       t#        t+        |j,                  d|	z     t        j2                        d       t#        t+        |j0                  d|	z     |      d        d}
t#        |j4                  d   |
       d}
t#        |j4                  d   |
       t7        |j8                        dv sJ y )Nr   RegressionResultsWrapperGLMResultsWrapperr   zx3 + x4 + x3*x4r!   zx4 + I(x5**2)r$   family)r   r   r   rH   r'   Tr   zx1 ~ x3 + x4 + x3*x4zx4 ~ x1 + x2 + x3 + x5 + yr(   rF   )#statsmodels.regression.linear_modelr   +statsmodels.genmod.generalized_linear_modelr   r@   rI   r3   rJ   rL   r   rK   r   smGLMfamiliesBinomialrT   r   rQ   r   r5   rz   modelsr   resultsOLSrU   rV   rW   )rZ   r   r   r>   r[   r\   r^   r_   r]   r}   ra   s              r   test_set_imputerzTestMICEData.test_set_imputer   s    	QQXwwyZZ^XX
d==$T#45T?3Trvv(0"++2F2F2H'I 	 	K 	X]]((+T2X]]((+T2R(--"34q! 	fAAvZ(=rvvFMZ(=(D(DbkkFZFZ[]abZ(8(8(>@QRTXYZ	(BBFFKTRZ(8(8(CE]^`de	f %X11$7=*X11$7= X**+ 0
 
 	
 
r   c                     t               }t        j                  |      }dD ]O  }dD ]H  }dD ]A  }t        j                          |j                  |||      }t        t        |        |        C J Q y )N)patternrawFT)	row_orderhide_complete_rowscolor_row_patterns)r@   r   rK   pltclfplot_missing_patternr   r   )rZ   close_figuresr>   r]   r   r   r   r   s           r   test_plot_missing_patternz&TestMICEData.test_plot_missing_pattern  s     X==$) 	$I&1 $"*5 $&GGI"77)9K9K 8 MC "#s+!O$$	$r   c                 2   t               }t        j                  |      }|j                          t	        j
                          dD ]O  }|j                  dd|      }|j                         d   j                  d       t        t        |        |        Q y )Nr   r!   r(   plot_pointsr   plot_bivariate)r@   r   rK   rT   r   r   r   get_axes	set_titler   r   rZ   r   r>   r]   r   r   s         r   test_plot_bivariatez TestMICEData.test_plot_bivariate  s}     X==$	& 	K))$+)NCLLN1''(89#s#O		r   c                 0   t               }t        j                  |      }|j                          t	        j
                          dD ]N  }|j                  d|      }|j                         d   j                  d       t        t        |        |        P y )Nr   r(   r   r   plot_fit_scatterplot)r@   r   rK   rT   r   r   plot_fit_obsr   r   r   r   r   s         r   test_fit_obszTestMICEData.test_fit_obs!  s{     X==$	& 	K''+'FCLLN1''(>?#s#O		r   c                 ,   t               }t        j                  |      }|j                          t	        j
                          dD ]L  }|j                  d      }|j                         d   j                  d       t        t        |        |        N y )Nr   r(   r   plot_imputed_hist)r@   r   rK   rT   r   r   r   r   r   r   r   r   s         r   test_plot_imputed_histz#TestMICEData.test_plot_imputed_hist0  sv     X==$	& 	K,,T2CLLN1''(;<#s#O		r   N)__name__
__module____qualname__rg   rw   r   r   r   r   pytestmark
matplotlibr   r   r   r   r   r   r   rB   rB   C   s    -/^$&$ 
2"6H)
Z [[$ $  [[  [[  [[ r   rB   c                   \    e Zd Zd Zd Zd Zd Zej                  j                  d        Z
y)TestMICEc                    t               }t        j                  |      }t        j                  dt        j
                  |      }|j                  dd      }t        |j                  t        j                        sJ |j                         }y )Ny ~ x1 + x2 + x1:x2r   r'   )r@   r   rK   MICEr   r   fit
issubclass	__class__MICEResultssummary)rZ   r>   r]   miresultsmrs         r   	test_MICEzTestMICE.test_MICEA  sg    X==$YY,bffh?1&**D,<,<=== nnr   c                    t               }t        j                  |      }t        j                  dt        j
                  |      }ddlm} t        d      D ]*  }|j                         }t        |j                  |      r*J  y )Nr   r   r   r'   )r@   r   rK   r   r   r   r   r   r5   ry   r   r   )rZ   r>   r]   r   r   r}   r~   s          r   
test_MICE1zTestMICE.test_MICE1N  sg    X==$YY,bffh?Pq 	EA Aakk+CDDD	Er   c                     t               }t        j                  |d      }|j                  ddddd       |j	                          y )	Nr   r   r   zx2 + yr   r   )alphaL1_wt)fit_kwds)r@   r   rK   r   rT   )rZ   r>   r   s      r   test_MICE1_regularizedzTestMICE.test_MICE1_regularized[  s:    XmmBF;h1q1IJr   c                    ddl m} t               }t        j                  |      }t        j
                  dt        j                  |dt        j                  j                         i      }t        d      D ]P  }|j                         }t        ||      sJ t        |j                  t        j                  j                        rPJ  y )Nr   r   zx3 ~ x1 + x2r   )r   r'   )r   r   r@   r   rK   r   r   r   r   r   r5   ry   rz   r   )rZ   r   r>   r]   r   r}   r~   s          r   
test_MICE2zTestMICE.test_MICE2c  s    QX==$YY~rvvx"*BKK,@,@,B!CE q 	>A Aa!2333ahh(<(<===	>r   c                    t         j                  j                  d      }|j                  d      }|j                  d      }||z   |j                  d      z   }t         j                  |dd t         j                  |dd  t        j                  |||d      }t        j                  |      }t        j                  dt        j                  |d	
      }|j                  dd	      }t        j                  g d      }	t        |j                  |	d       t        j                  g d      }
t        |j                   |
d       t        j                  g d      }t        |j"                  |d       y )N9  r   r   r   d      )r   r!   r   zy ~ x1 + x2r%   )n_skipr"   )glu?g7|N?gZ?gh㈵>)atol)gmCM١g$?g ,Y?)gk(~g)Kӏ.@g߽'(:+@)r.   r/   r0   r1   r7   r3   r4   r   rK   r   r   r   r   asarrayr   frac_miss_infoparamstvalues)rZ   r9   r   r!   r   r>   r   r   r   fmir   r   s               r   t_est_combinezTestMICE.t_est_combineq  s    ii##D)ZZSZ!ZZSZ!Gcjjcj**FF1S	6634\\2A67b!YY}bffeB?Bjj<=--s>@AvD9**DEd;r   N)r   r   r   r   r   r   r   r   r   slowr   r   r   r   r   r   ?  s5    

E> [[< <r   r   c                  N   t         j                  j                  d      } t        j                  | j                  dd            }g d|_        t         j                  |j                  d<   t         j                  |j                  ddgdf<   t        j                  |      }|j                          t        |j                  j                         j                  j!                         d	       t        j"                  g t         j$                  
      t        j"                  dgt         j$                  
      t        j"                  ddgt         j$                  
      t        j"                  g t         j$                  
      d}|D ]  }t        |j&                  |   ||            y )Nr   r   r   )var1var2var3var4)r   r   r   r'   r   r   )dtype)r.   r/   r0   r3   r4   randr6   r7   ilocr   rK   rT   r   rQ   isnullvaluesr2   arrayint64rM   )r9   rQ   data_imprM   r?   s        r   test_micedata_miss1r    s   
))


%C<<Q(D3DLffDIIdO66DIIq!fai}}T"H%%'..224a8xx"((31#RXX61a&9"BHH57G
  6X%%a('!*56r   )numpyr.   pandasr3   r   statsmodels.imputationr   statsmodels.apiapir   numpy.testingr   r   rp   matplotlib.pyplotpyplotr   ImportErrorr	   matplotlib.backends.backend_pdfr   r   r   r   r@   rB   r   r  r   r   r   <module>r     s       '  7 	# 
 8
?
#C
C

By yxG< G<T6}  		s   A" "A*)A*