
    M/Ph$                        d Z ddl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mZ  ej        dd	 id
            eddd          Z G d d          Z G d de          Z G d de          Zd Zd Zd Zd Zd ZdZd dD             Ze                    d dD                        e                    eeg            ej        g dg          Zej        d          Z eD ]Z!g Z"g Z#g Z$g Z% e&e          D ]WZ' e!            \  Z(Z) e	            Z* ee(j+        e(j,        e(j-        e(j.        e*e)          Z/e/0                                Z1d!e/2                                z  Z3e%4                    ej        e)j%        e3f                    e#4                     ej5        e1j#                             e$4                     ej5        e1j6                              e!            \  Z(Z) e	            Z* ee(j+        e(j,        e(j-        e(j.        e*e)ee f"          Z/e/0                                Z1e/j7        Z8e8d#         Z9e"4                    e9           Y ej         e:e%           e;e%          z            Z<e=                    d$           e(>                    e<            ej        e#          Z#e#?                    d          Z@e#A                    d          ZB ej        e$          Z$e$?                    d          Z$e=                    d%           e=                    d&           e=                     ejC        e@          d'z              e=                    d(           e=                     ejC        e(j#                  d'z              e=                    d)           e=                     ejC        e@e(j#        z
            d'z              e=                    d*           e=                     ejC        e@e(j#        z
  e(j#        z            d'z              e=                    d'           e=                    d+           e=                    d&           e=                     ejC        eB          d'z              e=                    d(           e=                     ejC        e$          d'z              e=                    d)           e=                     ejC        eBe$z
            d'z              e=                    d*           e=                     ejC        eBe$z
  e$z            d'z              e=                    d'           e"D                                 e=                    d,           e=                    d-           e=                     ejC        e          d'z              e=                    d.           e=                     ejC        e           d'z              e=                    d/            ejE        d0d1d0          D ]:ZFe=                    e" eGeF e;e"          z                     d2d3eFd2d'           ;e=                    d4           eH                                 dS )5z
Assesment of Generalized Estimating Equations using simulation.

Only Gaussian models are currently checked.

See the generated file "gee_simulation_check.txt" for results.
    lrangeN)product)Gaussian)GEE)AutoregressiveNestedallc                     d| z  S )Nz%8.3f )xs    m/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/genmod/tests/gee_simulation_check.py<lambda>r      s
    !     T)	formattersuppresszgee_simulation_check.txtwzutf-8)encodingc                   <    e Zd ZdZdZdZdZdZdZdZ	dZ
ddgZd ZdS )GEE_simulatorN      c                     t           )N)NotImplementedErrorselfdparams_ests     r   print_dparamszGEE_simulator.print_dparams>   s    !!r   )__name__
__module____qualname__ngroupserror_sdparamsdparamsexogendogtimegroupgroup_size_ranger   r   r   r   r   r      sg         G H F G D E D E 2w" " " " "r   r   c                   "    e Zd Zd gZd Zd ZdS )AR_simulatorc                 Z    t          j        t          j        | |z
  dz                      S )N   )npsqrtsum)r   ys     r   r   zAR_simulator.<lambda>E   s"    BGBFAaC!8$4$455 r   c                 `   t                               d|d         z             t                               d| j        d         z             t                               d|d         z             t                               d| j        dz  z             t                               d           d S )	Nz!AR coefficient estimate:   %8.4f
r   z!AR coefficient truth:      %8.4f
!Error variance estimate:   %8.4f
   !Error variance truth:      %8.4f
r.   
)OUTwriter%   r#   r   s     r   r   zAR_simulator.print_dparamsH   s    		6a.! 	" 	" 	"		6,q/" 	# 	# 	#		6a.! 	" 	" 	"		6-"# 	$ 	$ 	$		$r   c                 D   g g g g f\  }}}}t          | j                  D ]}t          j                            | j        d         | j        d                   }|                    |g|z             t          j                            |df          }|                    |           t          j                            |df          }d|d d df<   |                    |           t          j	        j
                            ||| j        d                   }	| j        d         |	z  }
t          j                            |
          }t          j        |t          j                            |                    }t          j        || j                  || j        z  z   }|                    |           t          j        |d          | _        t          j        |          | _        t          j        |d          | _        t          j        |          | _        d S )Nr   r5   r.   size   )axis)ranger"   r/   randomrandintr*   appendnormalscipyspatialdistancecdistdistfunr%   linalgcholeskydotr$   r#   concatenater&   r'   r(   r)   )r   r'   r&   r)   r(   igsizetime1exog1	distancescorrelationscorrelations_srerrorsendog1s                 r   simulatezAR_simulator.simulateS   s   #%r2r> tUDt|$$ 	! 	!AI%%d&;A&>&*&;A&>@ @E LL!&&&I$$5)$44EKKI$$5!*$55EE!!!A#JKK .44UE59\!_F FI  <?I5L i00>>OVORY-=-=5-=-I-IJJFVE4;//&4=2HHFLL    N4a000	^E**
N4a000	^E**


r   N)r   r    r!   rH   r   rV   r   r   r   r,   r,   B   s?         657G	 	 	"+ "+ "+ "+ "+r   r,   c                   "    e Zd ZdZdZd Zd ZdS )Nested_simulatorNc           	         t          t          | j                            D ]W}t                              d|dz   ||         fz             t                              d|dz   | j        |         fz             Xt                              d|d         t          |dd                   z
  z             t                              d| j        dz  z             t                              d	           d S )
Nz"Nest %d variance estimate:  %8.4f
r5   z"Nest %d variance truth:     %8.4f
r4   r   r6   r.   r7   )r?   len
nest_sizesr8   r9   r%   r1   r#   )r   r   js      r   r   zNested_simulator.print_dparams   s    s4?++,, 	2 	2AII;Q3A/0 1 1 1II;Q3Q01 2 2 2 2 			6_s;qt#45557 	8 	8 	8		6-"# 	$ 	$ 	$		$r   c                    | j         d         }| j         dd          }|                    d           g g g g f\  }}}}t          | j                  D ]}d | j        D             }d t          || j                  D             }	t          j                                        t          j	        |          z  }
g }| j        D ]#}|                    t                                 $t          | D ]R}|                    |           |
t          d t          |	|          D                       z   }t          j                            d          }d|d<   |                    |           || j        t          j                                        z  z   }t          j        || j                  |z   }|                    |           t          t!          |                    D ]5}||                             t%          |d|dz                                 6d |D             }|                    |dd	                    Tt          j        |          | _        t          j        |          | _        t          j        |          | _        t          j        |          | _        t          j        | j                  | _        d S )
Nr   r5   c                 ,    g | ]}t          |          S r   r   ).0ns     r   
<listcomp>z-Nested_simulator.simulate.<locals>.<listcomp>   s    <<<q<<<r   c                 ~    g | ]:\  }}t          j        |          t           j                            |           z  ;S )r;   )r/   r0   r@   rC   )r`   vra   s      r   rb   z-Nested_simulator.simulate.<locals>.<listcomp>   sR     A A A Qq BI$4$4!$4$<$<< A A Ar   c                 $    g | ]\  }}||         S r   r   )r`   rd   r]   s      r   rb   z-Nested_simulator.simulate.<locals>.<listcomp>   s      F F F#!A1 F F Fr   r=   r;   c                 2    g | ]}t          |          d z
  S )r5   )r[   )r`   r   s     r   rb   z-Nested_simulator.simulate.<locals>.<listcomp>   s"    444aQ444r   rZ   )r%   rB   r?   r"   r\   zipr/   r@   rC   r0   setr   r1   r#   rK   r$   r[   addtuplearrayr&   r'   r)   	id_matrix
zeros_liker(   )r   group_effect_varvcompr'   r&   r)   rl   rM   	iterators	variancesgpenest_allr]   nestrefrP   errorrU   nest1s                      r   rV   zNested_simulator.simulate   s   <?QRR Q(*BB%tUIt|$$ #	. #	.A<<DO<<<IA A$'t$?$?A A AI )""$$rw/?'@'@@CH_ ' '&&&&+ . .Q C F FY1E1E F F FGGG	((a(00aE"""dmbi.>.>.@.@@@t{33e;V$$$s4yy)) 8 8AQKOOE$q1u+$6$67777448444  qt----+.. HTNN	Xe__
Xe__
),,M$*--			r   )r   r    r!   r\   rl   r   rV   r   r   r   rX   rX   y   s@         J I  2. 2. 2. 2. 2.r   rX   c                     dS )z?
    Check the score testing of the parameter constraints.
    Nr   )davagas      r   check_constraintr|      s      r   c                      d fd	}|S )NFc                     t                      }d|_        t          j        d         |_        d|_        g|_        |                                 |t                      fS )N   )r   rZ   r5   r         ?r.   	r,   r"   r/   r_r$   r#   r%   rV   r   )msgarsars     r   
gendat_ar0z"gen_gendat_ar0.<locals>.gendat_ar0   sP    nnU+,
eN$$$$r   )Fr   )r   r   s   ` r   gen_gendat_ar0r      s)    % % % % % % r   c                       fd}|S )Nc                      t                      } d| _        t          j        d         | _        d| _        g| _        |                                  | t                      fS )Nr   )r   皙g333333?r   r   r.   r   )r   r   s    r   
gendat_ar1z"gen_gendat_ar1.<locals>.gendat_ar1   sP    nnU/0
eN$$$$r   r   )r   r   s   ` r   gen_gendat_ar1r      s$    % % % % % r   c                      t                      } d| _        t          j        d         | _        d| _        ddg| _        ddg| _        |                                  | t          | j
                  fS )N      ?)        r5   r5   rZ   rZ   2   
   r=          @rX   r#   r/   r   r$   r"   r\   r%   rV   r	   rl   nss    r   gendat_nested0r      sb    			BBK&'BIBJGBMbBJKKMMMvbl####r   c                      t                      } d| _        t          j        d         | _        d| _        ddg| _        ddg| _        |                                  | t          | j
                  fS )Nr   )r   r5   g?r   g333333r   r   r=   r   g      @r   r   s    r   gendat_nested1r      sb    			BBK+,BIBJGBMbBJKKMMMvbl####r   d   c                 ,    g | ]}t          |          S r   )r   r`   r   s     r   rb   rb     s     
6
6
6">"
6
6
6r   )r   g333333?g333333?c                 ,    g | ]}t          |          S r   )r   r   s     r   rb   rb     s     ;;;rr"";;;r   )r   r5   r5   r   r   )r   r5   )
constraintzp-valuez Checking dependence parameters:
zChecking parameter values:
zObserved:            r7   zExpected:            zAbsolute difference: zRelative difference: zChecking standard errors
z!Checking constrained estimation:
zLeft hand side:
zRight hand side:
z+Observed p-values   Expected Null p-values
g?gQ?z20.3f zR================================================================================

)I__doc__statsmodels.compat.pythonr   rD   numpyr/   	itertoolsr   statsmodels.genmod.familiesr   3statsmodels.genmod.generalized_estimating_equationsr   statsmodels.genmod.cov_structr   r	   set_printoptionsopenr8   r   r,   rX   r|   r   r   r   r   nrepgendatsextendrk   lhsr   rhsgendatpvaluesr$   
std_errorsr%   r?   r]   ry   rz   r{   r'   r&   r)   r(   mdfitmdfestimate_scale	scale_invrB   asarraystandard_errorsscore_test_resultsscorepvaluer1   r[   dparams_meanr9   r   meaneparamsstdsdparams	array_strsortarangeqintcloser   r   r   <module>r      sw    - , , , , ,            0 0 0 0 0 0 C C C C C C @ @ @ @ @ @ @ @  u&;&;<!# # # # d%sW===)" )" )" )" )" )" )" )"X3+ 3+ 3+ 3+ 3+= 3+ 3+ 3+nJ. J. J. J. J.} J. J. J.d  	 	 		 	 	$ $ $$ $ $ 
6
6
6
6
6 ;;];;; < < < / 0 0 0bh   "##eCj  H! H!FGFJGU4[[  2XZZS27BHbgr2>>ffhh))+++	ruRZ23444jbj,,---*"*S%899:::2XZZS27BHbgr2 #J( ( (ffhh%y!v28CCLL33w<<788LII1222\"""RXfFkk!nnGzz!}}H*%%J##JII,---II%&&&IIlbl7##d*+++II%&&&IIlbl29%%,---II%&&&IIlbl7RY.//$6777II%&&&IIlblGbi/29<==DEEEIIdOOOII*+++II%&&&IIlbl8$$t+,,,II%&&&IIlbl:&&-...II%&&&IIlbl8j011D8999II%&&&IIlblHz1Z?@@4GHHHIIdOOOLLNNNII2333II!"""IIlbl3$&'''II"###IIlbl3$&'''II<===RYsD#&& G G		WSS33w<<001EEE!EEEEFFFFII     		r   