def test_pca_princomp(): pcares = pca(xf) check_pca_princomp(pcares, princomp1) pcares = pca(xf[:20, :]) check_pca_princomp(pcares, princomp2) pcares = pca(xf[:20, :] - xf[:20, :].mean(0)) check_pca_princomp(pcares, princomp3) pcares = pca(xf[:20, :] - xf[:20, :].mean(0), demean=0) check_pca_princomp(pcares, princomp3)
def test_pca_princomp(): pcares = pca(xf) check_pca_princomp(pcares, princomp1) pcares = pca(xf[:20,:]) check_pca_princomp(pcares, princomp2) pcares = pca(xf[:20,:]-xf[:20,:].mean(0)) check_pca_princomp(pcares, princomp3) pcares = pca(xf[:20,:]-xf[:20,:].mean(0), demean=0) check_pca_princomp(pcares, princomp3)
def test_pca_svd(): xreduced, factors, evals, evecs = pca(xf) factors_wconst = np.c_[factors, np.ones((factors.shape[0], 1))] beta = np.dot(np.linalg.pinv(factors_wconst), xf) #np.dot(np.linalg.pinv(factors_wconst),x2/1000.).T[:,:4] - evecs assert_array_almost_equal(beta.T[:, :4], evecs, 14) xred_svd, factors_svd, evals_svd, evecs_svd = pcasvd(xf, keepdim=0) assert_array_almost_equal(evals_svd, evals, 14) msign = (evecs / evecs_svd)[0] assert_array_almost_equal(msign * evecs_svd, evecs, 14) assert_array_almost_equal(msign * factors_svd, factors, 13) assert_array_almost_equal(xred_svd, xreduced, 14) pcares = pca(xf, keepdim=2) pcasvdres = pcasvd(xf, keepdim=2) check_pca_svd(pcares, pcasvdres)
def test_pca_svd(): xreduced, factors, evals, evecs = pca(xf) factors_wconst = np.c_[factors, np.ones((factors.shape[0],1))] beta = np.dot(np.linalg.pinv(factors_wconst), xf) #np.dot(np.linalg.pinv(factors_wconst),x2/1000.).T[:,:4] - evecs assert_array_almost_equal(beta.T[:,:4], evecs, 14) xred_svd, factors_svd, evals_svd, evecs_svd = pcasvd(xf, keepdim=0) assert_array_almost_equal(evals_svd, evals, 14) msign = (evecs/evecs_svd)[0] assert_array_almost_equal(msign*evecs_svd, evecs, 14) assert_array_almost_equal(msign*factors_svd, factors, 13) assert_array_almost_equal(xred_svd, xreduced, 14) pcares = pca(xf, keepdim=2) pcasvdres = pcasvd(xf, keepdim=2) check_pca_svd(pcares, pcasvdres)
def calc_factors(self, x=None, keepdim=0, addconst=True): '''get factor decomposition of exogenous variables This uses principal component analysis to obtain the factors. The number of factors kept is the maximum that will be considered in the regression. ''' if x is None: x = self.exog else: x = np.asarray(x) xred, fact, evals, evecs = pca(x, keepdim=keepdim, normalize=1) self.exog_reduced = xred #self.factors = fact if addconst: self.factors = sm.add_constant(fact, prepend=True) self.hasconst = 1 #needs to be int else: self.factors = fact self.hasconst = 0 #needs to be int self.evals = evals self.evecs = evecs