def warped_stepwise(Y, X=None, K=None, covariates=None, num_restarts=1, max_covariates=10, qv_cutoff=None, pv_cutoff=5e-8): # Xt = X.copy() # Xt -= Xt.mean(axis=0) # Xt /= Xt.std(axis=0) if covariates is None: num_covariates = 0 else: num_covariates = covariates.shape[1] included = [] converged = False iterations = 1 estimated_h2s = [] likelihoods = [] while not converged: m = WarpedLMM(Y, X, K=K, X_selected=covariates, warping_terms=3) m.optimize_restarts(num_restarts, messages=1) y_pheno = m.Y.copy() y_pheno -= y_pheno.mean() y_pheno /= y_pheno.std() if covariates is not None: covariates -= covariates.mean(0) covariates /= covariates.std(0) #import panama.core.testing as testing # pv_lmm_panama = testing.interface(X.copy(), y_pheno.copy(), K.copy(), covariates)[0].flatten() pv_lmm, h2 = fastlmm.assoc_scan(y_pheno.copy(), X.copy(), K=K.copy(), covariates=covariates) if qv_cutoff is not None: qv_lmm = qvalue.estimate(pv_lmm) sorted_qv_ind = np.argsort(qv_lmm) candidate_index = sorted_qv_ind[0] candidate_sign = qv_lmm[candidate_index] significant = (qv_lmm <= qv_cutoff) cutoff = qv_cutoff else: significant = (pv_lmm <= pv_cutoff) sorted_pv_ind = np.argsort(pv_lmm) candidate_index = sorted_pv_ind[0] candidate_sign = pv_lmm[candidate_index] cutoff = pv_cutoff likelihoods.append(m.log_likelihood()) # h2 = m.params['sigma_g']/m.params['sigma_e'] estimated_h2s.append(h2) status = "Iteration: {0}, significant SNPs: {1}, included SNPs: {2}, heritability: {3:.4f}, f: {4}".format( iterations, significant.sum(), len(included), estimated_h2s[-1], likelihoods[-1]) print status if candidate_sign > cutoff or len(included) >= max_covariates: converged = True continue X_sign = X[:, candidate_index:candidate_index + 1] if covariates is not None: covariates = np.append(covariates, X_sign, axis=1) else: covariates = X_sign.copy() covariates.flags.writeable = True iterations += 1 included.append(candidate_index) return y_pheno, m, included, estimated_h2s[-1]
options.covariates) if options.run_test: Y = np.exp(Y) y_pheno, m, _, estimated_h2 = stepwise.warped_stepwise( Y, X, K, covariates=covar, max_covariates=options.max_covariates, num_restarts=options.random_restarts, qv_cutoff=options.qv_cutoff, pv_cutoff=options.pv_cutoff) pv, h2 = fastlmm.assoc_scan(y_pheno.copy(), X, covariates=covar, K=K) if options.out_dir is None: results_file_name = options.phenotype_file.replace('.txt', '') results_file_name += "_warpedlmm_results.txt" else: results_file_name = options.out_dir + "/warpedlmm_results.txt" util.write_results_to_file(snp_data, pv, results_file_name) if options.normal: pv_base, h2_base = fastlmm.assoc_scan(Y.copy(), X, covariates=covar, K=K) util.write_results_to_file(