
    !g&                        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  G d d	      Z G d
 de      Z G d de      Zd Zd Zd Zd Zedk(  r	  ej.                  dd id        eddd      ZdZdD  cg c]
  }  e|        c} Zej;                  dD  cg c]
  }  e|        c}        ej;                  eeg        ej<                  g dg      Zej@                  d   Z!eD ]1  Z"g Z#g Z$g Z%g Z& e'e      D ]l  Z( e"       \  Z)Z* e	       Z+ ee)jX                  e)jZ                  e)j\                  e)j^                  e+e*      Z0e0jc                         Z2de0jg                         z  Z4e&jk                  ej@                  e*jL                  e4f          e$jk                   ejl                  e2jH                               e%jk                   ejl                  e2jo                                       e"       \  Z)Z* e	       Z+ ee)jX                  e)jZ                  e)j\                  e)j^                  e+e*ee!f       Z0e0jc                         Z2e0jp                  Z9e9d!   Z:e#jk                  e:       o  ej<                   e;e&       e<e&      z        Z=ej}                  d"       e)j                  e=        ej<                  e$      Z$e$j                  d      ZAe$j                  d      ZC ej<                  e%      Z%e%j                  d      Z%ej}                  d#       ej}                  d$       ej}                   ej                  eA      d%z          ej}                  d&       ej}                   ej                  e)jH                        d%z          ej}                  d'       ej}                   ej                  eAe)jH                  z
        d%z          ej}                  d(       ej}                   ej                  eAe)jH                  z
  e)jH                  z        d%z          ej}                  d%       ej}                  d)       ej}                  d$       ej}                   ej                  eC      d%z          ej}                  d&       ej}                   ej                  e%      d%z          ej}                  d'       ej}                   ej                  eCe%z
        d%z          ej}                  d(       ej}                   ej                  eCe%z
  e%z        d%z          ej}                  d%       e#j                          ej}                  d*       ej}                  d+       ej}                   ej                  e      d%z          ej}                  d,       ej}                   ej                  e!      d%z          ej}                  d-        ej                  d.d/d.      D ]*  ZGej}                  d0e# eHeG e<e#      z           eGfz         , ej}                  d1       4 ej                          yy# e$ r Y w xY wc c} w c c} w )2z
Assesment of Generalized Estimating Equations using simulation.

This script checks Gaussian models.

See the generated file "gee_gaussian_simulation_check.txt" for
results.
    )lrangeN)product)Gaussian)GEE)AutoregressiveNestedc                   >    e Zd 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y)GEE_simulatorN      c                     t         )N)NotImplementedErrorselfdparams_ests     s/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/genmod/tests/gee_gaussian_simulation_check.pyprint_dparamszGEE_simulator.print_dparams;   s    !!    )__name__
__module____qualname__ngroupserror_sdparams
dep_paramsscaleexogendogtimegroupgroup_size_ranger    r   r   r
   r
      sR     G H F J E D E D E 2w"r   r
   c                        e Zd Zd gZd Zd Zy)AR_simulatorc                 ^    t        j                  t        j                  | |z
  dz              S )N   )npsqrtsum)xys     r   <lambda>zAR_simulator.<lambda>B   s     BGGBFFAaC!8$45 r   c                 .   t         j                  d|d   z         t         j                  d| j                  d   z         t         j                  d|d   z         t         j                  d| j                  dz  z         t         j                  d       y )	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_dparamsE   s    		6a.! 	"		6//!$% 	&		6a.! 	"		6--"# 	$		$r   c                 b   g g g g f\  }}}}t        | j                        D ]  }t        j                  j	                  | j
                  d   | j
                  d         }|j                  |g|z         t        j                  j                  |df      }|j                  |       t        j                  j                  |df      }d|d d df<   |j                  |       t        j                  j                  j                  ||| j                  d         }	| j                  d   |	z  }
t        j                  j                  |
      }t        j                   |t        j                  j                  |            }t        j                   || j"                        || j$                  z  z   }|j                  |        t        j&                  |d      | _        t        j&                  |      | _        t        j&                  |d      | _        t        j&                  |      | _        y )Nr   r/   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.simulateP   s   #%r2r> tUDt||$ 	!AII%%d&;&;A&>&*&;&;A&>@E LL!&II$$5)$4EKKII$$5!*$5EE!A#JKK ..44UE59\\!_FI  ??1-y8L ii00>OVVORYY-=-=5-=-IJFVVE4;;/&4==2HHFLL 3	!6 NN4a0	^^E*
NN4a0	^^E*
r   N)r   r   r   rB   r   rP   r"   r   r   r$   r$   ?   s     67G	"+r   r$   c                        e Zd ZdZdZd Zd Zy)Nested_simulatorNc           	         t        t        | j                              D ]L  }t        j	                  d|dz   ||   fz         t        j	                  d|dz   | j
                  |   fz         N t        j	                  d|d   t        |dd       z
  z         t        j	                  d| j                  dz  z         t        j	                  d	       y )
Nz"Nest %d variance estimate:  %8.4f
r/   z"Nest %d variance truth:     %8.4f
r.   r   r0   r&   r1   )r9   len
nest_sizesr2   r3   r   r)   r   )r   r   js      r   r   zNested_simulator.print_dparams   s    s4??+, 	5AII;Q3A/0 1II;Q3 234 5	5 			6_s;q#4557 	8		6--"# 	$		$r   c                 R   | j                   d   }| j                   dd  }|j                  d       g g g g f\  }}}}t        | j                        D ]2  }| j                  D cg c]  }t        |       }	}t        || j                        D 
cg c];  \  }
}t        j                  |
      t        j                  j                  |      z  = }}
}t        j                  j                         t        j                  |      z  }g }| j                  D ]  }|j                  t                       t        |	 D ]E  }|j                  |       |t        t        ||      D 
cg c]
  \  }
}|
|    c}}
      z   }t        j                  j                  d      }d|d<   |j                  |       || j                  t        j                  j                         z  z   }t        j                  || j                         |z   }|j                  |       t        t#        |            D ]%  }||   j%                  t'        |d|dz                 ' |D cg c]  }t#        |      dz
   }}|j                  |dd        H 5 t        j(                  |      | _        t        j(                  |      | _        t        j(                  |      | _        t        j(                  |      | _        t        j2                  | j,                        | _        y c c}w c c}}
w c c}}
w c c}w )Nr   r/   r5   r7   rT   )r   r<   r9   r   rV   r   zipr'   r(   r:   r=   setr   r)   r   rE   r   rU   addtuplearrayr   r   r    	id_matrix
zeros_liker   )r   group_effect_varvcompr   r   r    r^   rG   n	iteratorsv	variancesgpenest_allrW   nestrefrJ   errorrO   r*   nest1s                         r   rP   zNested_simulator.simulate   s   ??1-#Q(*BB%tUIt||$ #	.A,0OO<q<I< %(t$?A Qq BII$4$4!$4$<< AI A ))""$rww/?'@@CH__ '&'  + .Q CY1E F#!A1 FGG		((a(0aE"dmmbii.>.>.@@@t{{3e;V$s4y) 8AQKOOE$q1+$678 ,44aQ44  q-+.#	.J HHTN	XXe_
XXe_
),MM$**-	O =A !G 5s   "LA L$LL$)r   r   r   rV   r^   r   rP   r"   r   r   rR   rR   v   s     J I2.r   rR   c                      d fd	}|S )Nc                     t               }d|_        t        j                  d   |_        d|_        g|_        |j                          |t               fS )N   )r   rT   r/   r         ?r&   	r$   r   r'   r_r   r   r   rP   r   )msgarsars     r   
gendat_ar0z"gen_gendat_ar0.<locals>.gendat_ar0   sI    nUU+,
N$$$r   )Fr"   )rt   ru   s   ` r   gen_gendat_ar0rv      s    % r   c                       fd}|S )Nc                      t               } d| _        t        j                  d   | _        d| _        g| _        | j                          | t               fS )Nrn   )r   皙g333333?r   ro   r&   rp   )rs   rt   s    r   
gendat_ar1z"gen_gendat_ar1.<locals>.gendat_ar1   sI    nUU/0
N$$$r   r"   )rt   rz   s   ` r   gen_gendat_ar1r{      s    % r   c                      t               } d| _        t        j                  d   | _        d| _        ddg| _        ddg| _        | j                          | t        | j                        fS )N      ?)        r/   r/   rT   rT   2   
   r7          @rR   r   r'   rq   r   r   rV   r   rP   r   r^   nss    r   gendat_nested0r      s\    		BBK&'BIBJGBMHBMKKMvbll###r   c                      t               } d| _        t        j                  d   | _        d| _        ddg| _        ddg| _        | j                          | t        | j                        fS )Nr   )r   r/   g?ry   g333333r   r   r7   r}   g      @r   r   s    r   gendat_nested1r      s\    		BBK+,BIBJGBMHBMKKMvbll###r   __main__allc                     d| z  S )Nz%8.3fr"   )r*   s    r   r,   r,      s
    ! r   T)	formattersuppressz!gee_gaussian_simulation_check.txtwzutf-8)encodingd   )r   g333333?g333333?)r~   r/   r/   r   r   )r~   r/   )
constraintzp-valuez Checking dependence parameters:
zChecking parameter values:
zObserved:            r1   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 %20.3f
zR================================================================================

)J__doc__statsmodels.compat.pythonr   r>   numpyr'   	itertoolsr   statsmodels.genmod.familiesr   3statsmodels.genmod.generalized_estimating_equationsr   statsmodels.genmod.cov_structr   r   r
   r$   rR   rv   r{   r   r   r   set_printoptions	TypeErroropenr2   nrepgendatsextendr]   lhsrq   rhsgendatpvaluesr   
std_errorsr   r9   rW   davagar   r   r    r   mdfitmdfestimate_scale	scale_invr<   asarraystandard_errorsscore_test_resultsscorepvaluer)   rU   dparams_meanr3   r   meaneparamsstdsdparams	array_strsortarangeqintclose)rt   s   0r   <module>r      s   -    0 C @+" +"\3+= 3+nJ.} J.\		$$ zu.C&D%)	+ 2C'
JCD,9:b~b!:GNN?2N2&?@NNNN34
"(($&
'C
%%*C  K%

t 	#AHEBrBRXXrww"''2rBB&&(CB--//IbeeBMM9$<=>MM*"**SZZ01jbjj)<)<)>?@HEBrBRXXrww"''2r!$c
,B&&(C))E9%FNN6"+	#.  rxxJ#j/ AB		56
&&!++a.::a=RXXj)
__Q'
		01		)*		,",,w'$./		)*		,",,ryy)D01		)*		,",,w23d:;		)*		,",,")) 3ryy@A 			$		./		)*		,",,x(4/0		)*		,",,z*T12		)*		,",,x*45<=		)*		,",,: 5CD 			$		67		%&		,",,s#d*+		&'		,",,s#d*+		@A3c* 	9AII's1S\>23Q78 9	9 			#$WK%Z IIKE 
   ;?s   X= Y	'Y=YY