2011-07-02 6 views
3

생물학적 모니터링 시스템에서 데이터를 수집하고 있습니다. 아래에 표시된 것처럼 시스템을 변경 한 후에는 평원의 평균값을 알아야합니다.단계 응답 후 평균 안정 값 찾기

이것은 약 4 분 동안의 데이터입니다. 그림에서 알 수 있듯이 이벤트와 정상 상태 응답 사이에는 적절한 지연 시간이 있습니다.

enter image description here

이 값은 항상이 수준되지 않습니다. 그들은 정상 상태 응답이 시작되는 곳을 찾고 그 시간 동안 값을 평균화하기를 원합니다. 생물 학자 인 나의 상사는 오버 슛과 임의의 변동이있을 수 있으며 z- 변환을 사용해야 할 수도 있다고 말했다. 불행히도 그는 그보다 더 구체적이지 않았습니다.

필자는 프로그래머로서 유능한 의사를 느꼈지만,이 값을 찾는 데 가장 효율적인 방법이 무엇인지 알지 못했습니다.

모든 알고리즘, 통찰력 또는 접근법은 크게 감사하겠습니다. 감사.

+3

이것은 HTTP에 대한 좋은 후보가 될 수있다 : //stats.stackexchange.com. –

답변

1

1 차 미분을 분석하여 실제로 좋은 시작을 얻을 수 있습니다. 일차 미분 계수가 0에 가까울 경우 공정 안정을 고려하십시오. 그러나 이것은 '은색 총알'유형의 해결책이 아니며 일부 불쾌한 사례가 예상된다는 점에 유의하십시오. 상기에 기초

어쨌든은 간단한 데모 다음과

같은 출력으로
import numpy as np 

# create first some artificial observations 
obs= np.array([[0, 1, 1.5, 3.5, 4, 4.5, 7, 9.2, 10.5, 15], 
       [1, 2, 6, 6.01, 5.5, 4, 4.7, 3.3, 3.7, 3.65]]) 
x= np.linspace(obs[0][0], obs[0][-1], 1e2) 
y= np.interp(x, obs[0], obs[1]) 
# and add some noise to it 
y+= 1e-3* np.random.randn(y.shape[0]) 

# now find steady state based on first derivative< abs(trh), but 
# smooth the signal first by convolving it with suitable kernel 
y_s= np.convolve(y, [.2, .6, .2]) 
d, trh= np.diff(y_s), .015 
stable= (np.abs(d)< trh)[:-1] 

# and inspect visually 
from pylab import grid, plot, show 
plot(x, y), plot(x, y_s[1: -1]) 
plot(x[stable], np.ones(stable.sum()), 's') 
grid(True), show() 

(여기서 빨간색 점이 상정 정상 프로세스 나타냄) enter image description here

2

간단한 방법은 이동 평균 (즉, 마지막 N 개 샘플의 평균)을 계산하고 추적하는 것입니다. 평균이 임계 값보다 작아지면 정상 상태라고 가정 할 수 있습니다.

트릭은 N과 임계 값을 적절하게 선택하는 데 있습니다. 합리적인 가치를 추측 할 수 있거나 여러 이벤트의 가치있는 데이터를 사용하여 시스템을 교육 할 수 있습니다.

재미있는 프로젝트처럼 보입니다. — 행운을 비네!