Ë
    £�Djœ:  ã            
       óB  — d Z ddlmZ ddlZddlmZ dgZddlm	Z	 d„ Z
d„ Z G d	„ d
e	«      Z G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zedk(  �rBddlmc mZ ddlZddlm	Z	 ddlmZ ej2                  j4                  j7                  «       Zej:                  dd Zej<                  dd Z ej@                  edee!d¬«      Z" ejF                  e"«      Z$e$jK                  ddg«      jM                  «       Z'eddg   jQ                  e!«      jS                  dd«      Z ejT                  ed¬«      Z e
ed   «      Z+ed   Z, eeee+e,ddgd¬«      Z-e-j]                  d ¬!«      Z/e-j]                  d"d#¬$«      Z0e-j]                  d%d#¬$«      Z1e-j]                  d"d&¬$«      Z2e-j]                  d%d&¬$«      Z3e-j]                  d%d'¬$«      Z4 ejj                  g d(¢«      Z6e6jn                  d   Z8 ejr                  e6«      Z: ejj                  g d)¢«      Z; ejr                  e;«      Z<e6dd…df   e:k(  j{                  e!«      Z>e;dd…df   e<k(  j{                  e!«      Z?d*Z@ ej‚                  d+«      ZB ej‚                  d,«      ZCejˆ                  eBe>z  eCe?z  f   ZE ejŒ                  eEeEjŽ                  «      e@ ej�                  e8«      z  z   ZI eJeI«        eJej–                  j™                  eI«      «       ej–                  j›                  eI«      \  ZNZO ejŒ                  eOd-eNz  eOz  jŽ                  «      ZPej–                  j£                  eI«      ZR ejŒ                  eOeNeOz  jŽ                  «      ZS eJ ej¨                   ejª                  eSeIz
  «      «      «        eJ ej¨                   ejª                   ejŒ                  ePeI«       ej�                  e8«      z
  «      «      «       eO ej‚                  eN«      z  ZV eJ ej¨                   ejª                   ejŒ                  eVeVjŽ                  «      ePz
  «      «      «        ejj                  eBeCe@g«      ZW ej°                  e6e;f«      ZY eeYeW«      \  ZZZ[Z\ eJ ej¨                   ejª                  eZeIz
  «      «      «        eJ ej¨                   ejª                  e[ePz
  «      «      «        eJ ej¨                   ejª                  e\eVz
  «      «      «        eejŒ                  e>ej–                  j£                   ejŒ                  e>jŽ                  e>«      «      e>jŽ                  g«      Z] ej�                  e8«      e]z
  Z^ eJ ej¨                   ejª                   ejŒ                  e^e6«      «      «      «       yy).z
Sandbox Panel Estimators

References
-----------

Baltagi, Badi H. `Econometric Analysis of Panel Data.` 4th ed. Wiley, 2008.
é    )ÚreduceN)ÚGLSÚ
PanelModel)ÚPanelc                 óÚ   — i }t        j                  t        | «      «      }t        t        | «      «      D ]3  }| |   |vr|j	                  | |   t        |«      i«       || |      ||<   Œ5 |S )zÓ
    Returns unique numeric values for groups without sorting.

    Examples
    --------
    >>> X = np.array(['a','a','b','c','b','c'])
    >>> group(X)
    >>> g
    array([ 0.,  0.,  1.,  2.,  1.,  2.])
    )ÚnpÚzerosÚlenÚrangeÚupdate)ÚXÚ	uniq_dictÚgroupÚis       úfC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\statsmodels/sandbox/panel/panelmod.pyr   r      sq   € ð €IÜ�H‰H”S˜“VÓ€EÜ”3�q“6‹]ò #ˆØ�‰t�yÑ Ø×Ñ˜a ™d¤S¨£^Ð4Ô5Ø˜Q˜q™T‘?ˆˆaŠð#ð €Ló    c                 ó8  — | j                   dk(  r	| dd…df   } | j                  \  }}|d   t        j                  |«      z  }t	        |«      D ]f  }| dd…||dz   …f   }t        j
                  |«      }||   ||k(  j                  t        «      z  }|t        j                  ||j                  «      z  }Œh t        j                  j                  |«      \  }	}
t        j                  |
d|	z  |
z  j                  «      }|
t        j                  |	«      z  }|||fS )aG  calculate error covariance matrix for random effects model

    Parameters
    ----------
    groups : ndarray, (nobs, nre) or (nobs,)
        array of group/category observations
    sigma : ndarray, (nre+1,)
        array of standard deviations of random effects,
        last element is the standard deviation of the
        idiosyncratic error

    Returns
    -------
    omega : ndarray, (nobs, nobs)
        covariance matrix of error
    omegainv : ndarray, (nobs, nobs)
        inverse covariance matrix of error
    omegainvsqrt : ndarray, (nobs, nobs)
        squareroot inverse covariance matrix of error
        such that omega = omegainvsqrt * omegainvsqrt.T

    Notes
    -----
    This does not use sparse matrices and constructs nobs by nobs
    matrices. Also, omegainvsqrt is not sparse, i.e. elements are non-zero
    é   Néÿÿÿÿ)ÚndimÚshaper   Úeyer   ÚuniqueÚastypeÚfloatÚdotÚTÚlinalgÚeighÚsqrt)ÚgroupsÚsigmasÚnobsÚnreÚomegaÚigrr   Ú	groupuniqÚdummygrÚevÚevecÚomegainvÚomegainvhalfs                r   Úrepanel_covr-   '   s  € ð8 ‡{�{�aÒØš˜$˜‘ˆØ—‘�I€Dˆ#Ø�2‰J”r—v‘v˜d“|Ñ#€EÜ�S‹zò -ˆØ’q˜˜S ™U˜�{Ñ#ˆÜ—I‘I˜eÓ$ˆ	Ø˜‘+ ¨)Ñ!3× ;Ñ ;¼EÓ BÑBˆØ”"—&‘&˜ '§)¡)Ó,Ñ,‰ð	-ô
 �y‰y�~‰~˜eÓ$�H€BˆÜ�v‰v�d˜Q˜r™T D™[ŸO™OÓ,€HØœŸ™ ›Ñ#€LØ�(˜LÐ(Ð(r   c                   ó   — e Zd Zy)Ú	PanelDataN©Ú__name__Ú
__module__Ú__qualname__© r   r   r/   r/   S   ó   „ Ør   r/   c                   óD   — e Zd ZdZ	 	 d
d„Zd„ Zd„ Zdd„Zdd„Zd„ Z	d	„ Z
y)r   aà  
    An abstract statistical model class for panel (longitudinal) datasets.

    Parameters
    ----------
    endog : array_like or str
        If a pandas object is used then endog should be the name of the
        endogenous variable as a string.
#    exog
#    panel_arr
#    time_arr
    panel_data : pandas.Panel object

    Notes
    -----
    If a pandas object is supplied it is assumed that the major_axis is time
    and that the minor_axis has the panel variable.
    Nc                 ó6   — |€| j                  ||||||«       y y ©N)Ú
initialize)ÚselfÚendogÚexogÚpanelÚtimeÚxtnamesÚequationÚ
panel_datas           r   Ú__init__zPanelModel.__init__i   s%   € àÐð
 �O‰O˜E 4¨°°g¸xÕHð r   c                 óz  — |j                  d«      }|d   | _        |dd }|d   | _        |d   | _        |j	                  d«      dk(  }	d|	v r0t        j                  |	dk(  «      d   d   }
|j                  |
d«       |	| _        || _	        t        j                  t        j                  |«      «      | _        t        j                  |«      }|| _        t        j                  |«      | _        t        j                  |«      | _        t        j                   |«      | _        t        j                   |«      | _        y)zG
        Initialize plain array model.

        See PanelModel
        ú r   r   NTÚcons)ÚsplitÚ
endog_nameÚ
panel_nameÚ	time_nameÚvarr   ÚwhereÚinsertÚ_cons_indexÚ
exog_namesÚsqueezeÚasarrayr;   r<   r=   r>   r   Ú	paneluniqÚtimeuniq)r:   r;   r<   r=   r>   r?   r@   ÚnamesrN   ÚnovarÚ
cons_indexs              r   r9   zPanelModel.initializez   s  € ð —‘˜sÓ#ˆØ ™(ˆŒØ˜1˜2�Yˆ
Ø! !™*ˆŒØ  ™ˆŒð —‘˜“˜qÑ ˆØ�5‰=ÜŸ™ %¨1¡*Ó-¨aÑ0°Ñ3ˆJØ×Ñ˜j¨&Ô1à ˆÔØ$ˆŒÜ—Z‘Z¤§
¡
¨5Ó 1Ó2ˆŒ
Ü�z‰z˜$ÓˆØˆŒ	Ü—Z‘Z Ó&ˆŒ
Ü—J‘J˜tÓ$ˆŒ	äŸ™ 5Ó)ˆŒÜŸ	™	 $›ˆ�r   c                 ó^  — || _         ||   j                  }t        j                  |«      | _        |€+|j
                  j                  «       }|j                  |«       |j                  |«      j                  | _	        || _
        || _        |j                  | _        |j                  | _        y r8   )rA   Úvaluesr   rO   r;   ÚcolumnsÚtolistÚremoveÚfilterItemsr<   Ú
_exog_nameÚ_endog_nameÚ
major_axisÚ_timeseriesÚ
minor_axisÚ_panelseries)r:   rA   rG   Ú	exog_namer;   s        r   Úinitialize_pandaszPanelModel.initialize_pandas¸   s”   € Ø$ˆŒØ˜:Ñ&×-Ñ-ˆÜ—Z‘Z Ó&ˆŒ
ØÐØ"×*Ñ*×1Ñ1Ó3ˆIØ×Ñ˜ZÔ(Ø×*Ñ*¨9Ó5×<Ñ<ˆŒ	Ø#ˆŒØ%ˆÔØ%×0Ñ0ˆÔØ&×1Ñ1ˆÕr   c                 ó´  — |dk(  r| j                   }| j                  }n,|dk(  r| j                  }| j                  }nt	        d|z  «      ‚t        |||dd…df   t        |«      t        |«      t        |dd…df   «      |«       ||dd…df   k(  j                  t        «      }|j                  dkD  r0t        j                  ||«      |j                  d«      dd…df   z  }n(t        j                  ||«      |j                  d«      z  }|du r|du r|S |du r|du r||j                  d«      fS |du r|du r||j                  d«      |fS |du r	|du r||fS yy)z[
        Get group means of X by time or by panel.

        index default is panel
        Úonewayr>   zindex %s not understoodNr   FT)r=   rQ   r>   rR   Ú
ValueErrorÚprintr
   r   r   r   r   r   Úsum)	r:   r   ÚindexÚcountsÚdummiesÚYÚuniqÚdummyÚmeans	            r   Ú_group_meanzPanelModel._group_meanÈ   s[  € ð �HÒØ—
‘
ˆAØ—>‘>‰DØ�fŠ_Ø—	‘	ˆAØ—=‘=‰DäÐ6¸Ñ>Ó?Ð?Üˆa��tšA˜d˜F‘|¤S¨£V¬S°«Y¼¸DÂÀ4À¹LÓ8IØô	ð �dš1˜T˜6‘lÑ"×*Ñ*¬5Ó1ˆØ�6‰6�AŠ:Ü—6‘6˜% “? 5§9¡9¨Q£<²°$°Ñ#7Ñ7‰Dä—6‘6˜% “? 5§9¡9¨Q£<Ñ/ˆDØ�U‰?˜w¨%Ñ/ØˆKØ�t‰^ ¨5Ñ 0Ø˜Ÿ™ 1›Ð%Ð%Ø�t‰^ ¨4¡Ø˜Ÿ™ 1› uÐ,Ð,Ø�u‰_ ¨D¡Ø˜�;Ðð "1ˆ_r   c                 ó2  — |r|j                  «       }|j                  «       }|r|dvrt        d|z  «      ‚|dk(  r.t        | j                  | j                  «      j                  «       S |dk(  r| j                  ||«      S |dk(  r| j                  ||«      S y)ab  
        method : LSDV, demeaned, MLE, GLS, BE, FE, optional
        model :
                between
                fixed
                random
                pooled
                [gmm]
        effects :
                oneway
                time
                twoway
        femethod : demeaned (only one implemented)
                   WLS
        remethod :
                swar -
                amemiya
                nerlove
                walhus


        Notes
        -----
        This is unfinished.  None of the method arguments work yet.
        Only oneway effects should work.
        )ÚlsdvÚdemeanedÚmleÚglsÚbeÚfez%s not a valid methodÚpooledÚbetweenÚfixedN)Úlowerrf   r   r;   r<   ÚfitÚ	_fit_btwnÚ
_fit_fixed)r:   ÚmodelÚmethodÚeffectss       r   r|   zPanelModel.fitè   sž   € ñ6 Ø—\‘\“^ˆFØ—‘“ˆÙ�fð %8ñ 8ô Ð4°vÑ=Ó>Ð>ð �HÒÜ�t—z‘z 4§9¡9Ó-×1Ñ1Ó3Ð3Ø�IÒØ—>‘> &¨'Ó2Ð2Ø�GÒØ—?‘? 6¨7Ó3Ð3ð r   c                 óÖ   — |dk7  r;| j                  | j                  |¬«      }| j                  | j                  |¬«      }nt        d|z  «      ‚t	        ||«      j                  «       }|S )NÚtwoway©ri   z1%s effects is not valid for the between estimator)rp   r;   r<   rf   r   r|   )r:   r€   r�   r;   r<   Úbefits         r   r}   zPanelModel._fit_btwn  sp   € à�hÒØ×$Ñ$ T§Z¡Z°wÐ$Ó?ˆEØ×#Ñ# D§I¡I°WÐ#Ó=‰Däð )Ø+2ñ3ó 4ð 4ä�E˜4Ó ×$Ñ$Ó&ˆØˆr   c                 ól  — | j                   }| j                  }d}|dv r||dk(  rd}d}| j                  ||d¬«      \  }}| j                  ||¬«      }|j                  t        «      }|t        j                  ||«      z
  }|t        j                  ||d¬	«      z
  }|s|d
k(  rf| j                  |d
d¬«      \  }}	| j                  |d
¬«      }|t        j                  ||	«      z
  }|t        j                  |	j                  |«      z
  }t        ||d d …| j                   f   «      j                  «       }
|
S )NF)re   Útwowaysr‡   Tre   )ri   rj   r„   r   )Úaxisr>   )ri   rk   )r;   r<   rp   r   Úintr   Úrepeatr   r   r   rM   r|   )r:   r€   r�   r;   r<   ÚdemeantwiceÚ
endog_meanrj   Ú	exog_meanrk   Úfefits              r   r~   zPanelModel._fit_fixed)  s?  € Ø—
‘
ˆØ�y‰yˆØˆØÐ*Ñ*Ø˜)Ò#Ø"�Ø"�Ø!%×!1Ñ!1°%¸wØð "2ó "ÑˆJ˜à×(Ñ(¨°WÐ(Ó=ˆIØ—]‘]¤3Ó'ˆFØœBŸI™I j°&Ó9Ñ9ˆEØœ"Ÿ)™) I¨v¸AÔ>Ñ>ˆDÙ˜' VÒ+Ø"&×"2Ñ"2°5ÀØð #3ó #ÑˆJ˜à×(Ñ(¨°VÐ(Ó<ˆIàœBŸF™F :¨wÓ7Ñ7ˆEØœ"Ÿ&™& §¡¨IÓ6Ñ6ˆDÜ�E˜4¢ 4×#3Ñ#3Ð"3Ð 3Ñ4Ó5×9Ñ9Ó;ˆàˆr   )NNNNNNN)re   FF)NNre   )r1   r2   r3   Ú__doc__rB   r9   rc   rp   r|   r}   r~   r4   r   r   r   r   V   s8   „ ñð$ @DØ48óIò"(ò|2ó ó@)4òl	ór   c                   ó   — e Zd Zy)ÚSURPanelNr0   r4   r   r   r‘   r‘   E  r5   r   r‘   c                   ó   — e Zd Zy)ÚSEMPanelNr0   r4   r   r   r“   r“   H  r5   r   r“   c                   ó   — e Zd Zy)ÚDynamicPanelNr0   r4   r   r   r•   r•   K  r5   r   r•   Ú__main__iìÿÿÿÚ
investmentF)ÚusemaskÚyearÚfirmÚvalueÚcapitalr   é   )Úprependzinvest value capital)r?   r@   rx   )r   ry   re   )r   r�   rz   r>   r‡   )r   r   r   r   r   r�   r�   r�   )r   r   r�   r   r�   r   r   r�   g      ð?g       @g      @r   )_r�   Ú	functoolsr   Únumpyr   Ú#statsmodels.regression.linear_modelr   Ú__all__Úpandasr   r   r-   r/   r   r‘   r“   r•   r1   Únumpy.lib.recfunctionsÚlibÚrecfunctionsÚnprfÚstatsmodels.apiÚapiÚsmÚdatasetsÚgrunfeldÚloadÚdatar;   r<   ÚfullexogÚappend_fieldsr   Ú	panel_arrÚ	DataFrameÚpanel_dfÚ	set_indexÚto_panelÚpanel_pandaÚviewÚreshapeÚadd_constantr=   r™   Ú	panel_modr|   Ú	panel_olsÚpanel_beÚpanel_feÚ	panel_betÚ	panel_fetÚ	panel_fe2Úarrayr!   r   r#   r   r'   ÚperiodsÚ
perioduniqr   r(   ÚdummypeÚsigmar    ÚsigmagrÚsigmapeÚc_Údummyallr   r   r   r%   rg   r   Úcholeskyr   r)   r*   r+   ÚinvÚ	omegainv2Ú	omegacompÚmaxÚabsr,   Úsigmas2Úcolumn_stackÚgroups2Úomega_Ú	omegainv_Úomegainvhalf_ÚPgrÚQgrr4   r   r   ú<module>rØ      s/  ðñõ ã å 3àˆ.€å òò&()ôX	�ô 	÷jñ jô^	ˆzô 	ô	ˆzô 	ô	�:ô 	ð ˆzÓß)Ð)ÛÝå à�;‰;×Ñ×$Ñ$Ó&€Dà�J‰J�t˜Ð€EØ�y‰y˜˜#ˆ€Hà"�×"Ñ" 8¨\¸5À%Øô€Ið  ˆv×Ñ 	Ó*€HØ×$Ñ$ f¨fÐ%5Ó6×?Ñ?ÓA€Kð �W˜YÐ'Ñ(×-Ñ-¨eÓ4×<Ñ<¸RÀÓB€DØˆ2�?‰?˜4¨Ô/€DÙ�(˜6Ñ"Ó#€EØ�FÑ€DÙ˜5 $¨¨t¸fÀV¸_Ø+ô-€Ið —‘ H�Ó-€Ià�}‰} 9°hˆ}Ó?€HØ�}‰} 7°Hˆ}Ó=€Hà—‘ I°v�Ó>€IØ—‘ G°V�Ó<€Ià—‘ G°Y�Ó?€Ið" ˆR�X‰XÒ'Ó(€FØ�<‰<˜‰?€DØ�—	‘	˜&Ó!€IØˆb�h‰hÒ(Ó)€GØ�—‘˜7Ó#€Jà’a˜�f‰~ Ñ*×2Ñ2°5Ó9€GØ’q˜�v‰ *Ñ,×4Ñ4°UÓ;€Gà€EØˆb�g‰g�b‹k€GØˆb�g‰g�b‹k€Gð
 �u‰u�W˜W‘_ g¨g¡oÐ5Ñ6€Hð ˆB�F‰F�8˜XŸZ™ZÓ(¨5°&°"·&±&¸³,Ñ+>Ñ>€EÙ	ˆ%„LÙ	ˆ"�)‰)×
Ñ
˜UÓ
#Ô$Ø�y‰y�~‰~˜eÓ$�H€BˆØˆr�v‰v�d˜Q˜r™T D™[ŸO™OÓ,€HØ—	‘	—‘˜eÓ$€IØ�—‘�t˜b 4™iŸ]™]Ó+€IÙ	ˆ&ˆ"�&‰&��—‘˜	 EÑ)Ó*Ó
+Ô,ñ 
ˆ&ˆ"�&‰&��—‘˜˜Ÿ™˜x¨Ó.°°·±¸³Ñ=Ó>Ó
?Ô@Ø˜˜Ÿ™ ›Ñ#€LÙ	ˆ&ˆ"�&‰&��—‘˜˜Ÿ™˜|¨L¯N©NÓ;¸hÑFÓGÓ
HÔIð ˆb�h‰h˜ ¨%Ð0Ó1€GØˆb�o‰o˜v wÐ/Ó0€GÙ'2°7¸GÓ'DÑ$€FˆI�}Ù	ˆ&ˆ"�&‰&��—‘˜ ™Ó'Ó
(Ô)Ù	ˆ&ˆ"�&‰&��—‘˜	 HÑ,Ó-Ó
.Ô/Ù	ˆ&ˆ"�&‰&��—‘˜¨Ñ4Ó5Ó
6Ô7ñ �—‘˜Ø�I‰I�M‰M˜&˜"Ÿ&™& §¡¨GÓ4Ó5°g·i±iðAó B€Cà
ˆ"�&‰&�‹,˜Ñ
€Cñ 
ˆ&ˆ"�&‰&��—‘˜˜Ÿ™˜s FÓ+Ó,Ó
-Õ.ðW r   