def test_lmer_basic_filtering(): groups = ['control', 'treatment', 'control', 'treatment'] repetitions = [1, 1, 2, 2] features = [ [100, 99, 80, 120, 140, 150, 100, 100, 110, 111, 140, 145], [115, 110, 90, 110, 145, 155, 110, 120, 115, 120, 120, 150, 100, 90, 100], [150, 150, 130, 170, 190, 250, 150, 150, 160, 161, 180, 195, 130, 120, 125, 130, 125], [155, 155, 135, 175, 195, 255, 155, 155, 165, 165, 185, 200, 135, 125, 130, 135, 140, 150, 135, 140] ] datasets = [] for ff in features: ds = dclab.new_dataset({"deform": ff}) ds.config["setup"]["chip region"] = "channel" # apply some filters datasets.append(ds) rlme4 = Rlme4(model="lmer", feature="deform") for ii in range(len(datasets)): rlme4.add_dataset(datasets[ii], groups[ii], repetitions[ii]) res = rlme4.fit() assert np.allclose(res["anova p-value"], 0.8434625179432129) # filters should have an effect for ds in datasets: ds.filter.manual[:4] = False ds.apply_filter() res2 = rlme4.fit() assert not np.allclose(res["anova p-value"], res2["anova p-value"])
def test_lmer_basic_nan(): groups = ['control', 'treatment', 'control', 'treatment'] repetitions = [1, 1, 2, 2] features = [ [100, np.inf, 80, np.nan, 140, 150, 100, 100, 110, 111, 140, 145], [115, 110, 90, 110, 145, 155, 110, 120, 115, 120, 120, 150, 100, 90, 100], [150, 150, 130, 170, 190, 250, 150, 150, 160, 161, 180, 195, 130, 120, 125, 130, 125], [155, 155, 135, 175, 195, 255, 155, 155, 165, 165, 185, 200, 135, 125, 130, 135, 140, 150, 135, 140] ] datasets = [] for ff in features: ds = dclab.new_dataset({"deform": ff}) ds.config["setup"]["chip region"] = "channel" assert ds.config["setup"]["chip region"] == "channel" datasets.append(ds) rlme4 = Rlme4(model="lmer", feature="deform") for ii in range(len(datasets)): rlme4.add_dataset(datasets[ii], groups[ii], repetitions[ii]) res = rlme4.fit() assert np.allclose(res["fixed effects intercept"], 137.37179302516199186)
def test_fail_add_same_dataset(): datasets = standard_datasets(set_region=False) rlme4 = Rlme4(model="lmer", feature="deform") rlme4.add_dataset(datasets[0], "control", 1) with pytest.raises(ValueError, match="has already"): rlme4.add_dataset(datasets[1], "control", 1)
def test_fail_too_few_dataset(): datasets = standard_datasets(set_region=False) rlme4 = Rlme4(model="lmer", feature="deform") rlme4.add_dataset(datasets[0], "control", 1) rlme4.add_dataset(datasets[1], "treatment", 1) with pytest.raises(ValueError, match="Linear mixed effects models" + " require repeated measurements"): rlme4.fit()
def test_fail_get_non_existent_data(): datasets = standard_datasets(set_region=False) rlme4 = Rlme4(model="lmer", feature="deform") rlme4.add_dataset(datasets[0], "control", 1) rlme4.add_dataset(datasets[1], "treatment", 1) rlme4.add_dataset(datasets[2], "control", 2) rlme4.add_dataset(datasets[3], "treatment", 2) rlme4.add_dataset(datasets[3], "treatment", 3) with pytest.raises(ValueError, match="Dataset for group 'control'"): rlme4.get_feature_data(group="control", repetition=3)
def test_glmer_differential(): """Differential Deformation in a generalized linear mixed model""" groups = ['control', 'control', 'control', 'control', 'treatment', 'treatment', 'treatment', 'treatment'] repetitions = [1, 1, 2, 2, 1, 1, 2, 2] datasets = standard_datasets() rlme4 = Rlme4(model="glmer+loglink", feature="deform") for ii in range(len(datasets)): rlme4.add_dataset(datasets[ii], groups[ii], repetitions[ii]) res = rlme4.fit() assert np.allclose(res["fixed effects intercept"], 93.55789706339498) assert rlme4.is_differential() assert rlme4.model == "glmer+loglink" assert np.allclose(res["anova p-value"], 0.000556063024310929) assert res["model converged"]
def test_glmer_basic_larger(): """Original values in a generalized linear mixed model""" groups = ['treatment', 'control', 'treatment', 'control', 'treatment', 'control', 'treatment', 'control'] repetitions = [1, 1, 2, 2, 3, 3, 4, 4] datasets = standard_datasets(set_region=False) rlme4 = Rlme4(model="glmer+loglink", feature="deform") for ii in range(len(datasets)): rlme4.add_dataset(datasets[ii], groups[ii], repetitions[ii]) res = rlme4.fit() assert np.allclose(res["fixed effects intercept"], 15.083832084641697) assert np.allclose(res["anova p-value"], 0.00365675950677214) assert not rlme4.is_differential() assert res["model converged"]
def test_lmer_differential(): """Differential Deformation in a linear mixed model""" groups = ['control', 'control', 'control', 'control', 'treatment', 'treatment', 'treatment', 'treatment'] repetitions = [1, 1, 2, 2, 1, 1, 2, 2] datasets = standard_datasets() rlme4 = Rlme4(model="lmer", feature="deform") for ii in range(len(datasets)): rlme4.add_dataset(datasets[ii], groups[ii], repetitions[ii]) res = rlme4.fit() assert np.allclose(res["fixed effects intercept"], 93.693750004463098) assert rlme4.is_differential() assert rlme4.model == "lmer" assert np.allclose(res["anova p-value"], 0.000602622503360039) assert np.allclose(res["fixed effects intercept"], np.mean(res["fixed effects repetitions"], axis=1)[0]) assert np.allclose(res["fixed effects treatment"], np.mean(res["fixed effects repetitions"], axis=1)[1]) assert res["model converged"]
def test_lmer_basic_larger(): """Original values in a linear mixed model 'Reservoir' measurements are now Controls and 'Channel' measurements are Treatments. This does not use differential deformation. """ groups = ['treatment', 'control', 'treatment', 'control', 'treatment', 'control', 'treatment', 'control'] repetitions = [1, 1, 2, 2, 3, 3, 4, 4] datasets = standard_datasets(set_region=False) rlme4 = Rlme4(model="lmer", feature="deform") for ii in range(len(datasets)): rlme4.add_dataset(datasets[ii], groups[ii], repetitions[ii]) res = rlme4.fit() assert np.allclose(res["fixed effects intercept"], 17.171341507432501) assert np.allclose(res["anova p-value"], 0.000331343267412872) assert not rlme4.is_differential() assert res["model converged"]
def test_lmer_basic(): groups = ['control', 'treatment', 'control', 'treatment'] repetitions = [1, 1, 2, 2] features = [ [100, 99, 80, 120, 140, 150, 100, 100, 110, 111, 140, 145], [115, 110, 90, 110, 145, 155, 110, 120, 115, 120, 120, 150, 100, 90, 100], [150, 150, 130, 170, 190, 250, 150, 150, 160, 161, 180, 195, 130, 120, 125, 130, 125], [155, 155, 135, 175, 195, 255, 155, 155, 165, 165, 185, 200, 135, 125, 130, 135, 140, 150, 135, 140] ] datasets = [] for ff in features: ds = dclab.new_dataset({"deform": ff}) ds.config["setup"]["chip region"] = "channel" assert ds.config["setup"]["chip region"] == "channel" datasets.append(ds) rlme4 = Rlme4(model="lmer", feature="deform") for ii in range(len(datasets)): rlme4.add_dataset(datasets[ii], groups[ii], repetitions[ii]) res = rlme4.fit() assert np.allclose(res["anova p-value"], 0.8434625179432129) assert np.allclose(res["fixed effects intercept"], 136.6365047987075) assert np.allclose(res["fixed effects treatment"], 1.4085644911191584, atol=0, rtol=1e-3) assert np.allclose(res["fixed effects intercept"], np.mean(res["fixed effects repetitions"], axis=1)[0]) assert np.allclose(res["fixed effects treatment"], np.mean(res["fixed effects repetitions"], axis=1)[1]) assert not res["is differential"] assert res["feature"] == "deform" assert res["model"] == "lmer" assert res["model converged"]