'Probit model Jacobian for each observation
Parameters
params : array-like
The parameters of the model
Returns
jac : array-like
The derivative of the loglikelihood for each observation evaluated
at `params`.
Notes
.. math:: \frac{\partial\ln L_{i}}{\partial\beta}=\left[\frac{q_{i}\phi\left(q_{i}x_{i}^{\prime}\beta\right)}{\Phi\left(q_{i}x_{i}^{\prime}\beta\right)}\right]x_{i}
for observations :math:`i=1,...,n`
Where :math:`q=2y-1`. This simplification comes from the fact that the
normal distribution is symmetric.'

def score_obs(self, params):

    y = self.endog
    X = self.exog
    XB = np.dot(X, params)
    q = ((2 * y) - 1)
    L = ((q * self.pdf((q * XB))) / np.clip(self.cdf((q * XB)), FLOAT_EPS, (1 - FLOAT_EPS)))
    return (L[:, None] * X)
