示例#1
0
def vratio(ts, lag=2, cor='hom'):
    """ the implementation found in the blog Leinenbock
    http://www.leinenbock.com/variance-ratio-test/
    """
    # t = (std((a[lag:]) - (a[1:-lag+1])))**2;
    # b = (std((a[2:]) - (a[1:-1]) ))**2;
    n = len(ts)
    mu = sum(ts[1:] - ts[:-1]) / n
    m = (n - lag + 1) * (1 - lag / n)
    # print( mu, m, lag)
    b = sum(np.square(ts[1:] - ts[:-1] - mu)) / (n - 1)
    t = sum(np.square(ts[lag:] - ts[:-lag] - lag * mu)) / m
    vratio = t / (lag * b)
    la = float(lag)
    if cor == 'hom':
        varvrt = 2 * (2 * la - 1) * (la - 1) / (3 * la * n)
    elif cor == 'het':
        varvrt = 0
        sum2 = sum(np.square(ts[1:] - ts[:-1] - mu))
        for j in range(lag - 1):
            sum1a = np.square(ts[j + 1:] - ts[j:-1] - mu)
            sum1b = np.square(ts[1:n - j] - ts[0:n - j - 1] - mu)
            sum1 = np.dot(sum1a, sum1b)
            delta = sum1 / (sum2**2)
            varvrt = varvrt + ((2 * (la - j) / la)**2) * delta
    zscore = (vratio - 1) / np.sqrt(float(varvrt))
    pval = bsopt.cnorm(zscore)
    return vratio, zscore, pval
示例#2
0
def vratio(ts, lag=2, cor='hom'):
    """ the implementation found in the blog Leinenbock
    http://www.leinenbock.com/variance-ratio-test/
    """
    # t = (std((a[lag:]) - (a[1:-lag+1])))**2;
    # b = (std((a[2:]) - (a[1:-1]) ))**2;
    n = len(ts)
    mu = sum(ts[1:] - ts[:-1]) / n
    m = (n - lag + 1) * (1 - lag / n)
    # print( mu, m, lag)
    b = sum(np.square(ts[1:] - ts[:-1] - mu)) / (n - 1)
    t = sum(np.square(ts[lag:] - ts[:-lag] - lag * mu)) / m
    vratio = t / (lag * b)
    la = float(lag)
    if cor == 'hom':
        varvrt = 2 * (2 * la - 1) * (la - 1) / (3 * la * n)
    elif cor == 'het':
        varvrt = 0;
        sum2 = sum(np.square(ts[1:] - ts[:-1] - mu))
        for j in range(lag - 1):
            sum1a = np.square(ts[j + 1:] - ts[j:-1] - mu)
            sum1b = np.square(ts[1:n - j] - ts[0:n - j - 1] - mu)
            sum1 = np.dot(sum1a, sum1b)
            delta = sum1 / (sum2 ** 2)
            varvrt = varvrt + ((2 * (la - j) / la) ** 2) * delta
    zscore = (vratio - 1) / np.sqrt(float(varvrt))
    pval = bsopt.cnorm(zscore)
    return vratio, zscore, pval
示例#3
0
 def calc_weight(self, xr):
     weight = np.zeros(self._dim)
     xx_adj = xr - self._xs
     npdf = bsopt.pnorm(xx_adj / self._stdev) * self._stdev
     ncdf = bsopt.cnorm(xx_adj / self._stdev)
     diff_pdf = npdf[1:] - npdf[:-1]
     diff_cdf = ncdf[1:] - ncdf[:-1]
     for i in range(1, self._dim - 1):
         weight[i] = (-xx_adj[i + 1] * diff_cdf[i] + diff_pdf[i]) / (self._xs[i + 1] - self._xs[i]) \
                         + (xx_adj[i-1] * diff_cdf[i-1] - diff_pdf[i-1]) / (self._xs[i] - self._xs[i-1])
     weight[0] = ncdf[0] + (-xx_adj[1] * diff_cdf[0] +
                            diff_pdf[0]) / (self._xs[1] - self._xs[0])
     weight[self._dim - 1] = 1 - ncdf[-1] + (
         xx_adj[self._dim - 2] * diff_cdf[self._dim - 2] -
         diff_pdf[self._dim - 2]) / (self._xs[self._dim - 1] -
                                     self._xs[self._dim - 2])
     return weight