3

몬테카를로 시뮬레이션을 수행하고 신호 강도 대 시간 곡선을 생성하는 코드를 작성했습니다. 이러한 곡선의 모양은 다양한 매개 변수에 따라 달라지며 두 곳의 공동 작업자는 내가 시뮬레이션하고있는 실험의 '실제 버전'으로 결정하려고합니다.파이썬으로 시뮬레이션 및 실험 데이터 포인트 맞추기

실험 데이터를 시뮬레이션 된 곡선과 비교할 준비가되었지만, 아직까지는 어떤 테스트도 수행 할 수 없었기 때문에 멈췄다. (지금까지 실험 데이터를 테스트를 위해 시뮬레이션 된 노이즈 데이터로 대체했다) . 나는 scipy.optimize.leastsq 코드 2를 사용하여 종료했는데 (문서에 따르면 피팅이 성공했다는 것을 의미 함), 대개 단순히 정확한 값은 아니지만 가까운 값을 반환합니다. 초기 추측과 상관없이 입력합니다. 그들이 진정한 가치관으로부터 얼마나 멀리 떨어져 있었는지 멀리 떨어져있었습니다. 다른 값을보고하는 경우 결과 곡선은 여전히 ​​실제 곡선과 상당히 다릅니다. 나는 생각했다

또 다른 관찰은 내가 크기의 동일한 순서의 복지 두 매개 변수 '진정한 값을 주변에 해왔다 내 시뮬레이션 잡음이 데이터를 사용하는 동안 infodict['nfev'] 변함없이

The relative error between two consecutive iterates is at most 0.000000 

이 포함되어 있다는 점이다 (로 그 스텝 크기 사용법은 그 중 하나에 현저하게 영향을 미칠 수 있습니다.), 매우 다른 순서의 크기를 가지며 단계 크기 (매개 변수 epsfcn)를 변경했지만 아무 소용이 없습니다.

는 사람이, 내가 잘못 일을 할 수있는 어떤 또는 내가 leastsq의 대신을 피팅 어떤 기능을 사용할 수 있습니다 어떤 생각을 가지고 있습니까

? 그렇다면 미리 감사드립니다.

지금 시뮬레이션 수행 방법에 대한 몇 가지 세부 사항을 제공 할 것입니다 러스에 의해 제안 편집

: 우리가 큰 분자에 결합하는 작은 분자에서 찾고 있습니다. 이것은 상호 친 화성에 의존하는 확률로 발생합니다 (친 화성은 실험 데이터에서 추출 된 값 중 하나입니다). 바인딩이 이루어지면 컴플렉스가 다시 떨어져 나올 때까지 걸리는 시간을 시뮬레이션합니다 (해리 시간 상수는 관심있는 두 번째 매개 변수입니다). 다른 여러 매개 변수가 있지만 예상되는 신호 강도가 계산 될 때만 관련이 있으므로 실제 시뮬레이션과 관련이 없습니다.

주어진 수의 작은 분자로 시작합니다. 각각의 상태는 여러 시간 단계에 대해 시뮬레이션됩니다. 매 시간 단계마다 우리는 친 화성 값을 사용하여이 분자가 결합되지 않은 경우 큰 분자에 결합하는지 여부를 결정합니다. 이미 바인딩 된 경우에는 해리 시간 상수와이 단계에서 해체되는지 여부를 결정하기 위해 이미 바인딩 된 시간 양을 사용합니다.

두 경우 모두 매개 변수 (선호도, 해리 시간 상수)를 사용하여 확률을 계산 한 다음 난수 (0과 1 사이)와 비교합니다.이 비교에서는 작은 분자 (바운드/언 바운드) 변경.

EDIT 형상이 명확하게 재현하더라도, 생성 곡선의 형상을 결정하고, 더 잘 정의 된 기능은 없다 2

, 임의성의 요소는 각각의 데이터에 존재 포인트. 따라서 leastsq 대신 optimize.fmin을 사용하려고 시도했지만 최대 수의 반복 수행 후에 수렴하지 않고 단순히 종료됩니다. 안드레아에 의해 제안

EDIT 3

가 나는 sample plot을 업로드했습니다. 나는 샘플 데이터를 제공하는 것이 많은 도움이된다고 생각하지 않는다. x 값 (시간) 당 하나의 y 값 (신호 강도) 일 뿐이다. ...

+0

문제가 계속되는 경우 사용중인 데이터 및 피팅 절차의 예를 보여줄 수 있다면 도움이됩니다. –

+0

흥미로운 응용 프로그램처럼 보입니다. 몇 가지 플롯이나 예제 데이터를 넣어야합니다. 그러면 질문에 훨씬 더 많은 관심을 기울일 수 있습니다. –

+0

@Andrea Zonca 제안한대로 음모를 업로드했습니다. 샘플 데이터는 생략했습니다. y 값당 하나의 x 값일 뿐이므로 아무에게도 말하지 않습니다 ... 감사합니다! – canavanin

답변

2

정확하게 대답은 아니지만 시도 할 PyMinuit도 있습니다. 당신이 원하는 무엇

http://code.google.com/p/pyminuit/

카이^2 -ln (가능성) 또는 사용자가 선택한 메트릭에 PDF 및 데이터 포인트를 변환하고 메트릭을 최소화하기 위해 PyMinuit를 사용합니다. 매우 장황하게 구성되어 상황이 잘못되었다는 것을 알 수 있습니다 (잘못된 경우).

+0

멋진 패키지처럼 보입니다! – canavanin

+0

고마워요.이 패키지에 대해 제게 말하면 많이 들었습니다. 정말 그 일을하는 것처럼 보입니다. 나는 생각보다 조금 더 익숙해 져야하지만, 프로젝트를 다시 시작한 것처럼 보입니다! 나는 진실로 당신에게 매우 감사하고 있습니다. – canavanin

+0

당신은 환영합니다 :) –

3

평소 원하는 임의의 함수로 데이터를 맞추려면 Levenberg–Marquardt 알고리즘을 사용하고 있습니다. 즉, scipy.optimize.leastsq이 사용하기 때문에 올바른 함수를 사용하고있을 가능성이 큽니다.

this page 섹션 5.4의 튜토리얼을보고 도움이되는지 확인하십시오.

기본 기능이 적합하지 않을 수도 있지만 (기능은 무엇입니까?), 다른 문제가있는 것처럼 들릴 수 있습니다.

또한 StackOverflow만큼 우수하므로 일부 샘플 코드와 자세한 내용을 사용하여 Scipy-User mailing list에 직접 게시하여 scipy 관련 질문에 대한 지식이 풍부 해집니다.

+0

답장을 보내 주셔서 대단히 감사합니다. 귀하의 질문에 대한 답변 : 기본 기능이 없습니다 (또는 적어도 우리는 그것을 모릅니다). 우리는 시뮬레이션 된 곡선을 여러 단계 (단백질에 작은 분자의 결합과 그 복합체의 해리를 시뮬레이션 함)로 얻고 있습니다. – canavanin

+0

그래서 ... 커브 피팅처럼 들리지는 않습니다!? 시뮬레이트 된 데이터가 실제 데이터와 얼마나 가까운 지 알기 위해 노력하고있는 것 같습니다. OTOH ... 또한 비교에서 두 개의 매개 변수를 추출하려고합니다 ... 커브 피팅과 같은 것 같습니다. 시뮬레이션에서 여러 단계의 결과를 나타내는 표현식을 생각해 낼 수 있습니까? 그렇다면 LM을 던지십시오. 그것은 그것을 필요로합니다. 그렇지 않다면 나는 무엇을 말할 지 모른다. 이는 프로그래밍 문제가 아니기 때문에 다른 포럼에서 더 적합 할 것입니다. 어쩌면 통계 또는 수학 사이트일까요? 더 자세한 정보가 필요합니다. – Russ

+0

예, 아마도 다른 포럼을 찾아 도움을 받아야 할지도 모르겠지만 이것은 완전히 새로운 장이라서 다음에해야 할 일 (내 질문에 어떤 정보를 포함해야하는지 ...)을 알지 못했습니다. 하지만 고마워! – canavanin

2

예상되는 글로벌 기능 유형을 모르는 경우 은 (예 : '필터 "맞는 컨텍스트에서 구피하게 들리지만 그 이름은 역사적이며 쉽게 변경할 수 없습니다.)

근본적인 수학은 약간 무서워 보일 수 있지만,이 중요한 점은 이해할 필요가 없다는 것입니다. 당신은 일반적으로 표현 공간에서 명시 적 표현 공간을 (시뮬레이션이나 실험) 데이터를

  • 정의

    1. 할 수 있어야합니다.
    2. 는 배관공

    에 의해 반환 적어도 one existing python package가이 기능을 지원하는 것 같습니다으로 주어진 하나 개

  • 추출에서 일련의 표현에서 원하는 곡선은 "다음"표현을 가져옵니다 업데이트 절차를 정의 (여기의 인터페이스는 필자가 익숙한 인터페이스와는 다르며 사용법에 대한 많은 조언을 드릴 수는 없습니다).

  • +0

    답장을 보내 주셔서 감사합니다. 제안한 내용을 살펴 보겠습니다. – canavanin

    1

    매개 변수가 두 개인 경우에만 그리드 검색 만 수행하면됩니다.당신이 계산을 줄 수있는 경우에

    results = {} 
    for p0 in parameter_space_for_first_parameter: 
        for p1 in parameter_space_for_second_parameter: 
          results[p0,p1] = compare(p0,p1) 
    

    compare 여러 실행을 수행 (다른 initialisations와)과 평균과 표준 편차를 계산한다. 내 패키지 jug을 사용하여 계산을 관리해볼 수 있습니다 (정확히 이런 종류의 작업을 위해 설계되었습니다).

    마지막으로 결과를 플롯하고 최소값 (몇 가지가 있음)을 살펴보십시오. 이것은 "어리석은"방법이지만, 다른 방법들이 고착되는 많은 상황에서 작동 할 것입니다.

    계산량이 너무 많으면 굵은 선 그리드 다음에 굵은 선의 최소 점 근처에 미세한 선이있는 두 단계로이 작업을 수행 할 수 있습니다.

    관련 문제