Example #1
0
        def out_wls(Psi, S, q):
            S1 = S.copy()
            np.fill_diagonal(S1, 1 - Psi)
            eig_val, eig_vec = utils.eigen_sorted(S1)
            L = eig_vec[:, :q].dot(np.diag(np.sqrt(eig_val[:q])))

            return L
Example #2
0
        def residual_function(Psi, S, n_factors, Sinv, method, obs):
            S1 = S.copy()
            np.fill_diagonal(S1, 1 - Psi)
            if (Sinv is not None):
                Sdinv = np.diag(1 / np.diag(Sinv))
            eig_val, eig_vec = utils.eigen_sorted(S1)
            eig_val[eig_val < np.finfo(np.float64).eps] = \
                                            100 * np.finfo(
                                                np.float64).eps * 100
            if n_factors > 1:
                loadings = eig_vec[:, :n_factors].dot(
                    np.diag(np.sqrt(eig_val[:n_factors])))

            else:
                loadings = eig_vec[:, 0:1] * np.sqrt(eig_val[0])

            model = loadings.dot(loadings.T)

            if method == 'wls':
                residual = Sdinv.dot((S1 - model) ** 2).dot(Sdinv)

            elif method == 'gls':
                residual = (Sinv.dot(S1 - model)) ** 2
                
            else:
                residual = (S1 - model) ** 2

                if method == 'minres':
                    np.fill_diagonal(residual, 0)
                    
                else: # minchi
                    residual *= obs
                    np.fill_diagonal(residual, 0)

            return np.sum(residual)