run_ssa в PySB библиотека рабочий пример?
Я старался run_ssa
из библиотеки Python PySB с использованием имитационной модели ODE "Hello world" (замена концентраций соответствующим молекулярным числом и преобразование детерминированных скоростей в стохастические эквиваленты).
Это траектории, полученные с использованием odesolve
метод:
[(301.0, 180.0, 0.0, 0.0)
(269.7114893451928, 148.71148934519294, 31.288510654807023, 31.288510654807023)
(246.1336243593057, 125.13362435930587, 54.866375640694116, 54.866375640694116)
(227.7848590843455, 106.78485908434567, 73.21514091565433, 73.21514091565433)
(213.1444366774497, 92.1444366774498, 87.8555633225502, 87.8555633225502)...
которые выглядят разумно.
И вот что возвращает run_ssa:
[(0.0, 0.0) (0.4, 27.0) (0.8, 54.0) (1.2, 73.0) (1.6, 81.0) (2.0, 98.0)
(2.4, 116.0) (2.8, 124.0) (3.2, 129.0) (3.6, 135.0) (4.0, 137.0)
(4.4, 141.0) (4.8, 144.0) (5.2, 145.0) (5.6, 146.0) (6.0, 149.0)
(6.4, 153.0) (6.8, 157.0) (7.2, 159.0) (7.6, 160.0) (8.0, 162.0)
(8.4, 162.0) (8.8, 165.0) (9.2, 164.0) (9.6, 166.0) (10.0, 167.0)
(10.4, 168.0) (10.8, 171.0) (11.2, 172.0) (11.6, 172.0) (12.0, 174.0)
(12.4, 175.0) (12.8, 176.0) (13.2, 176.0) (13.6, 176.0) (14.0, 176.0)
(14.4, 177.0) (14.8, 177.0) (15.2, 177.0) (15.6, 177.0) (16.0, 177.0)
(16.4, 177.0) (16.8, 177.0) (17.2, 177.0) (17.6, 177.0) (18.0, 177.0)
(18.4, 177.0) (18.8, 177.0) (19.2, 177.0) (19.6, 178.0) (20.0, 178.0)
(20.4, 178.0) (20.8, 178.0) (21.2, 178.0) (21.6, 178.0) (22.0, 178.0)
(22.4, 178.0) (22.8, 179.0) (23.2, 179.0) (23.6, 179.0) (24.0, 180.0)
(24.4, 180.0) (24.8, 180.0) (25.2, 180.0) (25.6, 180.0) (26.0, 180.0)
(26.4, 180.0) (26.8, 180.0) (27.2, 180.0) (27.6, 180.0) (28.0, 180.0)
(28.4, 180.0) (28.8, 180.0) (29.2, 180.0) (29.6, 180.0) (30.0, 179.0)
(30.4, 179.0) (30.8, 179.0) (31.2, 179.0) (31.6, 179.0) (32.0, 179.0)
(32.4, 179.0) (32.8, 179.0) (33.2, 179.0) (33.6, 179.0) (34.0, 179.0)
(34.4, 179.0) (34.8, 179.0) (35.2, 180.0) (35.6, 180.0) (36.0, 180.0)
(36.4, 180.0) (36.8, 180.0) (37.2, 180.0) (37.6, 180.0) (38.0, 180.0)
(38.4, 180.0) (38.8, 180.0) (39.2, 180.0) (39.6, 180.0) (40.0, 180.0)]
Похоже, вместо того, чтобы принимать начальные условия в качестве отправной точки, он использует одно из них в качестве ограничивающего фактора? И первый массив выглядит как раз для меня... Согласно описанию, он должен возвращать траектории так же, как моделирование ODE...
Похоже, библиотека odesolve calles python для решения ODE, но run_ssa вызывает язык моделирования BioNetGen.
Я пытался реализовать как детерминированные, так и стохастические модели для кинетики Михаэлиса-Ментена напрямую, используя BioNetGen, и они выглядели отлично.
Итак, вопрос: кто-нибудь когда-нибудь работал? Есть рабочие примеры его использования?
Целью этого является тестирование библиотеки, и мне просто нужно знать, возможно ли заставить ее работать и удалось ли кому-нибудь это сделать.
2 ответа
Спасибо, я понял, что именно он на самом деле делает, и смог привести несколько рабочих примеров. Но потребовалось некоторое копание кода и документации BNG:). Дело в том, что odesolve в примере документации на самом деле возвращает всю траекторию, и вы выбираете те, которые вы хотите при построении, а не только наблюдаемые, поэтому это меня запутало. Конечно, добавление этого рабочего примера и некоторых дополнительных пояснений к документации определенно поможет исследователям! Посмотри тогда это хорошая и полезная библиотека
Автор / разработчик PySB здесь.
Похоже, что ошибка заключается в том, что мы (я только что обнаружил после прочтения этого поста SO) не документируем тип возврата функции run_ssa. Это будет исправлено. Как уже упоминалось в AliceNCL, выходные данные, возвращаемые run_ssa, анализируются из файла BNG .gdat. Однако возвращаемая траектория не случайна: файл.gdat содержит траекторию для единственной наблюдаемой, определенной в модели: "LR", комплекс лиганд-рецептор. Файл.cdat, с другой стороны, содержит траектории для всех видов, определенных в модели, просто пронумерованных 1, 2, 3. Таким образом, при реализации в настоящее время, если есть конкретный вид, вы хотите получить траекторию SSA для, вы бы добавили наблюдаемое для него.
Функция odesolve, с другой стороны, возвращает повторный массив со всеми видами (индексированными как '_s0', '_s1', '__s2') И именованным наблюдаемым 'LR'. Следовательно, есть четыре записи, и последние две одинаковы: лиганд-рецепторный комплекс как "вид 2" и как названный наблюдаемый "LR".
Если у вас (или у кого-либо еще) есть какие-либо другие проблемы с использованием библиотеки, сообщите нам об этом, отправив письмо по электронной почте в список рассылки PySB (см. Ссылку на pysb.org) или опубликуйте сообщение о проблеме на GitHub! Мы проверяем переполнение стека только очень редко.
В любом случае, вот рабочий пример:
from pysb import *
from pysb.examples.hello_pysb import model
from pylab import *
from pysb import bng
from pysb.integrate import odesolve
ion()
t_end = 100
# BNG SSA simulation
ssa_sim = bng.run_ssa(model, t_end=t_end, n_steps=1000)
figure()
plot(ssa_sim['time'], ssa_sim['LR'], color='r')
# ODE simulation
t = linspace(0, t_end)
ode_sim = odesolve(model, t)
plot(t, ode_sim['LR'], color='g')
который производит следующее: http://imgur.com/xDNQDIL