Skip to content

Commit 3e94840

Browse files
authored
Add petab.Problem.n_{estimated,measurements,priors} (#243)
Makes it more convenient to compute model selection criteria.
1 parent 7935aae commit 3e94840

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

petab/problem.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,3 +1004,21 @@ def scale_parameters(
10041004
)
10051005
for parameter_id, parameter_value in x_dict.items()
10061006
}
1007+
1008+
@property
1009+
def n_estimated(self) -> int:
1010+
"""The number of estimated parameters."""
1011+
return len(self.x_free_indices)
1012+
1013+
@property
1014+
def n_measurements(self) -> int:
1015+
"""Number of measurements."""
1016+
return self.measurement_df[MEASUREMENT].notna().sum()
1017+
1018+
@property
1019+
def n_priors(self) -> int:
1020+
"""Number of priors."""
1021+
if OBJECTIVE_PRIOR_PARAMETERS not in self.parameter_df:
1022+
return 0
1023+
1024+
return self.parameter_df[OBJECTIVE_PRIOR_PARAMETERS].notna().sum()

tests/test_petab.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def petab_problem():
4646
measurement_df = pd.DataFrame(
4747
data={
4848
OBSERVABLE_ID: ["obs1", "obs2"],
49+
MEASUREMENT: [0.1, 0.2],
4950
OBSERVABLE_PARAMETERS: ["", "p1;p2"],
5051
NOISE_PARAMETERS: ["p3;p4", "p5"],
5152
}
@@ -63,6 +64,7 @@ def petab_problem():
6364
data={
6465
PARAMETER_ID: ["dynamicParameter1", "dynamicParameter2"],
6566
PARAMETER_NAME: ["", "..."],
67+
ESTIMATE: [1, 0],
6668
}
6769
).set_index(PARAMETER_ID)
6870

@@ -92,13 +94,18 @@ def petab_problem():
9294
petab.write_observable_df(observable_df, observable_file_name)
9395

9496
with pytest.deprecated_call():
95-
yield petab.Problem.from_files(
97+
petab_problem = petab.Problem.from_files(
9698
sbml_file=sbml_file_name,
9799
measurement_file=measurement_file_name,
98100
condition_file=condition_file_name,
99101
parameter_file=parameter_file_name,
100102
observable_files=observable_file_name,
101103
)
104+
assert petab_problem.n_measurements == 2
105+
assert petab_problem.n_estimated == 1
106+
assert petab_problem.n_priors == 0
107+
108+
yield petab_problem
102109

103110

104111
@pytest.fixture

0 commit comments

Comments
 (0)