'(array) Starting parameters for maximum likelihood estimation.'

@property
def start_params(self):

    params = markov_switching.MarkovSwitching.start_params.fget(self)
    endog = self.endog.copy()
    if ((self._k_exog > 0) and (self.order > 0)):
        exog = np.c_[(self.exog, self.exog_ar)]
    elif (self._k_exog > 0):
        exog = self.exog
    elif (self.order > 0):
        exog = self.exog_ar
    if ((self._k_exog > 0) or (self.order > 0)):
        beta = np.dot(np.linalg.pinv(exog), endog)
        variance = np.var((endog - np.dot(exog, beta)))
    else:
        variance = np.var(endog)
    if (self._k_exog > 0):
        if np.any(self.switching_coeffs):
            for i in range(self.k_regimes):
                params[self.parameters[(i, 'exog')]] = (beta[:self._k_exog] * (i / self.k_regimes))
        else:
            params[self.parameters['exog']] = beta[:self._k_exog]
    if (self.order > 0):
        if np.any(self.switching_ar):
            for i in range(self.k_regimes):
                params[self.parameters[(i, 'autoregressive')]] = (beta[self._k_exog:] * (i / self.k_regimes))
        else:
            params[self.parameters['autoregressive']] = beta[self._k_exog:]
    if self.switching_variance:
        params[self.parameters['variance']] = np.linspace((variance / 10.0), variance, num=self.k_regimes)
    else:
        params[self.parameters['variance']] = variance
    return params
