def setUp(self): # Generate 2 fake classification datasets, one with 2 classes and another with 3 self.twoclass_dataset = make_classification(40, n_features=100, n_informative=5, n_redundant=5, n_classes=2) self.three_classdataset = make_classification(40, n_features=100, n_informative=5, n_redundant=5, n_classes=3) y_scaler = ChemometricsScaler(with_mean=False, with_std=False) self.plsreg = ChemometricsPLS(n_comps=3, yscaler=y_scaler) self.plslog = ChemometricsPLS_Logistic(n_comps=3)
class test_plslogistic(unittest.TestCase): """ Test the functionality of the PLS - Logistic code. Most of the tests focus on the DA model specifics and classification metrics. The underlying PLS regression functionality is tested in the 'test_plsobjconsistency' suite of tests. """ def setUp(self): # Generate 2 fake classification datasets, one with 2 classes and another with 3 self.twoclass_dataset = make_classification(40, n_features=100, n_informative=5, n_redundant=5, n_classes=2) self.three_classdataset = make_classification(40, n_features=100, n_informative=5, n_redundant=5, n_classes=3) y_scaler = ChemometricsScaler(with_mean=False, with_std=False) self.plsreg = ChemometricsPLS(n_comps=3, yscaler=y_scaler) self.plslog = ChemometricsPLS_Logistic(n_comps=3) def test_single_y(self): self.plsreg.fit(self.twoclass_dataset[0], self.twoclass_dataset([1])) self.plslog.fit(self.twoclass_dataset[0], self.twoclass_dataset([1])) self.assertEqual(self.plsreg.rotations_cs, self.plslog.rotations_cs) def test_multi_y(self): self.plsreg.fit(self.threeclass_dataset[0], self.threeclass_dataset([1])) self.plslog.fit(self.threeclass_dataset[0], self.threeclass_dataset([1])) self.assertEqual(self.data.noFeatures, self.noFeat) def test_(self): self.assertEqual()
def setUp(self): """ :return: """ try: multiclass = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/classification_multiclass.csv')) twoclass = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/classification_twoclass.csv')) except OSError as exp: #os.system("python gen_synthetic_datasets.py") import tests.gen_synthetic_datasets multiclass = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/classification_multiclass.csv')) twoclass = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/classification_twoclass.csv')) finally: # check this self.da_mat = multiclass['Class_Vector'].values self.da = twoclass['Class'].values self.xmat_multi = multiclass.iloc[:, 5::].values self.xmat = twoclass.iloc[:, 1::].values # Set up the same scalers y_scaler = ChemometricsScaler(0, with_std=False, with_mean=True) self.plsreg = ChemometricsPLS(ncomps=3, yscaler=y_scaler) self.plsda = ChemometricsPLSDA(ncomps=3) # Generate the dummy matrix so we can run the pls regression objects in the same conditions as # the discriminant ones self.dummy_y = pds.get_dummies(self.da_mat).values
class TestPLSObjectConsistency(unittest.TestCase): """ Verify agreement of the PLS regression component between ChemometricsPLS and Discriminant analysis versions. """ def setUp(self): """ :return: """ try: multiclass = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/classification_multiclass.csv')) twoclass = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/classification_twoclass.csv')) except OSError as exp: #os.system("python gen_synthetic_datasets.py") import tests.gen_synthetic_datasets multiclass = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/classification_multiclass.csv')) twoclass = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/classification_twoclass.csv')) finally: # check this self.da_mat = multiclass['Class_Vector'].values self.da = twoclass['Class'].values self.xmat_multi = multiclass.iloc[:, 5::].values self.xmat = twoclass.iloc[:, 1::].values # Set up the same scalers y_scaler = ChemometricsScaler(0, with_std=False, with_mean=True) self.plsreg = ChemometricsPLS(ncomps=3, yscaler=y_scaler) self.plsda = ChemometricsPLSDA(ncomps=3) # Generate the dummy matrix so we can run the pls regression objects in the same conditions as # the discriminant ones self.dummy_y = pds.get_dummies(self.da_mat).values def test_single_y(self): """ :return: """ self.plsreg.fit(self.xmat, self.da) self.plsda.fit(self.xmat, self.da) assert_allclose(self.plsreg.scores_t, self.plsda.scores_t) assert_allclose(self.plsreg.scores_u, self.plsda.scores_u) assert_allclose(self.plsreg.rotations_cs, self.plsda.rotations_cs) assert_allclose(self.plsreg.rotations_ws, self.plsda.rotations_ws) assert_allclose(self.plsreg.weights_w, self.plsda.weights_w) assert_allclose(self.plsreg.weights_c, self.plsda.weights_c) assert_allclose(self.plsreg.loadings_p, self.plsda.loadings_p) assert_allclose(self.plsreg.loadings_q, self.plsda.loadings_q) assert_allclose(self.plsreg.beta_coeffs, self.plsda.beta_coeffs) assert_allclose(self.plsreg.modelParameters['R2Y'], self.plsda.modelParameters['PLS']['R2Y']) assert_allclose(self.plsreg.modelParameters['R2X'], self.plsda.modelParameters['PLS']['R2X']) assert_allclose(self.plsreg.modelParameters['SSX'], self.plsda.modelParameters['PLS']['SSX']) assert_allclose(self.plsreg.modelParameters['SSY'], self.plsda.modelParameters['PLS']['SSY']) assert_allclose(self.plsreg.modelParameters['SSXcomp'], self.plsda.modelParameters['PLS']['SSXcomp']) assert_allclose(self.plsreg.modelParameters['SSYcomp'], self.plsda.modelParameters['PLS']['SSYcomp']) def test_multi_y(self): """ :return: """ self.plsreg.fit(self.xmat_multi, self.dummy_y) self.plsda.fit(self.xmat_multi, self.da_mat) assert_allclose(self.plsreg.scores_t, self.plsda.scores_t) assert_allclose(self.plsreg.scores_u, self.plsda.scores_u) assert_allclose(self.plsreg.rotations_cs, self.plsda.rotations_cs) assert_allclose(self.plsreg.rotations_ws, self.plsda.rotations_ws) assert_allclose(self.plsreg.weights_w, self.plsda.weights_w) assert_allclose(self.plsreg.weights_c, self.plsda.weights_c) assert_allclose(self.plsreg.loadings_p, self.plsda.loadings_p) assert_allclose(self.plsreg.loadings_q, self.plsda.loadings_q) assert_allclose(self.plsreg.beta_coeffs, self.plsda.beta_coeffs) assert_allclose(self.plsreg.modelParameters['R2Y'], self.plsda.modelParameters['PLS']['R2Y']) assert_allclose(self.plsreg.modelParameters['R2X'], self.plsda.modelParameters['PLS']['R2X']) assert_allclose(self.plsreg.modelParameters['SSX'], self.plsda.modelParameters['PLS']['SSX']) assert_allclose(self.plsreg.modelParameters['SSY'], self.plsda.modelParameters['PLS']['SSY']) assert_allclose(self.plsreg.modelParameters['SSXcomp'], self.plsda.modelParameters['PLS']['SSXcomp']) assert_allclose(self.plsreg.modelParameters['SSYcomp'], self.plsda.modelParameters['PLS']['SSYcomp'])
from pyChemometrics import ChemometricsScaler, ChemometricsPLS import numpy as np import pandas as pds # Use the standard datasets t_dset = pds.read_csv('./tests/test_data/regression.csv') xmat = t_dset.iloc[:, 1::].values y = t_dset.iloc[:, 0].values x_scaler = ChemometricsScaler(1) y_scaler = ChemometricsScaler(1) plsmodel = ChemometricsPLS(ncomps=3, xscaler=x_scaler, yscaler=y_scaler) plsmodel.fit(xmat, y) np.random.seed(0) plsmodel.cross_validation(xmat, y) np.savetxt('./tests/test_data/pls_loadings_p.csv', plsmodel.loadings_p, fmt='%.18e', delimiter=',', newline='\n', header='', footer='', comments='#') np.savetxt('./tests/test_data/pls_scores_t.csv', plsmodel.scores_t, fmt='%.18e',
def setUp(self): try: regression_problem = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/regression.csv')) multiblock_regression_problem = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/regression_multiblock.csv')) except (IOError, OSError) as ioerr: #os.system("python gen_synthetic_datasets.py") import tests.gen_synthetic_datasets regression_problem = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/regression.csv')) multiblock_regression_problem = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/regression_multiblock.csv')) finally: # Load expected values for a PLS regression against a Y vector self.expected_loadings_p = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_loadings_p.csv'), delimiter=',') self.expected_loadings_q = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_loadings_q.csv'), delimiter=',')[np.newaxis, :] self.expected_weights_w = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_weights_w.csv'), delimiter=',') self.expected_weights_c = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_weights_c.csv'), delimiter=',')[np.newaxis, :] self.expected_scores_t = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_scores_t.csv'), delimiter=',') self.expected_scores_u = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_scores_u.csv'), delimiter=',') self.expected_betacoefs = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_betas.csv'), delimiter=',')[:, np.newaxis] self.expected_vips = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_vip.csv'), delimiter=',') self.expected_dmodx = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_dmodx.csv'), delimiter=',') # Load expected values for a PLS regression model against a Y matrix #self.expected_loadings_p_yblock = np.loadtxt('./test_data/pls_reg_yblock_loadings_p.csv', delimiter=',') #self.expected_weights_w_yblock = np.loadtxt('./test_data/pls_reg_yblock_weights_w.csv', delimiter=',') #self.expected_scores_t_yblock = np.loadtxt('./test_data/pls_reg_yblock_scores_t.csv', delimiter=',') #self.expected_scores_u_yblock = np.loadtxt('./test_data/pls_reg_yblock_scores_u.csv', delimiter=',') #self.expected_weights_c_yblock = np.loadtxt('./test_data/pls_reg_yblock_weights_c.csv', delimiter=',') #self.expected_loadings_q_yblock = np.loadtxt('./test_data/pls_reg_yblock_loadings_q.csv', delimiter=',') #self.expected_betacoefs_yblock = np.loadtxt('./test_data/pls_reg_yblock_betacoefs.csv', delimiter=',') self.expected_modelParameters = { 'R2Y': 0.99442967438303576, 'R2X': 0.022903901163376705, 'SSYcomp': np.array([5.42418672, 1.20742786, 0.27851628]), 'SSXcomp': np.array([9750.59475071, 9779.57249348, 9770.96098837]) } self.expected_cvParameters = { 'Q2Y': 0.069284226071602006, 'Q2X': -0.12391667143436425, 'MeanR2X_Training': 0.025896665665079883, 'MeanR2Y_Training': 0.99636477396947942, 'StdevR2Y_Training': 0.00091660538957527582, 'StdevR2X_Training': 0.0010098198504153058, 'StdevR2X_Test': 0.02386260538832127, 'StdevR2Y_Test': 0.25034195769401973, 'MeanR2X_Test': -0.022542842216950101, 'MeanR2Y_Test': 0.096991536519031446 } self.expected_t2 = np.array([7.00212848, 6.63400492, 5.6325462]) self.expected_outliers_t2 = np.array([5, 33]) self.expected_outliers_dmodx = np.array([]) self.expected_scores_t_par = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_scores_t_par.csv'), delimiter=',') self.expected_betas_par = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_betas_par.csv'), delimiter=',')[:, np.newaxis] self.expected_scores_t_mc = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_scores_t_mc.csv'), delimiter=',') self.expected_betas_mc = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_betas_mc.csv'), delimiter=',')[:, np.newaxis] self.expected_vip_mc = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_vip_mc.csv'), delimiter=',') self.expected_vip_par = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_vip_par.csv'), delimiter=',') # check this self.y = regression_problem.iloc[:, 0].values self.ymat = multiblock_regression_problem.values self.xmat = regression_problem.iloc[:, 1::].values self.xmat_multiy = multiblock_regression_problem.values self.expected_permutation = {} x_scaler = ChemometricsScaler(1) y_scaler = ChemometricsScaler(1) self.plsreg = ChemometricsPLS(ncomps=3, xscaler=x_scaler, yscaler=y_scaler) self.plsreg_multiblock = ChemometricsPLS(ncomps=3, xscaler=x_scaler, yscaler=y_scaler)
def test_scalers(self): """ :return: """ x_scaler_par = ChemometricsScaler(1 / 2) y_scaler_par = ChemometricsScaler(1 / 2) x_scaler_mc = ChemometricsScaler(0) y_scaler_mc = ChemometricsScaler(0) pareto_model = ChemometricsPLS(ncomps=3, xscaler=x_scaler_par, yscaler=y_scaler_par) pareto_model_multiy = ChemometricsPLS(ncomps=3, xscaler=x_scaler_par, yscaler=y_scaler_par) mc_model = ChemometricsPLS(ncomps=3, xscaler=x_scaler_mc, yscaler=y_scaler_mc) mc_model_multiy = ChemometricsPLS(ncomps=3, xscaler=x_scaler_mc, yscaler=y_scaler_mc) pareto_model.fit(self.xmat, self.y) pareto_model_multiy.fit(self.xmat_multiy, self.ymat) mc_model.fit(self.xmat, self.y) mc_model_multiy.fit(self.xmat_multiy, self.ymat) assert_allclose(pareto_model.scores_t, self.expected_scores_t_par) assert_allclose(pareto_model.beta_coeffs, self.expected_betas_par) assert_allclose(pareto_model.VIP(), self.expected_vip_par) #assert_allclose(pareto_model_multiy.scores_t, self.expected_scores_t_yblock_par) #assert_allclose(pareto_model_multiy.beta_coeffs, self.expected_betacoefs_yblock_par) assert_allclose(mc_model.scores_t, self.expected_scores_t_mc) assert_allclose(mc_model.beta_coeffs, self.expected_betas_mc) assert_allclose(mc_model.VIP(), self.expected_vip_mc)
class TestPLS(unittest.TestCase): """ Test the ChemometricsPLS object functionality, in single Y and multiple Y case. """ def setUp(self): try: regression_problem = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/regression.csv')) multiblock_regression_problem = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/regression_multiblock.csv')) except (IOError, OSError) as ioerr: #os.system("python gen_synthetic_datasets.py") import tests.gen_synthetic_datasets regression_problem = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/regression.csv')) multiblock_regression_problem = pds.read_csv( os.path.join(os.path.dirname(__file__), './test_data/regression_multiblock.csv')) finally: # Load expected values for a PLS regression against a Y vector self.expected_loadings_p = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_loadings_p.csv'), delimiter=',') self.expected_loadings_q = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_loadings_q.csv'), delimiter=',')[np.newaxis, :] self.expected_weights_w = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_weights_w.csv'), delimiter=',') self.expected_weights_c = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_weights_c.csv'), delimiter=',')[np.newaxis, :] self.expected_scores_t = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_scores_t.csv'), delimiter=',') self.expected_scores_u = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_scores_u.csv'), delimiter=',') self.expected_betacoefs = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_betas.csv'), delimiter=',')[:, np.newaxis] self.expected_vips = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_vip.csv'), delimiter=',') self.expected_dmodx = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_dmodx.csv'), delimiter=',') # Load expected values for a PLS regression model against a Y matrix #self.expected_loadings_p_yblock = np.loadtxt('./test_data/pls_reg_yblock_loadings_p.csv', delimiter=',') #self.expected_weights_w_yblock = np.loadtxt('./test_data/pls_reg_yblock_weights_w.csv', delimiter=',') #self.expected_scores_t_yblock = np.loadtxt('./test_data/pls_reg_yblock_scores_t.csv', delimiter=',') #self.expected_scores_u_yblock = np.loadtxt('./test_data/pls_reg_yblock_scores_u.csv', delimiter=',') #self.expected_weights_c_yblock = np.loadtxt('./test_data/pls_reg_yblock_weights_c.csv', delimiter=',') #self.expected_loadings_q_yblock = np.loadtxt('./test_data/pls_reg_yblock_loadings_q.csv', delimiter=',') #self.expected_betacoefs_yblock = np.loadtxt('./test_data/pls_reg_yblock_betacoefs.csv', delimiter=',') self.expected_modelParameters = { 'R2Y': 0.99442967438303576, 'R2X': 0.022903901163376705, 'SSYcomp': np.array([5.42418672, 1.20742786, 0.27851628]), 'SSXcomp': np.array([9750.59475071, 9779.57249348, 9770.96098837]) } self.expected_cvParameters = { 'Q2Y': 0.069284226071602006, 'Q2X': -0.12391667143436425, 'MeanR2X_Training': 0.025896665665079883, 'MeanR2Y_Training': 0.99636477396947942, 'StdevR2Y_Training': 0.00091660538957527582, 'StdevR2X_Training': 0.0010098198504153058, 'StdevR2X_Test': 0.02386260538832127, 'StdevR2Y_Test': 0.25034195769401973, 'MeanR2X_Test': -0.022542842216950101, 'MeanR2Y_Test': 0.096991536519031446 } self.expected_t2 = np.array([7.00212848, 6.63400492, 5.6325462]) self.expected_outliers_t2 = np.array([5, 33]) self.expected_outliers_dmodx = np.array([]) self.expected_scores_t_par = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_scores_t_par.csv'), delimiter=',') self.expected_betas_par = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_betas_par.csv'), delimiter=',')[:, np.newaxis] self.expected_scores_t_mc = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_scores_t_mc.csv'), delimiter=',') self.expected_betas_mc = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_betas_mc.csv'), delimiter=',')[:, np.newaxis] self.expected_vip_mc = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_vip_mc.csv'), delimiter=',') self.expected_vip_par = np.loadtxt(os.path.join( os.path.dirname(__file__), './test_data/pls_vip_par.csv'), delimiter=',') # check this self.y = regression_problem.iloc[:, 0].values self.ymat = multiblock_regression_problem.values self.xmat = regression_problem.iloc[:, 1::].values self.xmat_multiy = multiblock_regression_problem.values self.expected_permutation = {} x_scaler = ChemometricsScaler(1) y_scaler = ChemometricsScaler(1) self.plsreg = ChemometricsPLS(ncomps=3, xscaler=x_scaler, yscaler=y_scaler) self.plsreg_multiblock = ChemometricsPLS(ncomps=3, xscaler=x_scaler, yscaler=y_scaler) def test_single_y(self): """ :return: """ self.plsreg.fit(self.xmat, self.y) # Test model coefficients , scores and goodness of fit assert_allclose(self.plsreg.loadings_p, self.expected_loadings_p) assert_allclose(self.plsreg.loadings_q, self.expected_loadings_q) assert_allclose(self.plsreg.weights_w, self.expected_weights_w) assert_allclose(self.plsreg.weights_c, self.expected_weights_c) assert_allclose(self.plsreg.scores_t, self.expected_scores_t) assert_allclose(self.plsreg.scores_u, self.expected_scores_u) assert_allclose(self.plsreg.beta_coeffs, self.expected_betacoefs) assert_allclose(self.plsreg.modelParameters['R2Y'], self.expected_modelParameters['R2Y']) assert_allclose(self.plsreg.modelParameters['R2X'], self.expected_modelParameters['R2X']) assert_allclose(self.plsreg.modelParameters['SSXcomp'], self.expected_modelParameters['SSXcomp']) assert_allclose(self.plsreg.modelParameters['SSYcomp'], self.expected_modelParameters['SSYcomp']) assert_allclose(self.plsreg.VIP(), self.expected_vips) #def test_multi_y(self): # self.plsreg_multiblock.fit(self.xmat_multiy, self.ymat) # # Assert equality of main model parameters # assert_allclose(self.plsreg_multiblock.loadings_p, self.expected_loadings_p_yblock) # assert_allclose(self.plsreg_multiblock.loadings_q, self.expected_loadings_q_yblock) # assert_allclose(self.plsreg_multiblock.weights_w, self.expected_weights_w_yblock) # assert_allclose(self.plsreg_multiblock.weights_c, self.expected_weights_c_yblock) # assert_allclose(self.plsreg_multiblock.scores_t, self.expected_scores_t_yblock) # assert_allclose(self.plsreg_multiblock.scores_u, self.expected_scores_u_yblock) # assert_allclose(self.plsreg_multiblock.beta_coeffs, self.expected_betacoefs_yblock) # assert_allclose(self.plsreg_multiblock.VIP(), self.expected_vipsw_yblock) # assert_allclose(self.plsreg.modelParameters, self.expected_modelParameters) def test_scalers(self): """ :return: """ x_scaler_par = ChemometricsScaler(1 / 2) y_scaler_par = ChemometricsScaler(1 / 2) x_scaler_mc = ChemometricsScaler(0) y_scaler_mc = ChemometricsScaler(0) pareto_model = ChemometricsPLS(ncomps=3, xscaler=x_scaler_par, yscaler=y_scaler_par) pareto_model_multiy = ChemometricsPLS(ncomps=3, xscaler=x_scaler_par, yscaler=y_scaler_par) mc_model = ChemometricsPLS(ncomps=3, xscaler=x_scaler_mc, yscaler=y_scaler_mc) mc_model_multiy = ChemometricsPLS(ncomps=3, xscaler=x_scaler_mc, yscaler=y_scaler_mc) pareto_model.fit(self.xmat, self.y) pareto_model_multiy.fit(self.xmat_multiy, self.ymat) mc_model.fit(self.xmat, self.y) mc_model_multiy.fit(self.xmat_multiy, self.ymat) assert_allclose(pareto_model.scores_t, self.expected_scores_t_par) assert_allclose(pareto_model.beta_coeffs, self.expected_betas_par) assert_allclose(pareto_model.VIP(), self.expected_vip_par) #assert_allclose(pareto_model_multiy.scores_t, self.expected_scores_t_yblock_par) #assert_allclose(pareto_model_multiy.beta_coeffs, self.expected_betacoefs_yblock_par) assert_allclose(mc_model.scores_t, self.expected_scores_t_mc) assert_allclose(mc_model.beta_coeffs, self.expected_betas_mc) assert_allclose(mc_model.VIP(), self.expected_vip_mc) #assert_allclose(mc_model_multiy.scores_t, self.expected_scores_t_yblock_mc) #assert_allclose(mc_model_multiy.beta_coeffs, self.expected_betacoefs_yblock_mc) def test_cv_single_y(self): """ :return: """ # Fix the seed for the permutation test and cross_validation np.random.seed(0) self.plsreg.cross_validation(self.xmat, self.y) assert_allclose(self.plsreg.cvParameters['Q2Y'], self.expected_cvParameters['Q2Y']) assert_allclose(self.plsreg.cvParameters['Q2X'], self.expected_cvParameters['Q2X']) assert_allclose(self.plsreg.cvParameters['MeanR2X_Training'], self.expected_cvParameters['MeanR2X_Training']) assert_allclose(self.plsreg.cvParameters['MeanR2Y_Training'], self.expected_cvParameters['MeanR2Y_Training']) assert_allclose(self.plsreg.cvParameters['MeanR2X_Test'], self.expected_cvParameters['MeanR2X_Test']) assert_allclose(self.plsreg.cvParameters['MeanR2Y_Test'], self.expected_cvParameters['MeanR2Y_Test']) assert_allclose(self.plsreg.cvParameters['StdevR2X_Training'], self.expected_cvParameters['StdevR2X_Training']) assert_allclose(self.plsreg.cvParameters['StdevR2Y_Training'], self.expected_cvParameters['StdevR2Y_Training']) assert_allclose(self.plsreg.cvParameters['StdevR2X_Test'], self.expected_cvParameters['StdevR2X_Test']) assert_allclose(self.plsreg.cvParameters['StdevR2Y_Test'], self.expected_cvParameters['StdevR2Y_Test']) #def test_cv_multi_y(self): # # Fix the seed for the permutation test and cross_validation # np.random.seed(0) # self.plsreg_multiy.cross_validation(self.xmat_multi, self.da_mat) # assert_allclose(self.plsreg_multiblock.cvParameters, self.expected_cvParams_multi) def test_permutation(self): """ :return: """ #self.plsreg.fit(self.xmat, self.y) # Fix the seed for the permutation test and cross_validation #np.random.seed(0) #self.plsreg.cross_validation(self.xmat, self.y) #permutation_results = self.plsreg.permutation_test(self.xmat, self.da, nperms=5) #assert_allclose(permutation_results[0], self.permutation_results) def test_hotellingt2(self): """ :return: """ self.plsreg.fit(self.xmat, self.y) t2 = self.plsreg.hotelling_T2(comps=None) assert_allclose(t2, self.expected_t2) def test_dmodx(self): """ :return: """ self.plsreg.fit(self.xmat, self.y) dmodx = self.plsreg.dmodx(self.xmat) assert_allclose(dmodx, self.expected_dmodx) def test_outliers(self): """ :return: """ self.plsreg.fit(self.xmat, self.y) outliers_t2 = self.plsreg.outlier(self.xmat) outliers_dmodx = self.plsreg.outlier(self.xmat, measure='DmodX') assert_allclose(outliers_t2, self.expected_outliers_t2) assert_allclose(outliers_dmodx, self.expected_outliers_dmodx)