
    M/Ph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 n# e$ r Y nw xY w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dS )    N)mice)assert_equalassert_allcloseF)PdfPagesztest_mice.pdfc                 B    t           r|                     |           d S d S N)
pdf_outputsavefig)pdffigs     f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/imputation/tests/test_mice.pyclose_or_saver      s,     C     c                  J    t           rt                                           d S d S r   )r	   r   close r   r   teardown_moduler      s%     		 r   c                  T   t           j                            d          } d}d}|                     ||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         |                     |          z  cc<   d|dddf         d	k    z  |dddf<   |                    d          |                     |          z   }t          j        |          }d
 t          d|dz             D             |_        ||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 )z0
    Create a data set with missing values.
    iÅ        sizeN         r   c                     g | ]}d |z  S )x%dr   ).0ks     r   
<listcomp>zgendat.<locals>.<listcomp>4   s    333%!)333r   y;   x1'   x2
      x3   1      x4(   ,   x5   c   )nprandomRandomStatenormalsumpd	DataFramerangecolumnsnanloc)gennpexogendogdfs         r   gendatrC   "   s   
 )


&
&CA	A::Aq6:""Daaadd111a4j(1T!!!Q$Z<7DAJAJJJ#**!*$$$JJJDAJN#DAJHHQKK#**!*,,,E	d		B33U1ac]]333BJBsG BF1R4:BF1R4:FBF2b7D=FBF2b7D=&BF2b5$;6BF2b7C<Ir   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dS )TestMICEDatac                     t                                                      }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          fdj        D             fdD                        t          d          D ]}                                 t          j        j        d         |           t          j        j        d         |           t          ||         j        |                    t          fdj        D             fdD                        d}t          j        d         |           t%          j                  dv sJ j        usJ                     d          \  }}}	}
}t          t+          |          d           t          |j        ddg           t          |	j        ddg           d S )Nr#   <   r   r%   r-   r(   r&   r0   r      c                 D    g | ]}t          j        |                   S r   setdatar   colimp_datas     r   r    z-TestMICEData.test_default.<locals>.<listcomp>V   s(    GGG#c(-,--GGGr   c                 ^    g | ])}t          |                                                   *S r   rK   dropnar   rN   rB   s     r   r    z-TestMICEData.test_default.<locals>.<listcomp>W   s/    :::c"S'..**++:::r   r+   r   r   c                 D    g | ]}t          j        |                   S r   rJ   rM   s     r   r    z-TestMICEData.test_default.<locals>.<listcomp>^   s(    KKKc#hmC011KKKr   c                 ^    g | ])}t          |                                                   *S r   rQ   rS   s     r   r    z-TestMICEData.test_default.<locals>.<listcomp>_   s/    >>>C#bgnn..//>>>r   zx1 ~ x2 + x3 + x4 + x5 + y)r/   r(   r,   r!   r%   r#   )r/   r,   r(   r!   r%   r#         )rC   copyr7   notnullr   MICEDatashaper   ix_missr2   arangeix_obsconcatenater   rL   r9   
update_allconditional_formulatuple_cycle_orderget_split_datalen)selforigmxnrowncolr   fml	endog_obsexog_obs	exog_misspredict_obs_kwdspredict_miss_kwdsrB   rO   s               @@r   test_defaultzTestMICEData.test_defaultE   s    XXwwyyZ^^=$$X
d(.	">>>-ryS/A/ABBB(.	">>>(.	"b!0D0DEEE-	"(*	"b!(<(<(*	"c(:(:(< = =	> 	> 	> 	GGGGGGG::::r:::	< 	< 	< q 	@ 	@A!!!,Q/666,Q/666DHhmB&7888KKKKX]KKK>>>>2>>>@ @ @ @ +X1$7=== X*++ 0
 
 
 
 
 (-'''' 190G0G0M0M	.Hi	,S^^S)))X^c1X...Y_r1g.....r   c                    t                      }t          j        t          |                    |d<   |j                            d          |d<   t          j        |          }t          j	        dd          5  t          j        d          5 }t          j        d           |                                 d |D             }t          |          d	k    sJ 	 d
d
d
           n# 1 swxY w Y   d
d
d
           d
S # 1 swxY w Y   d
S )zTest that MICEData does not throw a SettingWithCopyWarning when imputing (https://github.com/statsmodels/statsmodels/issues/5430)intcolint32zmode.chained_assignmentwarnT)recordalwaysc                 $    g | ]}d |j         v |S )z\pandas\)filename)r   ws     r   r    z<TestMICEData.test_settingwithcopywarning.<locals>.<listcomp>   s$    BBBA|qz'A'Aa'A'A'Ar   r   N)rC   r2   r^   rf   rt   astyper   r[   r7   option_contextwarningscatch_warningssimplefilterra   )rg   rB   miceDatawss       r   test_settingwithcopywarningz(TestMICEData.test_settingwithcopywarningt   sz    XXyR))8y''008=$$8&AA 	$ 	$(555 $%h///##%%% CBBBB2ww!|||||$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s7   9C>A
C&C>&C*	*C>-C*	.C>>DDc                 T   t                      }t          j        |          }g }t          d          D ]a}|                                }t          |t          j                  sJ t          |j	        |j	                   |
                    |           b|d         |d         u sJ d S )Nr   r   r   )rC   r   r[   r9   next_sample
isinstancer7   r8   r   r\   append)rg   rB   rO   all_xjxs         r   test_next_samplezTestMICEData.test_next_sample   s    XX=$$q 	 	A$$&&Aa.....17+++LLOOOO Qx58######r   c                    t                      }|                                }t          j        |          }|j        \  }}dD ]}t          j        ||          }t          d          D ]w}|                                 t          |j
        j        d         |           t          |j
        j        d         |           t          ||         |j
        |                    xt          |j                  dv sJ d S )Ngaussianbootperturbation_methodr   r   r   rV   )rC   rY   r7   rZ   r\   r   r[   r9   ra   r   rL   r   rc   rd   )	rg   rB   rh   ri   rj   rk   	pert_methrO   r   s	            r   test_pertmethzTestMICEData.test_pertmeth   s    XXwwyyZ^^X
d+ 	= 	=I}RYGGGH1XX = =##%%%X]03T:::X]03T:::R(-*;<<<<	= X*++ 0
 
 
 
 
 
 
r   c           
         t           j                            d          }d}|                    |          }|                    |          }|                    |          t          j        |          z  }|                    |          }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 ]z}t          j        |	||          }|                    d	d|
d
t          j        d
          iddi|           |                                }t%          |t          j                  sJ {t'          d D                       sJ d S )Ni&"  ,  r   r   r   )timestatusr#   r%   r&   r-   r   r   r0   2   r#   rG   r%   )PHRegc                 F                         | j        j                   d S r   )r   rL   r\   )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   c                     g | ]}|d k    	S ))i+  r   r   )r   vals     r   r    z+TestMICEData.test_phreg.<locals>.<listcomp>   s    444C8O444r   )r2   r3   r4   r5   exponentialexpwherer7   r8   r;   r<   &statsmodels.duration.hazard_regressionr   r   r[   set_imputerPatsyFormular   r   all)rg   r=   r>   r#   r%   
event_timeobs_timer   r   rB   r   r   pmidatar   r   s                  @r   
test_phregzTestMICEData.test_phreg   s
   i##D))ZZQZZZQZ__!_,,rvbzz9
???**x
X-z8DD$*,a33\462NNOO "r"uf}"$&r"uh fr"ud{ fr"ud{@@@@@@ 	( 	( 	( 	( 	( % 	/ 	/BM""rRRREfm)143DX3N3N(O,7+>24  6 6 6
 !!##Aa......44t4445555555r   c                 Z   ddl m} ddlm} t	                      }|                                }t          j        |          }|j        \  }}t          j
        |          }|                    dd           |                    dd           |                    dt          j        d	t          j                                        i
           |                                 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+          |j        d         |          d           t#          t+          |j        d|	z           t          j                  d           t#          t+          |j        d|	z           |          d           d}
t#          |j        d         |
           d}
t#          |j        d         |
           t7          |j                  dv sJ d S )Nr   RegressionResultsWrapperGLMResultsWrapperr#   zx3 + x4 + x3*x4r%   zx4 + I(x5**2)r(   family)r   r   r   rX   r+   Tr   zx1 ~ x3 + x4 + x3*x4zx4 ~ x1 + x2 + x3 + x5 + yr,   rV   )#statsmodels.regression.linear_modelr   +statsmodels.genmod.generalized_linear_modelr   rC   rY   r7   rZ   r\   r   r[   r   smGLMfamiliesBinomialra   r   rL   r   r9   r   modelsr   resultsOLSrb   rc   rd   )rg   r   r   rB   rh   ri   rj   rk   rO   r   rl   s              r   test_set_imputerzTestMICEData.test_set_imputer   s    	QPPPPPQQQQQQXXwwyyZ^^X
d=$$T#4555T?333Trv(0"+2F2F2H2H'I 	 	K 	K 	K 	X](+T222X](+T222R(-"3444q! 	f 	fAAvvZ(=rvFFMMMZ(=(DbkFZ[[]abbbZ(8(>@QRRTXYYYYZ	(BBFKKTRRRZ(8(CE]^^`deeee$X1$7===*X1$7=== X*++ 0
 
 
 
 
 
 
r   c                     t                      }t          j        |          }dD ]V}dD ]Q}dD ]L}t          j                     |                    |||          }t          t          |            |             MRWd S )N)patternrawFT)	row_orderhide_complete_rowscolor_row_patterns)rC   r   r[   pltclfplot_missing_patternr   r   )rg   close_figuresrB   rO   r   r   r   r   s           r   test_plot_missing_patternz&TestMICEData.test_plot_missing_pattern  s     XX=$$) 	$ 	$I&1 $ $"*5 $ $&GIII"77)9K9K 8 M MC "#s+++!MOOOO$$	$ 	$r   c                 j   t                      }t          j        |          }|                                 t	          j                     dD ]f}|                    dd|          }|                                d                             d           t          t          |            |             gd S )Nr   r%   r,   plot_pointsr   plot_bivariate)rC   r   r[   ra   r   r   r   get_axes	set_titler   r   rg   r   rB   rO   r   r   s         r   test_plot_bivariatez TestMICEData.test_plot_bivariate  s     XX=$$			& 	 	K))$+)NNCLLNN1''(8999#s###MOOOO		 	r   c                 h   t                      }t          j        |          }|                                 t	          j                     dD ]e}|                    d|          }|                                d                             d           t          t          |            |             fd S )Nr   r,   r   r   plot_fit_scatterplot)rC   r   r[   ra   r   r   plot_fit_obsr   r   r   r   r   s         r   test_fit_obszTestMICEData.test_fit_obs!  s     XX=$$			& 	 	K''+'FFCLLNN1''(>???#s###MOOOO		 	r   c                 d   t                      }t          j        |          }|                                 t	          j                     dD ]c}|                    d          }|                                d                             d           t          t          |            |             dd S )Nr   r,   r   plot_imputed_hist)rC   r   r[   ra   r   r   r   r   r   r   r   r   s         r   test_plot_imputed_histz#TestMICEData.test_plot_imputed_hist0  s     XX=$$			& 	 	K,,T22CLLNN1''(;<<<#s###MOOOO		 	r   N)__name__
__module____qualname__rr   r   r   r   r   r   pytestmark
matplotlibr   r   r   r   r   r   r   rE   rE   C   s        -/ -/ -/^$ $ $&$ $ $ 
 
 
2"6 "6 "6H)
 )
 )
Z [$ $ $  [   [   [    r   rE   c                   P    e Zd Zd Zd Zd Zd Zej        j	        d             Z
dS )TestMICEc                     t                      }t          j        |          }t          j        dt          j        |          }|                    dd          }t          |j        t          j	                  sJ |
                                }d S )Ny ~ x1 + x2 + x1:x2r   r+   )rC   r   r[   MICEr   r   fit
issubclass	__class__MICEResultssummary)rg   rB   rO   miresultsmrs         r   	test_MICEzTestMICE.test_MICEA  sr    XX=$$Y,bfh??1&*D,<===== nnr   c                    t                      }t          j        |          }t          j        dt          j        |          }ddlm} t          d          D ]-}|	                                }t          |j        |          sJ .d S )Nr   r   r   r+   )rC   r   r[   r   r   r   r   r   r9   r   r   r   )rg   rB   rO   r   r   r   r   s          r   
test_MICE1zTestMICE.test_MICE1N  s    XX=$$Y,bfh??PPPPPPq 	E 	EA  Aak+CDDDDDD	E 	Er   c                     t                      }t          j        |d          }|                    ddddd           |                                 d S )	Nr   r   r#   zx2 + yr   r   )alphaL1_wt)fit_kwds)rC   r   r[   r   ra   )rg   rB   r   s      r   test_MICE1_regularizedzTestMICE.test_MICE1_regularized[  sU    XXmBF;;;h1q1I1IJJJr   c                    ddl m} t                      }t          j        |          }t          j        dt          j        |dt          j        	                                i          }t          d          D ]N}|                                }t          ||          sJ t          |j        t          j        j	                  sJ Od S )Nr   r   zx3 ~ x1 + x2r   )r   r+   )r   r   rC   r   r[   r   r   r   r   r   r9   r   r   r   )rg   r   rB   rO   r   r   r   s          r   
test_MICE2zTestMICE.test_MICE2c  s    QQQQQQXX=$$Y~rvx"*BK,@,@,B,B!CE E E q 	> 	>A  Aa!233333ah(<======	> 	>r   c                    t           j                            d          }|                    d          }|                    d          }||z   |                    d          z   }t           j        |dd<   t           j        |dd <   t          j        |||d          }t          j        |          }t          j	        dt          j        |d	
          }|                    dd	          }t          j        g d          }	t          |j        |	d           t          j        g d          }
t          |j        |
d           t          j        g d          }t          |j        |d           d S )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߽'(:+@)r2   r3   r4   r5   r;   r7   r8   r   r[   r   r   r   r   asarrayr   frac_miss_infoparamstvalues)rg   r=   r#   r%   r!   rB   r   r   r   fmir  r  s               r   t_est_combinezTestMICE.t_est_combineq  sZ    i##D))ZZSZ!!ZZSZ!!Gcjjcj***F1S5	6344\2A6677b!!Y}bfeB???Bj<<<==-s>>>>@@@AAvD9999*DDDEEd;;;;;;r   N)r   r   r   r   r   r   r   r   r   slowr  r   r   r   r   r   ?  st        
 
 

E 
E 
E  > > > [< < < < <r   r   c                     t           j                            d          } t          j        |                     dd                    }g d|_        t           j        |j        d<   t           j        |j        ddgdf<   t          j
        |          }|                                 t          |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        |         ||                    $d S )Nr   r   r   )var1var2var3var4)r   r   r   r+   r   r   )dtype)r2   r3   r4   r7   r8   randr:   r;   ilocr   r[   ra   r   rL   isnullvaluesr6   arrayint64r]   )r=   rL   data_impr]   r   s        r   test_micedata_miss1r    sL   
)


%
%C<Q((D333DLfDIdO6DIq!fai}T""H%%''.2244a888x"(3331#RX6661a&999"BH5557 7G
  6 6X%a('!*55556 6r   )numpyr2   pandasr7   r   statsmodels.imputationr   statsmodels.apiapir   numpy.testingr   r   r~   matplotlib.pyplotpyplotr   ImportErrorr	   matplotlib.backends.backend_pdfr   r   r   r   rC   rE   r   r  r   r   r   <module>r     s            ' ' ' ' ' '       7 7 7 7 7 7 7 7 	####### 	 	 	D	 
  888888
(?
#
#CC
C  
  
  By y y y y y y yxG< G< G< G< G< G< G< G<T6 6 6 6 6s   - 55