복붙노트

[PYTHON] 피팅 분배, 적합성, p- 값. Scipy (Python)로이 작업을 수행 할 수 있습니까?

PYTHON

피팅 분배, 적합성, p- 값. Scipy (Python)로이 작업을 수행 할 수 있습니까?

소개 : 저는 생물 정보 학자입니다. 모든 인간 유전자 (약 2 000)에 대해 수행 한 필자의 분석에서 특정 모티프가 각 유전자에서 얼마나 많이 발생했는지를 확인하기위한 특정 짧은 서열 모티프를 찾는다.

유전자는 4 개의 문자 (A, T, G, C)의 선형 순서로 '기록'됩니다. 예 : CGTAGGGGGTTTAC ... 이것은 각 세포의 비밀 언어와 같은 유전 암호의 4 글자 알파벳입니다. DNA가 실제로 정보를 저장하는 방법입니다.

특정 유전자에서 특정 짧은 모티프 서열 (AGTGGAC)을 빈번히 반복하는 것이 세포의 특정 생화학 적 과정에서 결정적이라고 생각합니다. 모티프 자체가 매우 짧기 때문에 전산 도구로 유전자의 실제 기능적 예와 우연히 유사하게 보이는 것을 구별하기가 어렵습니다. 이 문제를 피하기 위해 모든 유전자의 서열을 얻은 다음 단일 문자열로 연결하고 섞습니다. 원래 유전자의 길이가 저장되었습니다. 그런 다음 원본 시퀀스 길이 각각에 대해 연결된 시퀀스에서 A 또는 T 또는 G 또는 C를 무작위로 반복적으로 선택하여 임의 시퀀스로 전송하여 임의 시퀀스를 구성했습니다. 이러한 방식으로, 무작위 시퀀스의 결과 세트는 전체 길이, A, T, G, C 전체 길이 분포가 동일합니다. 그런 다음이 무작위 순서로 모티프를 찾습니다. 나는이 과정을 1000 번 반복했고 결과를 평균했다.

주어진 모티프를 포함하지 않는 15000 개의 유전자 모티프 1 개를 포함하는 5000 개의 유전자 2 개의 모티프를 포함하는 3000 개의 유전자 3 개의 모티프를 포함하는 1000 개의 유전자 ... 6 개의 모티프를 포함하는 1 유전자

따라서 실제 유전자 코드를 1000 배 무작위로 추출한 후에도 6 개 이상의 모티프를 가진 유전자는 없습니다. 그러나 진정한 유전자 코드에는 모티프의 20 번 이상을 포함하는 몇 가지 유전자가 있습니다.이 반복은 기능적 일 수 있으며 순수한 기회로 그러한 풍부함에서 찾을 수 없을 것입니다.

문제: 나는 유전자를 발견 할 확률을 알고 싶다. 나는 20 개의 분포를 모티브로한다. 그래서 우연히 그러한 유전자를 발견 할 확률을 알고 싶습니다. 이것을 파이썬으로 구현하고 싶습니다만, 어떻게해야할지 모르겠습니다.

파이썬에서 그런 분석을 할 수 있습니까?

어떤 도움을 주시면 감사하겠습니다.

해결법

  1. ==============================

    1.SciPy 문서에는 구현 된 모든 연속 분포 함수의 목록이 있습니다. 각각에는 해당 모양 매개 변수를 반환하는 fit () 메서드가 있습니다.

    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)를 사용하여 경험적 분포를 이론적으로 피팅하는 방법?

  2. from https://stackoverflow.com/questions/6615489/fitting-distributions-goodness-of-fit-p-value-is-it-possible-to-do-this-with by cc-by-sa and MIT license