@pm.deterministic def lambda_(tau=tau, lambda_1=lambda_1, lambda_2=lambda_2): out = np.zeros(n_count_data) out[:tau] = lambda_1 # lambda_1은 tau 이전 lambda다. out[tau:] = lambda_2 # lambda_2는 tau 이후 lambda다. return out
lambda_라는 새로운 함수를 생성한다. 그러나 우리는 이것을 이전의 확률변수 λ로 생각할 수 있다. lambda_1, lambda_2와 tau가 랜덤이므로 lambda_도 랜덤이 된다는 점에 주의하라. 아직 어느 변수도 고정하지 않았다.
@pm.deterministic은 PyMC에게 이것이 결정함수(deterministic function)라는 것을 알려주는 데코레이터(decorator)다. 만일 입력이 결정론적(deterministic)이라면 결과도 결정론적일 것이다.
observation = pm.Poisson(“obs”, lambda_, value=count_data, observed=True) model = pm.Model([observation, lambda_1, lambda_2, tau])
observation 변수는 value 키워드로 데이터 변수인 count_data와 주어진 변수 lambda_, 그리고 우리가 구상한 데이터 생성 스키마를 합쳐 얻은 것이다. observed = True로 설정하여 PyMC에게 이 변수는 분석에서 고정되어야 한다는 것을 알려준다. 마지막으로 모든 관련 변수를 모아 Model 인스턴스를 만든다. 이렇게 하면 나중에 우리가 결과를 불러올 때 한층 일이 쉬워진다.