9.9 연습문제

  1. \(f(x, y) = x + y\), \(0 < x < 1\), \(0 < y < 1\) 일 때, 공식으로 계산한 공분산 값과 simulation에 의한 값이 유사한 지 비교하고, plotting 해 보시오. Acceptance-rejection method를 이용한 R script는 다음과 같다.
    N = 2000
    Res = matrix(NA, nrow=N, ncol=2)
    k = 1
    while (k <= N) {
      x = runif(2)
      if (runif(1, 0, 2) < x[1] + x[2]) {
        Res[k, ] = x
        k = k + 1
      }
    }

    colMeans(Res) # Theoretical value, 7/12 = 0.5833333
    cov(Res) # Theoretical value, -1/144 = -0.006944444

    ## 3d plotting
    x = seq(0, 1, by=0.01)
    y = seq(0, 1, by=0.01)
    z = outer(x, y, "+")

    require(rgl)
    persp3d(x, y, z, alpha=0.5)
    points3d(Res[, 1], Res[, 2], 0)
  1. 제1상 임상시험 중에 가장 대표적인 First-In-Human (FIH) Study는 대개 Single Ascending Dose (SAD) Study이다. 이 Study는 대개 하나의 용량군이 8명으로 구성되는데, 6명이 active drug을 투약 받고 2명이 placebo를 투약 받는다. 용량 증량을 2배, 1.5배, 또는 1.33배로 증량할 때, 저용량군의 평균 Cmax가 다음 용량군의 평균 Cmax보다 높을 확률을 구하시오. 시험 약물이 선형적 약동학(linear pharmacokinetics) 특성을 보이며, CV 값은 10, 30, 50%인 경우를 가정한다. R script 예시는 다음과 같다.
    simCmax = function(Cmax0 = 100, Mult = 2, CV = 50, n = 6, N = 2000)
    {
      Res = matrix(nrow=N, ncol=2)
      SD0 = Cmax0*CV/100
      Cmax1 = Cmax0*Mult
      SD1 = Cmax1*CV/100 # same CV for both dose group
      for (i in 1:N) {
        Res[i, 1] = mean(rnorm(n, Cmax0, SD0))
        Res[i, 2] = mean(rnorm(n, Cmax1, SD1))
      }
      return(sum(Res[, 1] > Res[, 2])/N)
    }

    simCmax()          # 2 times dose escalation (doubling scheme)
    simCmax(Mult = 1.5)  # 1.33 times dose escalation 
    simCmax(Mult = 1.33) # 1.33 times dose escalation
  1. 실제로 AUC와 Cmax는 정규분포보다는 로그정규분포에 가까운 경우가 많다. 위 문제를 바꾸어 AUC가 로그정규분포를 따른다면 R script는 어떻게 바뀌어야 하겠는가? 단, 비교는 기하평균과 산술평균을 모두 비교하며, CV는 original scale에서 10, 30, 50% 등으로 가정하라. 위 문제에 비하여 역전될 확률이 어떻게 변하였는가?
    simAUC = function(AUC0 = 100, Mult = 2, CV = 50, n = 6, N = 2000)
    {
      Res = matrix(nrow=N, ncol=4)
      logMu0 = log(AUC0)
      logMu1 = log(AUC0*Mult)
      logSD0 = sqrt(log((CV/100)^2 + 1)) # original scale CV to log scale sigma
      logSD1 = logSD0                    # same SD (sigma) for both dose group
      for (i in 1:N) {
        r1 = rnorm(n, logMu0, logSD0)
        r2 = rnorm(n, logMu1, logSD1)
        Res[i, 1] = mean(exp(r1)) # arithmetic mean in original scale
        Res[i, 2] = mean(exp(r2)) # arithmetic mean in original scale
        Res[i, 3] = exp(mean(r1)) # geometric mean
        Res[i, 4] = exp(mean(r2)) # geometric mean
      }
      return(c(sum(Res[, 1] > Res[, 2])/N, sum(Res[, 3] > Res[, 4])/N))
    }

    simAUC()          # 2 times dose escalation (doubling scheme)
    simAUC(Mult = 1.5)  # 1.33 times dose escalation 
    simAUC(Mult = 1.33) # 1.33 times dose escalation
  1. A 와 B 간에는 양의 상관관계, B와 C 간에도 양의 상관관계를 가지지만, A와 C 간에는 음의 상관관계를 가질 수가 있다. 다음의 R script를 참고하여 simulation하고, 그 의미를 biomarker와 연관시켜 생각해 보시오.
    require(MASS)

    Mu0 = c(1, 2, 3) ; Mu0
    Cov0 = matrix(c(1, 0.7, -0.1, 0.7, 1, 0.5, -0.1, 0.5, 1), nrow=3) ; Cov0
    chol(Cov0) # Checking if Cov0 is a positive definite matrix

    n = 300
    d1 = mvrnorm(n, Mu0, Cov0)
    colnames(d1) = c("x", "y", "z")

    summary(d1)
    cov(d1)
    cor(d1)

    d2 = as.data.frame(d1)
    par(mfrow=c(2, 2))
    plot(y ~ x, d1)
    abline(lm(y ~ x, d2))
    plot(z ~ y, d1)
    abline(lm(z ~ y, d2))
    plot(z ~ x, d1)
    abline(lm(z ~ x, d2))