
    !g                         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y)	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<   y )N      
stationary)k_statesk_posdefr   )r         r   r   design   
transitiong      ?)	selectionr   r   )super__init__npeye)selfendog	__class__s     f/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/tsa/statespace/_quarterly_ar1.pyr   zQuarterlyAR1.__init__2   sQ    Q(4 	 	6(X&(ffQi\12ss"#"$    c                 
    ddgS )Nphisigma2 r   s    r!   param_nameszQuarterlyAR1.param_names9   s    x  r"   c                 p    t        j                  dt        j                  | j                        dz  g      S )Nr      )r   arraynanvarr   r'   s    r!   start_paramszQuarterlyAR1.start_params=   s(    xxBIIdjj1B6788r"   c                     t        j                         5  t        j                  d       t        |   |i |}d d d        |S # 1 sw Y   S xY w)Nignore)warningscatch_warningssimplefilterr   fit)r   argskwargsoutr    s       r!   r3   zQuarterlyAR1.fitA   sN    $$& 	/!!(+'+t.v.C	/ 
	/ 
s   %AAc                 R   | j                   rt        d      |rt        d      || j                  }d}nt	        j
                  |d      }|s| j                  |      }g }|g}d }d}d}||k  r|dk  s||kD  r| j                  |d   ||	      }|j                  |d   j                  j                                |j                  |d          |rCt        j                  | j                  d
|d   j                  d   |d   j                  d         }|dkD  r@d|d   |d   z
  z  t	        j                   |d         t	        j                   |d         z   z  }|dz  }||k  r|dk  r||kD  r|
r|d   }|S |r'| j"                  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-   r?   r@   rA   rF   rE   em_initializationr:   full_outputreturn_params
low_memoryrC   rB   r9   ideltar6   result	base_init
em_retvalsem_settingss                         r!   fit_emzQuarterlyAR1.fit_emH   si    !!% 'H I I 3 4 4 ,,LK88L:L00>L 'kq1u):$$VBZd2> % @CJJs1v~~))+,MM#a&! %44MM7 V226:#&q6#<#<V#DF 1uc"gB/0&&R/BFF3r7O;=FA 'kq1u):  BZF2 - ! HH33	*.'[[*2X ! GF *3' " 20@-/XXc]./&1 2
 $ <I29'; < "
"!+F"-Fr"   c                 X    | j                  ||      }| j                  |||      }||fS )N)r9   )r:   )_em_expectation_step_em_maximization_step)r   params0r9   r:   resparams1s         r!   rK   zQuarterlyAR1._em_iteration   sB    ''d'; ,,S':F - H G|r"   c                 r   | j                  |       |'| j                  j                  }|| j                  _        | j                  j                  t        t
        z  t        z  d      }t        j                  | j                  j                  j                  d      |_        || j                  _        |S )NF)update_filterT)copy)updaterS   r   rT   r   r   r   r   r+   _kalman_filterloglikelihoodrM   )r   re   r9   r^   rf   s        r!   rc   z!QuarterlyAR1._em_expectation_step   s    G//I&*DHH#hhoo//2HH  ! hhHH##11> &/DHH#
r"   c           	         |j                   j                  d   }|j                  j                  ddd      }|j                  j                  ddd      }|j                         t        j                  ||j                  ddd            z   }|d d t        j                  |dd  |d d j                  ddd            z   }|d dd dd df   j                  d      }	|d d d dd df   j                  d      }
|dd d dd df   j                  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   )rP   TrQ   	transposesmoothed_state_autocovrj   r   matmulrN   shape
zeros_like)r   rf   re   r:   acov_aacov_aEaaEaa1ABCnobsf_Af_Qrg   s                   r!   rd   z"QuarterlyAR1._em_maximization_step   s     +&&00Aq9++55aA> jjlRYYq!++aA*>??cr{RYYquaf.>.>q!Q.GHH RaR!  a (BQBOQ'BQB
OQ'yy|a!e39}$--(Y
Y
r"   c                 T    t        j                  t        |d d       |d   dz  g      S )Nr   r   )r   hstackr	   )r   unconstraineds     r!   rJ   zQuarterlyAR1.transform_params   s4    yy+M"1,=>!a! " 	"r"   c                 T    t        j                  t        |d d       |d   dz  g      S )Nr   g      ?)r   r   r
   )r   constraineds     r!   untransform_paramszQuarterlyAR1.untransform_params   s2    yy-k"1o>Nc!# $ 	$r"   c                 F    t        |   |fi | |d   | d<   |d   | d<   y )Nr   )r   r   r   r   )	state_covr   r   )r   rk   )r   rB   r5   r    s      r!   rk   zQuarterlyAR1.update   s2    v((#)!9 "()r"   )NTnoneNi  gư>TNTFF)NN)N)__name__
__module____qualname____doc__r   propertyr(   r-   r3   ra   rK   rc   rd   rJ   r   rk   __classcell__)r    s   @r!   r   r      st    >% ! ! 9 9 DJ59FJ/4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A,8$$ A,r"   