
    !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  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  cg c]
  }  e|        c} Zej9                  dD  cg c]
  }  e|        c}        ej9                  eeg        ej:                  g dg      Zej>                  d   Z eD ]0  Z!g Z"g Z#g Z$g Z% e&e      D ]h  Z' e!       \  Z(Z) e	       Z* ee(jV                  e(jX                  e(jZ                  e(j\                  e*e)      Z/e/ja                         Z1de/je                         z  Z3e%ji                  ej>                  e)jJ                  e3f          e#ji                   ejj                  e1jF                               e$ji                   ejj                  e1jl                                e!       \  Z(Z) e	       Z* ee(jV                  e(jX                  e(jZ                  e(j\                  e*e)ee f       Z/e/ja                         Z1e/jn                  Z8e8d!   Z9e"ji                  e9       k  ej:                   e:e%       e;e%      z        Z<ej{                  d"       e(j}                  e<        ej:                  e#      Z#e#j                  d      Z@e#j                  d      ZB ej:                  e$      Z$e$j                  d      Z$ej{                  d#       ej{                  d$       ej{                   ej                  e@      d%z          ej{                  d&       ej{                   ej                  e(jF                        d%z          ej{                  d'       ej{                   ej                  e@e(jF                  z
        d%z          ej{                  d(       ej{                   ej                  e@e(jF                  z
  e(jF                  z        d%z          ej{                  d%       ej{                  d)       ej{                  d$       ej{                   ej                  eB      d%z          ej{                  d&       ej{                   ej                  e$      d%z          ej{                  d'       ej{                   ej                  eBe$z
        d%z          ej{                  d(       ej{                   ej                  eBe$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 ]-  ZFej{                  e" eGeF e;e"      z           d0d1eFd0d%       / ej{                  d2       3 ej                          yc c} w c c} w )3z
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    j/var/www/dash_apps/app1/venv/lib/python3.12/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y)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      sK     G H F G 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)r   ys     r   r   zAR_simulator.<lambda>E   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_dparamsH   s    		6a.! 	"		6,,q/" 	#		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   r4   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II%%d&;&;A&>&*&;&;A&>@E LL!&II$$5)$4EKKII$$5!*$5EE!A#JKK ..44UE59\\!_FI  <<?I5L 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    rG   r   rU   r   r   r   r+   r+   B   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
r4   z"Nest %d variance truth:     %8.4f
r3   r   r5   r-   r6   )r>   len
nest_sizesr7   r8   r$   r0   r"   )r   r   js      r   r   zNested_simulator.print_dparams   s    s4??+, 	2AII;Q3A/0 1II;Q3Q01 2	2 			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   r4   r:   r<   rY   )r$   rA   r>   r!   r[   r   zipr.   r/   r?   rB   setr   r0   r"   rJ   r#   rZ   addtuplearrayr%   r&   r(   	id_matrix
zeros_liker'   )r   group_effect_varvcompr&   r%   r(   rc   rL   n	iteratorsv	variancesgpenest_allr\   nestrefrO   errorrT   r   nest1s                         r   rU   zNested_simulator.simulate   s   <<?QR 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    r[   rc   r   rU   r   r   r   rW   rW   y   s     J I2.r   rW   c                      y)z?
    Check the score testing of the parameter constraints.
    Nr   )davagas      r   check_constraintru      s    r   c                      d fd	}|S )Nc                     t               }d|_        t        j                  d   |_        d|_        g|_        |j                          |t               fS )N   )r   rY   r4   r         ?r-   	r+   r!   r.   r_r#   r"   r$   rU   r   )msgarsars     r   
gendat_ar0z"gen_gendat_ar0.<locals>.gendat_ar0   sI    nUU+,
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| _        | j                          | t               fS )Nrx   )r   皙g333333?r   ry   r-   rz   )r}   r~   s    r   
gendat_ar1z"gen_gendat_ar1.<locals>.gendat_ar1   sI    nUU/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| _        | j                          | t        | j                        fS )N      ?)        r4   r4   rY   rY   2   
   r<          @rW   r"   r.   r{   r#   r!   r[   r$   rU   r   rc   nss    r   gendat_nested0r      s\    		BBK&'BIBJGBMbBJKKMvbll###r   c                      t               } d| _        t        j                  d   | _        d| _        ddg| _        ddg| _        | j                          | t        | j                        fS )Nr   )r   r4   g?r   g333333r   r   r<   r   g      @r   r   s    r   gendat_nested1r      s\    		BBK+,BIBJGBMbBJKKMvbll###r   d   )r   g333333?g333333?)r   r4   r4   r   r   )r   r4   )
constraintzp-valuez Checking dependence parameters:
zChecking parameter values:
zObserved:            r6   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   rC   numpyr.   	itertoolsr   statsmodels.genmod.familiesr   3statsmodels.genmod.generalized_estimating_equationsr   statsmodels.genmod.cov_structr   r   set_printoptionsopenr7   r   r+   rW   ru   r   r   r   r   nrepgendatsextendrb   lhsr{   rhsgendatpvaluesr#   
std_errorsr$   r>   r\   rr   rs   rt   r&   r%   r(   r'   mdfitmdfestimate_scale	scale_invrA   asarraystandard_errorsscore_test_resultsscorepvaluer0   rZ   dparams_meanr8   r   meaneparamsstdsdparams	array_strsortarangeqintclose)r~   s   0r   <module>r      sZ   -    0 C @   u&;<!# %sW=)" )"X3+= 3+nJ.} J.d		$$ (5
6">"
6 ];rr"; < / 0bhh "#eeCj  H!FGFJG4[ 2Z277BHHbggr2>ffh))++	ruuRZZ234jbjj,-*"**S%8%89:2Z277BHHbggr2 #J(ffh%%y!v+. 288CL3w<78LII12\"RXXfFkk!nGzz!}H*%J#JII,-II%&IIlbll7#d*+II%&IIlbll299%,-II%&IIlbll7RYY./$67II%&IIlbllGbii/299<=DEIIdOII*+II%&IIlbll8$t+,II%&IIlbll:&-.II%&IIlbll8j01D89II%&IIlbllHz1Z?@4GHIIdOLLNII23II!"IIlbll3$&'II"#IIlbll3$&'II<=RYYsD#& G		WS3w<01%8!E"EFG II QH!T 		e 7;s   X7#X<