
    M/Ph                         d Z ddlZddlZddlmZ ddlmZmZ ddl	m
Z
mZmZ ddlmZmZ  G d dej                  ZdS )	zs
(Internal) AR(1) model for monthly growth rates aggregated to quarterly freq.

Author: Chad Fulton
License: BSD-3
    N)Bunch)mlemodelinitialization)SMOOTHER_STATESMOOTHER_STATE_COVSMOOTHER_STATE_AUTOCOV)constrain_stationary_univariate!unconstrain_stationary_univariatec                        e Zd ZdZ fdZed             Zed             Z fdZ	 	 	 	 ddZ	ddZ
ddZddZd Zd Z fdZ xZS )QuarterlyAR1a  
    AR(1) model for monthly growth rates aggregated to quarterly frequency

    Parameters
    ----------
    endog : array_like
        The observed time-series process :math:`y`

    Notes
    -----
    This model is internal, used to estimate starting parameters for the
    DynamicFactorMQ class. The model is:

    .. math::

        y_t & = \begin{bmatrix} 1 & 2 & 3 & 2 & 1 \end{bmatrix} \alpha_t \\
        \alpha_t & = \begin{bmatrix}
            \phi & 0 & 0 & 0 & 0 \\
               1 & 0 & 0 & 0 & 0 \\
               0 & 1 & 0 & 0 & 0 \\
               0 & 0 & 1 & 0 & 0 \\
               0 & 0 & 0 & 1 & 0 \\
        \end{bmatrix} +
        \begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix} \varepsilon_t

    The two parameters to be estimated are :math:`\phi` and :math:`\sigma^2`.

    It supports fitting via the usual quasi-Newton methods, as well as using
    the EM algorithm.

    c                     t                                          |ddd           g d| d<   t          j        d          | ddd d d	f<   d
| d<   d S )N      
stationary)k_statesk_posdefr   )r         r   r   design   
transitiong      ?)	selectionr   r   )super__init__npeye)selfendog	__class__s     i/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/tsa/statespace/_quarterly_ar1.pyr   zQuarterlyAR1.__init__2   sl    Q(4 	 	6 	6 	6(X&(fQii\122ss"#"$    c                 
    ddgS )Nphisigma2 r   s    r!   param_nameszQuarterlyAR1.param_names9   s    x  r"   c                 b    t          j        dt          j        | j                  dz  g          S )Nr      )r   arraynanvarr   r'   s    r!   start_paramszQuarterlyAR1.start_params=   s(    xBIdj11B67888r"   c                     t          j                    5  t          j        d            t                      j        |i |}d d d            n# 1 swxY w Y   |S )Nignore)warningscatch_warningssimplefilterr   fit)r   argskwargsoutr    s       r!   r3   zQuarterlyAR1.fitA   s    $&& 	/ 	/!(+++%''+t.v..C	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 
s   .AAANTnone  ư>Fc                    | j         rt          d          |rt          d          |
| j        }d}nt	          j        |d          }|s|                     |          }g }|g}d }d}d}||k     r"|dk     s||k    r|                     |d         ||	          }|                    |d         j	        
                                           |                    |d                    |r?t          j        | j        d
|d         j        d         |d         j        d                   }|dk    rJd|d         |d         z
  z  t	          j        |d                   t	          j        |d                   z   z  }|dz  }||k     r|dk     ||k    |
r	|d         }n|r| j        j        }|| j        _        |                     |d         d||          }|r|| j        _        |	rDt'          di t	          j        |          t	          j        |          |d}t'          di ||d}nd }d }||_        ||_        |S )NzFCannot fit using the EM algorithm while holding some parameters fixed.z?Cannot fit using the EM algorithm when using low_memory option.Tr   )ndminr   r   r   )initmstep_methodknown).r   )constantstationary_cov)transformedcov_typecov_kwds)paramsllfiter)	tolerancemaxiterr&   )_has_fixed_paramsNotImplementedError
ValueErrorr-   r   r+   transform_params_em_iterationappendllf_obssumr   Initializationr   smoothed_statesmoothed_state_covabsssmsmoothr   mle_retvalsmle_settings)r   r-   rB   rC   rD   rI   rH   em_initializationr=   full_outputreturn_params
low_memoryrF   rE   r<   ideltar6   result	base_init
em_retvalsem_settingss                         r!   fit_emzQuarterlyAR1.fit_emH   s    ! 	I% 'H I I I 	4 3 4 4 4 ,LKK8L:::L 	?00>>L 'kkq1uu):):$$VBZd2> % @ @CJJs1v~))++,,,MM#a&!!!  F%4M7 V26:#&q6#<V#DF F F 1uuc"gB/0&R//BF3r7OO;=FA 'kkq1uu):):   	.BZFF ! / H3	*.'[[*2X ! G GF  4*3'  #" 2 20@0@-/Xc]]./&1 &1 2 2
 $ < <I29'; '; < < "
"!+F"-Fr"   c                 h    |                      ||          }|                     |||          }||fS )N)r<   )r=   )_em_expectation_step_em_maximization_step)r   params0r<   r=   resparams1s         r!   rN   zQuarterlyAR1._em_iteration   sK    ''d';; ,,S':F - H H G|r"   c                 6   |                      |           || j        j        }|| j        _        | j                            t          t
          z  t          z  d          }t          j        | j        j	        j
        d          |_        ||| j        _        |S )NF)update_filterT)copy)updaterV   r   rW   r   r   r   r   r+   _kalman_filterloglikelihoodrP   )r   rh   r<   ra   ri   s        r!   rf   z!QuarterlyAR1._em_expectation_step   s    G/I&*DH#hoo//2HH  ! ! hH#1> > > &/DH#
r"   c           	         |j         j        d         }|j                            ddd          }|j                            ddd          }|                                t          j        ||                    ddd                    z   }|d d         t          j        |dd          |d d                             ddd                    z   }|d dd dd df                             d          }	|d d d dd df                             d          }
|dd d dd df                             d          }|j	        d         dz
  }|
|	z  }|||
j        z  z
  |z  }t          j
        |          }|d         |d<   |d         |d<   |S )N).Nr   r   r   r   )axis)r   r   )rS   TrT   	transposesmoothed_state_autocovrm   r   matmulrQ   shape
zeros_like)r   ri   rh   r=   acov_aacov_aEaaEaa1ABCnobsf_Af_Qrj   s                   r!   rg   z"QuarterlyAR1._em_maximization_step   s    +&00Aq99+55aA>> jjllRYq!++aA*>*>???crc{RYquaf.>.>q!Q.G.GHHH RaR!  a ((BQBOQ''BQB
OQ''y|a!e39}$-((Y
Y
r"   c                 j    t          j        t          |d d                   |d         dz  g          S )Nr   r   )r   hstackr	   )r   unconstraineds     r!   rM   zQuarterlyAR1.transform_params   s<    y+M"1",=>>!a! " " 	"r"   c                 j    t          j        t          |d d                   |d         dz  g          S )Nr   g      ?)r   r   r
   )r   constraineds     r!   untransform_paramszQuarterlyAR1.untransform_params   s:    y-k"1"o>>Nc!# $ $ 	$r"   c                 h     t                      j        |fi | |d         | d<   |d         | d<   d S )Nr   )r   r   r   r   )	state_covr   r   )r   rn   )r   rE   r5   r    s      r!   rn   zQuarterlyAR1.update   sE    v(((((#)!9 "()r"   )NTr7   Nr8   r9   TNTFF)NN)N)__name__
__module____qualname____doc__r   propertyr(   r-   r3   rd   rN   rf   rg   rM   r   rn   __classcell__)r    s   @r!   r   r      s-        >% % % % % ! ! X! 9 9 X9     DJ59FJ/4D D D DL      &   0" " "$ $ $, , , , , , , , ,r"   r   )r   r0   numpyr   statsmodels.tools.toolsr   statsmodels.tsa.statespacer   r   *statsmodels.tsa.statespace.kalman_smootherr   r   r    statsmodels.tsa.statespace.toolsr	   r
   MLEModelr   r&   r"   r!   <module>r      s          ) ) ) ) ) ) ? ? ? ? ? ? ? ?@ @ @ @ @ @ @ @ @ @H H H H H H H HA, A, A, A, A,8$ A, A, A, A, A,r"   