저는 PK 모델링과 pymc3에 익숙하지 않지만 pymc3을 가지고 놀았으며 간단한 PK 모델을 자체 학습의 일부로 구현하려고합니다. 구체적으로는이 관계를 캡처하는 모델 ...PyMC3 PK 모델링. 데이터 모델을 만드는 데 사용 된 매개 변수로 모델을 만들 수 없습니다.
C (t) (Cpred)는 시간 t에서의 농도는, 투여 량은 소정 용량이이 V는 분포의 양이며, CL은 간극이다.
3 회 복용량 100,200,300에 대해 CL = 2, V = 10의 값을 가진 일부 테스트 데이터 (30 명)를 생성했으며, 0,1,2,4,8,12의 시점에 데이터를 생성했으며 CL (정규 분포, 0 평균, 오메가 = 0.6) 및 잔여 설명 불능 오류 DV = Cpred + sigma에 대한 임의의 오류. 여기서 시그마는 정상적으로 SD = 0.33으로 분포합니다. 또한 나는 C와 V에 가중치 (균일 분포 50-90)에 대한 변환을 포함 시켰습니다. CLi = CL * WT/70; Vi = V * WT/70이다. 내가 pymc3에서 간단한 모델을 구축
# Prepare data from df to model specific arrays
time = np.array(df['time'])
dose = np.array(df['dose'])
DV = np.array(df['DV'])
WT = np.array(df['WT'])
n_patients = len(data['subject'].unique())
subject = data['subject'].values-1
모델의 배열이 준비 만들기
# Create Data for modelling
np.random.seed(0)
# Subject ID's
data = pd.DataFrame(np.arange(1,31), columns=['subject'])
# Dose
Data['dose'] = np.array([100,100,100,100,100,100,100,100,100,100,
200,200,200,200,200,200,200,200,200,200,
300,300,300,300,300,300,300,300,300,300])
# Random Body Weight
data['WT'] = np.random.randint(50,100, size =30)
# Fixed Clearance and Volume for the population
data['CLpop'] =2
data['Vpop']=10
# Error rate for individual clearance rate
OMEGA = 0.66
# Individual clearance rate as a function of weight and omega
data['CLi'] = data['CLpop']*(data['WT']/70)+ np.random.normal(0, OMEGA)
# Individual Volume as a function of weight
data['Vi'] = data['Vpop']*(data['WT']/70)
# Expand dataframe to account for time points
data = pd.concat([data]*6,ignore_index=True)
data = data.sort('subject')
# Add in time points
data['time'] = np.tile(np.array([0,1,2,4,8,12]), 30)
# Create concentration values using equation
data['Cpred'] = data['dose']/data['Vi'] *np.exp(-1*data['CLi']/data['Vi']*data['time'])
# Error rate for DV
SIGMA = 0.33
# Create Dependenet Variable from Cpred + error
data['DV']= data['Cpred'] + np.random.normal(0, SIGMA)
# Create new df with only data for modelling...
df = data[['subject','dose','WT', 'time', 'DV']]
... ...
pk_model = Model()
with pk_model:
# Hyperparameter Priors
sigma = Lognormal('sigma', mu =0, tau=0.01)
V = Lognormal('V', mu =2, tau=0.01)
CL = Lognormal('CL', mu =1, tau=0.01)
# Transformation wrt to weight
CLi = CL*(WT)/70
Vi = V*(WT)/70
# Expected value of outcome
pred = dose/Vi*np.exp(-1*(CLi/Vi)*time)
# Likelihood (sampling distribution) of observations
conc = Normal('conc', mu =pred, tau=sigma, observed = DV)
내 기대 내가 할 수 있었어야했다 데이터를 생성하는 데 원래 사용 된 상수 및 오류 비율을 데이터에서 확인하는 것이지만, 그렇게 할 수는 없지만 가까이 갈 수는 있습니다. 이 예에서 ...
data['CLi'].mean()
> 2.322473543135788
data['Vi'].mean()
> 10.147619047619049
그리고 추적
- 내 코드가 제대로 구성하고있다가 .. 그래서 내 질문은 .... 보여주고있다 내가 간과 한 눈부신 실수가이 차이를 설명 할 수 있습니까?
- 데이터를 생성 한 관계를보다 잘 반영하도록 pymc3 모델을 구성 할 수 있습니까?
- 모델 개선을위한 제안 사항은 무엇입니까?
미리 감사드립니다.