
    M/Ph                        d Z ddlZddlmZ ddlmZ  G d d          Zedk    rd ej	        g d          Z
 ee
          Z ej        e          Z ej        d	ed	z             d
 ej        e          z  z
  dej                            e          z  z   Zd
ej                            ed	z             z  Z ej        e          ed	d         z   dedd         z  z   dej                            e          z  z   Zed	d         dedd         z  z   Z ej        e
          Ze
dddf         ek                        e          Z ej        e
          dk    Z ej        e
          dk    Ze ej        e ej	        g d                    z   Ze ej        e ej	        g d                    z   Z ee            e ej        e          e                    d	Z eed	d         eedd         z  z
  e                    dZ eed	d         eedd         z  z
  dz   e                     ej         e          Z!eZ! eee!e
          Z"e"#                                \  Z$Z% ee$d         e%j&                   dS dS )a'  Paneldata model with fixed effect (constants) and AR(1) errors

checking fast evaluation of groupar1filter
quickly written to try out grouparfilter without python loops

maybe the example has MA(1) not AR(1) errors, I'm not sure and changed this.

results look good, I'm also differencing the dummy variable (constants) ???
e.g. nobs = 35
true 0.6, 10, 20, 30   (alpha, mean_0, mean_1, mean_2)
estimate 0.369453125 [ 10.14646929  19.87135086  30.12706505]

Currently minimizes ssr but could switch to minimize llf, i.e. conditional MLE.
This should correspond to iterative FGLS, where data are AR(1) transformed
similar to GLSAR ?
Result statistic from GLS return by OLS on transformed data should be
asymptotically correct (check)

Could be extended to AR(p) errors, but then requires panel with larger T

    N)optimize)OLSc                   (    e Zd ZddZd Zd Zd ZdS )PanelAR1Nc                     |j         d         }|| _        ||| _        t          j        |          dk    | _        | j         | _        d S )Nr   )shapeendogexognpdiffgroups_startgroups_valid)selfr	   r
   groupsnobss        g/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/sandbox/regression/ar_panel.py__init__zPanelAR1.__init__   sJ    {1~
DIWV__a/!..    c                 H    |dd          ||d d         z  z
  | j                  S )N   )r   )r   xyalphas      r   	ar1filterzPanelAR1.ar1filter)   s)    122CRC($*;<<r   c                     |                      | j        |          }|                      | j        |          }t          ||                                          }|j        S )N)r   r	   r
   r   fitssr)r   r   yxress        r   fit_conditionalzPanelAR1.fit_conditional-   sH    NN4:u--NN49e,,!Qiimmoowr   c                    d}| j         }t          j        ||          }|d         }|                     | j        |          }|                     | j        |          }t          ||                                          }||fS )N皙?r   )r!   r   fminr   r	   r
   r   r   )r   alpha0funcfitresr   r   r   resos           r   r   zPanelAR1.fit4   st    #tV,, q	NN4:u--NN49e,,1ayy}}t|r   )NN)__name__
__module____qualname__r   r   r!   r    r   r   r   r      sU        / / / /= = =      r   r   __main__)#r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      r.   r.   r.   r.   r.   r.   r.   r.   r.   r.   r.   r   g      ?r#   g?r   g333333?)
         gMbP?)r   )'__doc__numpyr   scipyr   #statsmodels.regression.linear_modelr   r   r)   arrayr   lenr   arangedata0randomrandndatay00uniquegroup_codesastypeintgroup_dummyr   r   r   dotr   y0printr   onesr
   modr   resar(   paramsr,   r   r   <module>rJ      s*   .           3 3 3 3 3 3! ! ! ! ! ! ! !F z RX ( ( ( ) )F3v;;DBIdOOE29QtAvYRYt__!44s29??4;P;P7PPD
biood1f%%
%C 29T??SW$s3ss8|3c")//$:O:O6OODqrr7SSbS\!D")F##K!!!D&>[088==KBGFOOQ&LBGFOOQ&L 	vrvk828LLL#9#9:::A	XRXlll%;%;<<	<B	E,	E'"'!**\
"###E	E2abb6E"SbS'M!<
0111E	E2abb6E"SbS'M!E)<
8999 274==DD
(1d6
*
*
*C JD$	E$q'4;_ r   