示例#1
0
def denoise_OL(S, do_plot=True):

    np.argwhere(np.isnan(S))

    # cor.shape = (1000,1000). If rowvar=1 - row represents a var, with observations in the columns.
    cor = np.corrcoef(S, rowvar=0)
    eVal0, eVec0 = mp.getPCA(cor)
    print(np.argwhere(np.isnan(np.diag(eVal0))))

    # code snippet 2.4
    q = float(S.shape[0]) / S.shape[1]  #T/N
    eMax0, var0 = mp.findMaxEval(np.diag(eVal0), q, bWidth=.01)
    nFacts0 = eVal0.shape[0] - np.diag(eVal0)[::-1].searchsorted(eMax0)

    if do_plot:
        fig = plt.figure()
        ax = fig.add_subplot(111)
        ax.hist(np.diag(eVal0), density=True,
                bins=100)  #, normed = True)  #normed = True,

        pdf0 = mp.mpPDF(var0, q=S.shape[0] / float(S.shape[1]), pts=N)
        pdf1 = mp.fitKDE(np.diag(eVal0), bWidth=.005)  #empirical pdf

        #plt.plot(pdf1.keys(), pdf1, color='g') #no point in drawing this
        plt.plot(pdf0.keys(), pdf0, color='r')
        plt.show()

    # code snippet 2.5 - denoising by constant residual eigenvalue
    corr1 = mp.denoisedCorr(eVal0, eVec0, nFacts0)
    eVal1, eVec1 = mp.getPCA(corr1)

    return eVal0, eVec0, eVal1, eVec1, corr1, var0
def deNoiseCov(cov0, q, bWidth):
    corr0 = mp.cov2corr(cov0)
    eVal0, eVec0 = mp.getPCA(corr0)
    eMax0, var0 = mp.findMaxEval(np.diag(eVal0), q, bWidth)
    nFacts0 = eVal0.shape[0]-np.diag(eVal0)[::-1].searchsorted(eMax0)
    corr1 = mp.denoisedCorr(eVal0, eVec0, nFacts0) #denoising by constant residual eigenvalue method
    cov1 = corr2cov(corr1, np.diag(cov0)**.5)
    return cov1
示例#3
0
    # use matrix of returns to calc correlation
    S, instrument_returns = calculate_returns(S_value)
    _, instrument_returns = calculate_returns(S_value,
                                              percentageAsProduct=True)
    #S = S_value
    #print performance ascending
    print(np.asarray(portfolio_name)[np.argsort(instrument_returns)])

    #calculate_correlation(S)
    eVal0, eVec0, denoised_eVal, denoised_eVec, denoised_corr, var0 = denoise_OL(
        S)
    detoned_corr = mp.detoned_corr(denoised_corr,
                                   denoised_eVal,
                                   denoised_eVec,
                                   market_component=1)
    detoned_eVal, detoned_eVec = mp.getPCA(detoned_corr)

    denoised_eigenvalue = np.diag(denoised_eVal)
    eigenvalue_prior = np.diag(eVal0)
    plt.plot(range(0, len(denoised_eigenvalue)),
             np.log(denoised_eigenvalue),
             color='r',
             label="Denoised eigen-function")
    plt.plot(range(0, len(eigenvalue_prior)),
             np.log(eigenvalue_prior),
             color='g',
             label="Original eigen-function")
    plt.xlabel("Eigenvalue number")
    plt.ylabel("Eigenvalue (log-scale)")
    plt.legend(loc="upper right")
    plt.show()