Ejemplo n.º 1
0
    def target_probability(self, a1, a2, opposite=False):
        if (self.distribution_type == "vonmises"):
            # https://math.stackexchange.com/questions/1574927/what-is-the-equation-for-a-bessel-function-of-order-zero
            def I(x):
                return (1.0 / np.pi) * integrate.quad(
                    lambda t: np.exp(x * np.cos(t)), 0.0, np.pi)[0]

            # https://en.wikipedia.org/wiki/Von_Mises_distribution
            def pdf(x, k):
                return np.exp(k * np.cos(x)) / (2.0 * np.pi * I(k))

            def cdf(angle, k):
                return integrate.quad(lambda t: pdf(t, k), -np.pi, angle)

            start_time = time.time()
            kappa = self.params[0]
            self.target = [a1, a2]
            a_min = min(self.target) - self.parafoveal
            a_max = max(self.target) + self.parafoveal
            t1 = vonmises.cdf(a_min, kappa)
            t2 = vonmises.cdf(a_max, kappa)
            self.results = [t1, t2]
            ans = np.abs(t2 - t1)
            if opposite:
                ans = 1 - ans
            self.distribution_time += time.time() - start_time
            return ans
Ejemplo n.º 2
0
 def interval_probability(self, tStart, tEnd, location=None, kappa=None):
     if location is None:
         location = self.location
         if location is None:
             raise ValueError("No mean is given.")
     if kappa is None:
         kappa = self.kappa
         if kappa is None:
             raise ValueError("No variance is given.")
     return (vonmises.cdf(tEnd, kappa, location, 12 / np.pi) -
             vonmises.cdf(tStart, kappa, location, 12 / np.pi))
Ejemplo n.º 3
0
def angular_linear_pdf(x,
                       alpha,
                       speed_params,
                       vonmises_params,
                       connection_params,
                       cartesian=False):
    from scipy.stats import kappa4, vonmises
    # 1. Speed
    k, h, scale, loc = speed_params
    x_pdf = kappa4.pdf(x, h, k, loc=loc, scale=scale)
    x_cdf = kappa4.cdf(x, h, k, loc=loc, scale=scale)
    # 2. Direction
    alpha_pdf = np.sum(
        [vonmises.pdf(alpha, k, loc=u) * w for k, u, w in vonmises_params],
        axis=0)
    alpha_cdf = np.sum(
        [vonmises.cdf(alpha, k, loc=u) * w for k, u, w in vonmises_params],
        axis=0)
    # 3. Connection
    phi = 2 * pi * (x_cdf - alpha_cdf)
    phi_pdf = np.sum(
        [vonmises.pdf(phi, k, loc=u) * w for k, u, w in connection_params],
        axis=0)
    if cartesian == True:
        pdf = div0(2 * pi * x_pdf * alpha_pdf * phi_pdf, x)
    else:
        pdf = 2 * pi * x_pdf * alpha_pdf * phi_pdf
    return pdf
Ejemplo n.º 4
0
def phi_from_speed_dir(df_speed, df_dir, kap_params, dir_params):
    from scipy.stats import kappa4, vonmises
    k, h, scale, loc = kap_params['k'], kap_params['h'], kap_params['scale'], kap_params['loc']
    speed_cdf = kappa4.cdf(df_speed, h, k, loc=loc, scale=scale)
    alpha_cdf = np.sum([vonmises.cdf(df_dir/180*pi, k, loc=u) * w for k, u, w in dir_params], axis=0)
    phi = 2*pi*(speed_cdf - alpha_cdf)%(2*pi)
    return phi
Ejemplo n.º 5
0
def vm_cdf_diff(inputs,heading_mean,kappa):
    heading_cdf= lambda theta : vonmises.cdf(theta,loc=heading_mean,kappa=kappa)
    scale = inputs[1]-inputs[0]
    inputs_shifted = inputs-scale
    outputs = np.zeros(len(inputs))
    for i in range(len(inputs)):
        outputs[i] = heading_cdf(inputs[i]) - heading_cdf(inputs_shifted[i])
    return outputs
Ejemplo n.º 6
0
def vonCoordinates(mu, kappa, size, alpha):
    tRads = numpy.random.vonmises(mu, kappa, size)
    tPdf = vonmises.pdf(tRads, loc=mu, kappa=kappa)
    tInterval = vonmises.interval(
        alpha, loc=mu, kappa=kappa
    )  #Endpoints of the range that contains alpha percent of the distribution
    tCdf = vonmises.cdf(tInterval, loc=mu, kappa=kappa)
    tDegs = numpy.degrees(tRads)
    tmpArray = tools.coordinatetools.pol2cart(tDegs, dictGen['stimDist'])
    coordList = zip(tmpArray[0], tmpArray[1])
    return (coordList, tPdf, tCdf)
Ejemplo n.º 7
0
    def cdf(X, parameters):
        """
        Calculates the cdf for each point in the data X given mean mu and
        precision kappa.
        Inputs:
            X: a column of data (numpy)
            parameters: a dict with the following keys
                mu: the Von Mises mean
                kappa: the precision of the Von Mises
        """
        check_data_type_column_data(X)
        check_model_params_dict(parameters)

        return vonmises.cdf(X-math.pi, parameters['mu']-math.pi, parameters['kappa'])
Ejemplo n.º 8
0
    def cdf(X, parameters):
        """
        Calculates the cdf for each point in the data X given mean mu and 
        precision kappa.
        Inputs:
            X: a column of data (numpy)
            parameters: a dict with the following keys
                mu: the Von Mises mean
                kappa: the precision of the Von Mises
        """
        check_data_type_column_data(X)
        check_model_params_dict(parameters)

        return vonmises.cdf(X - math.pi, parameters['mu'] - math.pi,
                            parameters['kappa'])
Ejemplo n.º 9
0
 def solve(z):
     k = z[0]
     c1 = vonmises.cdf(angle, k) - 0.9  #cdf(angle, k) - 0.9
     return [c1]
# Display the probability density function (``pdf``):

x = np.linspace(vonmises.ppf(0.01, kappa), vonmises.ppf(0.99, kappa), 100)
ax.plot(x, vonmises.pdf(x, kappa), 'r-', lw=5, alpha=0.6, label='vonmises pdf')

# Alternatively, the distribution object can be called (as a function)
# to fix the shape, location and scale parameters. This returns a "frozen"
# RV object holding the given parameters fixed.

# Freeze the distribution and display the frozen ``pdf``:

rv = vonmises(kappa)
ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')

# Check accuracy of ``cdf`` and ``ppf``:

vals = vonmises.ppf([0.001, 0.5, 0.999], kappa)
np.allclose([0.001, 0.5, 0.999], vonmises.cdf(vals, kappa))
# True

# Generate random numbers:

r = vonmises.rvs(kappa, size=1000)

# And compare the histogram:

ax.hist(r, normed=True, histtype='stepfilled', alpha=0.2)
ax.legend(loc='best', frameon=False)
plt.show()
 def cdf(self, dist, v):
     return vonmises.cdf(v, *self._get_params(dist))
def largeur95(kappa):
    x = 0
    while vonmises.cdf(x, kappa) < 0.975:
        x += 0.01
    return x * (180 / np.pi)
def largeur(kappa, ran=70):
    x = 0
    while vonmises.cdf(x, kappa) < 0.5 + (ran / 200.):
        x += 0.001
    return x * (180 / np.pi)