P-unit_model/fit_statistics.py

65 lines
1.7 KiB
Python

from ModelFit import get_best_fit
import matplotlib.pyplot as plt
import os
import numpy as np
def get_all_cell_folders(dir):
paths = []
for item in os.listdir(dir):
cell_path = os.path.join(dir, item)
if os.path.isdir(cell_path):
paths.append(cell_path)
return paths
def main():
values_models = {}
values_cells = {}
for cell in get_all_cell_folders("results/invivo_results/"):
best_fit = get_best_fit(cell)
c_behaviour, m_behaviour = best_fit.get_behaviour_values()
for key in c_behaviour.keys():
if key not in values_cells.keys():
values_cells[key] = []
if key not in values_models.keys():
values_models[key] = []
values_cells[key].append(c_behaviour[key])
values_models[key].append(m_behaviour[key])
percentage_error_data = []
labels = []
for key in values_models.keys():
errors = []
for i in range(len(values_models[key])):
if values_cells[key][i] == 0:
if values_models[key][i] == 0:
errors.append(0)
else:
print("Cannot calc % error if reference is 0")
continue
errors.append((values_models[key][i] / values_cells[key][i]) -1)
percentage_error_data.append(errors)
labels.append(key)
plt.boxplot(percentage_error_data)
plt.xticks(range(1, len(percentage_error_data)+1, 1), labels=labels, rotation=45)
plt.show()
plt.close()
# plt.plot([np.median(x) for x in percentage_error_data], 'o')
# plt.xticks(range(len(percentage_error_data)), labels=labels, rotation=45)
# plt.show()
if __name__ == '__main__':
main()