deterministic 래퍼는 1장의 문자 메시지 예제에서 사용해보았다. λ 모델이 어떤 모습이었는지 생각해보자.
그리고 PyMC 코드에서는
import numpy as np n_data_points = 5 # 1장에서 데이터 포인트가 70개 있었다. @pm.deterministic def lambda_(tau=tau, lambda_1=lambda_1, lambda_2=lambda_2): out = np.zeros(n_data_points) out[:tau] = lambda_1 # lambda_1은 tau 이전 lambda다. out[tau:] = lambda_2 # lambda_2는 tau 이후 lambda다. return out
τ, λ1, λ2를 안다면 λ를 알 수 있음이 분명하다. 그러므로 λ는 deterministic 변수다.
deterministic 데코레이터 내부에서 stochastic 변수는 stochastic 변수가 아니라 스칼라나 NumPy 배열(다변량인 경우)처럼 작동한다. 예를 들어 다음 코드를 실행하면
@pm.deterministic def some_deterministic(stoch=some_stochastic_var): return stoch.value**2
stoch가 value 속성을 가지고 있지 않다는 것을 알려주는 AttributeError가 발생한다. 그래서 돌려주는 값은 stoch**2여야 한다. 실제로 전달되는 것은 stochastic 변수가 아니라 그 변수의 값이다.
deterministic 함수 작성 시 함수에 사용된 각 변수에 대해 키워드 인수를 사용한다. 이 단계는 필수이며, 모든 변수는 키워드 인수로 명시되어야 한다.