Распределение фитингов, добротность посадки, p-значение. Можно ли это сделать с помощью Scipy (Python)?

18

ВВЕДЕНИЕ: Я биоинформатик. В моем анализе, который я выполняю на всех генах человека (около 20 000), я ищу конкретный мотив короткой последовательности, чтобы проверить, сколько раз этот мотив возникает в каждом гене. Гены «записываются» в линейной последовательности по четырем буквам (A, T, G, C). Например: CGTAGGGGGTTTAC ... Это четырехбуквенный алфавит генетического кода, который похож на секретный язык каждой ячейки, так как ДНК фактически хранит информацию.

Я подозреваю, что частые повторения определенной короткой последовательности мотивов (AGTGGAC) в некоторых генах имеют решающее значение для конкретного биохимического процесса в клетке. Поскольку сам мотив очень короткий, сложно вычислить инструменты, чтобы отличать истинные функциональные примеры в генах и те, которые выглядят похожими случайно. Чтобы избежать этой проблемы, я получаю последовательности всех генов и объединяюсь в одну строку и перетасовываюсь. Длина каждого из исходных генов была сохранена. Затем для каждой из исходных длин последовательностей произвольная последовательность была построена путем многократного выбора A или T или G или C в случайном порядке из конкатенированной последовательности и передачи ее в случайную последовательность. Таким образом, результирующий набор рандомизированных последовательностей имеет одинаковое распределение по длине, а также общую композицию A, T, G, C. Затем я ищу мотив в этих рандомизированных последовательностях. Я выполнил эту процедуру 1000 раз и усреднил результаты.

15000 генов, которые не содержат данный мотив 5000 генов, которые содержат 1 мотив 3000 генов, которые содержат 2 мотива 1000 генов, которые содержат 3 мотива ... 1, содержащий 6 мотивов

Итак, даже после 1000 раз рандомизации истинного генетического кода нет никаких генов, которые имеют более 6 мотивов. Но в истинном генетическом коде есть несколько генов, которые содержат более 20 проявлений мотивов, которые предполагают, что это повторение может быть функциональным, и вряд ли он найдет их в таком изобилии по чистой случайности.

ПРОБЛЕМА: Я хотел бы узнать вероятность нахождения гена, скажем, 20 случаев мотивов в моем распределении. Поэтому я хочу знать вероятность найти такой ген случайно. Я хотел бы реализовать это в Python, но я не знаю, как это сделать.

Можно ли сделать такой анализ в Python?

Любая помощь будет оценена по достоинству.     

задан s_sherly 07.07.2011 в 20:40
источник
  • Обратите внимание, что вы существенно изменили свой вопрос. Можно ли вернуть этот вопрос в исходный вопрос плюс четкое «обновление» для всех новых деталей? Или, может быть, только новый вопрос? благодаря –  eat 07.07.2011 в 22:37
  • Вы можете подумать об этом на BioStar –  ars 08.07.2011 в 01:28
  • Я задаю новый вопрос: stackoverflow.com/questions/6620471/... –  s_sherly 08.07.2011 в 08:01

1 ответ

30

В документации SciPy вы найдете список всех реализованных непрерывных распределений функции. У каждого есть метод fit() , который возвращает соответствующие параметры формы.

Даже если вы не знаете, какой дистрибутив использовать, вы можете попробовать много вариантов одновременно и выбрать тот, который лучше подходит для ваших данных, например, в приведенном ниже коде. Обратите внимание, что, если вы не представляете, как распределить, вам может быть сложно подобрать образец.

import matplotlib.pyplot as plt
import scipy
import scipy.stats
size = 20000
x = scipy.arange(size)
# creating the dummy sample (using beta distribution)
y = scipy.int_(scipy.round_(scipy.stats.beta.rvs(6,2,size=size)*47))
# creating the histogram
h = plt.hist(y, bins=range(48))

dist_names = ['alpha', 'beta', 'arcsine',
              'weibull_min', 'weibull_max', 'rayleigh']

for dist_name in dist_names:
    dist = getattr(scipy.stats, dist_name)
    param = dist.fit(y)
    pdf_fitted = dist.pdf(x, *param[:-2], loc=param[-2], scale=param[-1]) * size
    plt.plot(pdf_fitted, label=dist_name)
    plt.xlim(0,47)
plt.legend(loc='upper left')
plt.show()

Литература:

- Распределение с помощью Scipy

- Установка эмпирического распределения на теоретические с помощью Scipy (Python)?

    
ответ дан Saullo Castro 20.05.2013 в 16:16
  • В приведенном выше коде возникает следующая ошибка сообщения: «Объект AttributeError: 'module» не имеет атрибута «arcsineweibull_min» в инструкции «dist = getattr (scipy.stats, dist_name)». Мои версии: scipy - 0.13.3, numpy - 1.8.0, matplotlib - 1.3.1. –  srodriguex 16.01.2015 в 21:37
  • @srodriguex спасибо! Была небольшая опечатка, и я только что ее исправил –  Saullo Castro 17.01.2015 в 00:14
  • @SaulloCastro Как я могу применить эту функцию fit () для 3D-поверхности, я только что достигнут с помощью scipy.linalg.lstsq? Как я могу подтвердить, что я хорошо подходил к данным. Спасибо. –  diffracteD 05.05.2015 в 06:03