평행선 검정과 기울기비 검정 — 두 약물의 상대 강도 추정

Montgomery Ch.7.4-7.6 Parallel Line Assay · IB for Bio-assays · Slope Ratio

Indirect bio-assay 의 두 표준 형태인 parallel line assay 와 slope ratio assay 의 모형, 가정, 추정 절차, 신뢰구간 (Fieller’s theorem), incomplete block design 의 bio-assay 적용을 정리한다. 두 약물이 같은 dose-response 곡선 형태를 가진다는 가정 하에 평행 vs 기울기비 가정의 선택, 각각의 상대 강도 추정량과 그 통계적 성질을 다룬다. ED50 비교, slope homogeneity 검정, 검정력 분석을 포함한다.

Experimentation
DOE
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: Parallel Line Assay (PLA) vs Slope Ratio Assay (SRA)

두 약물 (\(S\) standard, \(T\) test) 의 dose-response 곡선의 형태에 따라 분류:

  • Parallel Line Assay: 두 곡선이 평행 (같은 기울기, 다른 절편). 가정: 두 약물이 같은 작용 메커니즘. \[ Y_S = \alpha_S + \beta \log d_S, \quad Y_T = \alpha_T + \beta \log d_T \]

  • Slope Ratio Assay: 두 곡선이 공통 절편 (같은 baseline, 다른 기울기). 가정: dose 가 0 일 때 응답이 같음. \[ Y_S = \alpha + \beta_S d_S, \quad Y_T = \alpha + \beta_T d_T \] (선형 dose, 비-로그)

상대 강도 \(\rho\): - PLA: \(\log \rho = (\alpha_T - \alpha_S) / \beta\) - SRA: \(\rho = \beta_T / \beta_S\)

2 Parallel Line Assay 의 통계 모형

2.1 가정

  1. 로그 dose 의 선형성: \(E[Y | \log d] = \alpha + \beta \log d\).
  2. 두 약물의 평행: 같은 \(\beta\).
  3. 응답의 정규성·등분산성.

이 가정은 두 약물이 동일 receptor 에 같은 affinity 로 작용할 때 성립. 약리학적 의미가 있다.

2.2 시각화

Y │      검정 약물(T)
  │     /
  │    /  표준 약물(S)
  │   /  /
  │  /  /
  │ /  /
  └─────────────────  log dose
        ←  ρ  →

두 평행선의 수평 거리\(\log \rho\). 같은 \(Y\) 값을 내는 표준의 dose 와 검정의 dose 의 비율.

2.3 상대 강도 추정량

두 약물 모두 같은 \(\beta\) 를 가지므로 합쳐서 추정:

\[ \hat\beta = \frac{\sum_{S,T} (\log d - \overline{\log d})(Y - \bar Y)}{\sum_{S,T} (\log d - \overline{\log d})^2} \]

각 약물의 절편: \[ \hat\alpha_S = \bar Y_S - \hat\beta \, \overline{\log d_S}, \quad \hat\alpha_T = \bar Y_T - \hat\beta \, \overline{\log d_T} \]

상대 강도: \[ \log \hat\rho = \frac{\hat\alpha_T - \hat\alpha_S}{\hat\beta} \quad \text{또는 동치로} \quad \overline{\log d_S} - \overline{\log d_T} + (\bar Y_T - \bar Y_S)/\hat\beta \]

직관: 상대 강도의 그래프적 의미

두 평행 회귀선에서 같은 응답 \(Y_0\) 을 내는 dose: - \(S\): \(\log d_S = (Y_0 - \hat\alpha_S) / \hat\beta\) - \(T\): \(\log d_T = (Y_0 - \hat\alpha_T) / \hat\beta\)

두 dose 의 차이 (수평 거리): \[ \log d_S - \log d_T = (\hat\alpha_T - \hat\alpha_S) / \hat\beta = \log \hat\rho \]

\(\hat\rho = d_S / d_T\) — 같은 효과를 내는 dose 의 비율. 기울기가 가파를수록 (\(\hat\beta\) 크면) 작은 절편 차이도 큰 dose 차이로 환산되어 상대 강도가 명확해진다.

2.4 Fieller’s Theorem 의 신뢰구간

\(\log \hat\rho\) 는 두 추정량의 비. 비율의 신뢰구간은 normal 분포가 아니므로 일반 t-CI 부적합. Fieller (1944) 의 절차:

\[ g = \frac{t_{\alpha/2}^2 \, \hat\sigma_\beta^2}{\hat\beta^2} \]

(g = “significance correction”; g < 1 일 때 유한 CI 가능, g ≥ 1 이면 무한 CI.)

\[ \log \rho_{\text{lower}}, \log \rho_{\text{upper}} = \log \hat\rho \pm \frac{t_{\alpha/2}}{(1 - g) \hat\beta} \sqrt{\hat\sigma_{\hat\Delta}^2 (1 - g) + g \, \hat\sigma_\beta^2 (\log \hat\rho)^2} \]

여기서 \(\hat\Delta = \hat\alpha_T - \hat\alpha_S\), \(\hat\sigma_{\hat\Delta}^2\) 는 그 분산.

복잡 — Python scipy.optimize 로 root-finding 또는 R relaimpo, drc 패키지 자동.

2.5 평행성 검정

가정 검정: 두 회귀선의 기울기가 정말 같은가?

귀무가설: \(\beta_S = \beta_T\).

\(F\) 검정: \[ F = \frac{\text{SS due to slope difference}}{\text{MS error}} \]

자유도 \((1, n_S + n_T - 4)\).

\(p > 0.05\) 면 평행 가정 채택. \(p < 0.05\) 면 slope ratio assay 또는 비교 부적합.

함정: 평행성 검정의 검정력 한계

작은 표본 (예: 각 약물 5 dose × 3 replicate = 15 관측) 에서 평행성 검정은 검정력 약. 비유의가 “평행 OK” 보장 안 됨. 시각적 점검 (산점도 + 회귀선) 함께 권장.

기울기 추정량의 신뢰구간이 겹치는지도 확인. 매우 다른 기울기면 PLA 부적합.

3 Slope Ratio Assay (SRA)

3.1 가정

  1. dose 의 선형성 (로그 변환 X): \(E[Y | d] = \alpha + \beta d\).
  2. 두 약물 같은 절편 (\(\alpha\)): dose 0 에서 같은 baseline.
  3. 상대 강도 = \(\beta_T / \beta_S\).

이 가정은 dose 0 에서 응답이 일관 한 자연스러운 baseline 이 있을 때. 예: dose 0 에서 박테리아 zone 직경 0 (자명).

3.2 추정

두 회귀선: \[ Y_S = \alpha + \beta_S d_S, \quad Y_T = \alpha + \beta_T d_T \]

\(\alpha\) 를 공통으로 추정 (combined regression): \[ Y = \alpha + \beta_S d_S + \beta_T d_T + \varepsilon \]

(dose 변수가 두 약물에서 0 또는 양수로 작동.)

상대 강도: \[ \hat\rho = \hat\beta_T / \hat\beta_S \]

3.3 Fieller’s CI

비율이므로 동일하게 Fieller’s theorem 적용.

3.4 시각화

Y │      검정 약물 (T) — 가파른 기울기 β_T
  │     /
  │    /
  │   /  표준 약물 (S) — 완만한 기울기 β_S
  │  / /
  │ //
  │//
  └────────────  dose
   α (공통 절편)

두 약물이 dose 0 에서 같이 시작하지만 기울기가 다름 → 효능 차이.

4 PLA vs SRA 의 선택

측면 PLA SRA
dose 변환 log linear (또는 log)
가정 같은 기울기 같은 절편
약리학적 의미 같은 메커니즘 같은 baseline
응용 약물 비교 (대부분) 항생제, 비타민
분석 표준 회귀 통합 회귀
직관: 어느 가정이 더 강한가

PLA 가 일반적. 두 약물이 같은 receptor 에 작용하면 자연스러움.

SRA 는 더 강한 가정 (같은 절편). dose 0 에서 응답이 정확히 같다는 것은 baseline 의 정확한 측정이 가능할 때만.

실무: PLA 우선 시도, 평행성 위반 시 SRA 검토. 둘 다 부적합하면 nonparametric 또는 비교 자체 재검토.

5 Incomplete Block Design 의 Bio-assay 적용

큰 dose 범위 (예: 6 수준) 에서 한 동물 그룹에 모든 dose 를 주기 어려울 때, BIB design 활용.

각 동물 (블록) 에 일부 dose 만 (예: 3 개) 투여. BIB 의 균형 조건 활용.

5.1 사례 — 비타민 D 검정

6 dose (10, 20, 40, 80, 160, 320 IU) × 7 마리 라트 (블록), 각 라트 3 dose.

BIB \((v=6, b=7, r=3.5, k=3, \lambda)\) — 정확한 BIB 가능 여부 점검.

분석: BIB analysis (G-MON5-3) + dose 의 회귀.

6 가설 데이터 — 인슐린 검정

표준 인슐린 (\(S\)) 4 dose: 0.5, 1, 2, 4 IU. 검정 인슐린 (\(T\)) 4 dose: 0.6, 1.2, 2.4, 4.8 IU. 각 dose 에 8 마리 라트, 응답 = 혈당 강하 (mg/dL).

가상 결과:

약물 dose \(\log_2 d\) \(\bar Y\)
\(S\) 0.5 -1 15
\(S\) 1 0 25
\(S\) 2 1 35
\(S\) 4 2 45
\(T\) 0.6 -0.737 18
\(T\) 1.2 0.263 28
\(T\) 2.4 1.263 38
\(T\) 4.8 2.263 48

PLA fit: - \(\hat\beta = 10\) (per \(\log_2 d\) unit). - \(\hat\alpha_S = 25\) (at \(\log_2 d = 0\)). - \(\hat\alpha_T = 25.37\) (interpolated at \(\log_2 d = 0\)). - \(\log_2 \hat\rho = (\hat\alpha_T - \hat\alpha_S) / \hat\beta = 0.37 / 10 = 0.037\).

\(\hat\rho = 2^{0.037} = 1.026\). 검정 인슐린이 표준보다 2.6% 강함.

해석: 검정 인슐린 1 IU = 표준 1.026 IU. 거의 동일 강도.

7 Python 코드

import numpy as np
import pandas as pd
import statsmodels.api as sm
from scipy import stats, optimize

np.random.seed(2026)

# 인슐린 검정 — Parallel Line Assay
n_per = 8
doses_S = [0.5, 1, 2, 4]
doses_T = [0.6, 1.2, 2.4, 4.8]
true_beta = 10
true_alpha_S = 25
# 검정 인슐린이 표준보다 1.026 배 강함 → log_2 ρ = 0.037
true_alpha_T = true_alpha_S + true_beta * 0.037

records = []
for d in doses_S:
    log_d = np.log2(d)
    mu = true_alpha_S + true_beta * log_d
    for _ in range(n_per):
        records.append({"drug": "S", "log_d": log_d, "Y": np.random.normal(mu, 3)})
for d in doses_T:
    log_d = np.log2(d)
    mu = true_alpha_T + true_beta * log_d
    for _ in range(n_per):
        records.append({"drug": "T", "log_d": log_d, "Y": np.random.normal(mu, 3)})
data = pd.DataFrame(records)

# Step 1: 평행성 검정 — 두 회귀의 기울기가 같은가?
model_full = sm.OLS(data["Y"], sm.add_constant(
    pd.concat([data[["drug", "log_d"]],
               pd.get_dummies(data["drug"], drop_first=True) * data[["log_d"]].values],
              axis=1).rename(columns={"log_d": "log_d_diff"})
)).fit()
# 더 단순한 방법: 명시적 모형
data["drug_T"] = (data["drug"] == "T").astype(int)
data["interaction"] = data["drug_T"] * data["log_d"]

# 평행 모형 (interaction 없음)
model_parallel = sm.OLS(data["Y"],
    sm.add_constant(data[["drug_T", "log_d"]])).fit()
# 비평행 모형 (interaction 포함)
model_full = sm.OLS(data["Y"],
    sm.add_constant(data[["drug_T", "log_d", "interaction"]])).fit()

# F-test for interaction (slope difference)
F_par = ((model_parallel.ssr - model_full.ssr) / 1) / model_full.mse_resid
p_par = 1 - stats.f.cdf(F_par, 1, model_full.df_resid)
print(f"=== Parallelism test ===")
print(f"F = {F_par:.3f}, p = {p_par:.4f}")
print("=> Parallel assumption OK" if p_par > 0.05 else "=> NOT parallel — use SRA or other")

# Step 2: PLA fit
print(f"\n=== Parallel Line Assay ===")
print(model_parallel.summary().tables[1])

beta_hat = model_parallel.params["log_d"]
alpha_S_hat = model_parallel.params["const"]  # drug_T = 0 인 표준
alpha_T_hat = alpha_S_hat + model_parallel.params["drug_T"]
log_rho_hat = (alpha_T_hat - alpha_S_hat) / beta_hat
rho_hat = 2**log_rho_hat

print(f"\nbeta_hat = {beta_hat:.3f}")
print(f"alpha_S = {alpha_S_hat:.3f}, alpha_T = {alpha_T_hat:.3f}")
print(f"log_2(rho) = {log_rho_hat:.4f}")
print(f"Relative potency rho = {rho_hat:.4f}")
print(f"  Test 약물의 강도가 표준의 {(rho_hat-1)*100:+.2f}% 차이")

# Step 3: Fieller's CI for log_2(rho)
# delta = alpha_T - alpha_S, var(delta), var(beta), cov(delta, beta)
cov = model_parallel.cov_params()
var_delta = cov.loc["drug_T", "drug_T"]
var_beta = cov.loc["log_d", "log_d"]
cov_db = cov.loc["drug_T", "log_d"]
delta_hat = model_parallel.params["drug_T"]

t_crit = stats.t.ppf(0.975, model_parallel.df_resid)
g = (t_crit**2 * var_beta) / beta_hat**2

if g < 1:
    # Fieller's CI
    discriminant = (var_delta * (1-g) + g * var_beta * log_rho_hat**2)
    margin = t_crit / ((1-g) * abs(beta_hat)) * np.sqrt(discriminant)
    log_rho_low = (log_rho_hat - g * cov_db / var_beta) - margin
    log_rho_high = (log_rho_hat - g * cov_db / var_beta) + margin
    print(f"\n95% Fieller CI for log_2(rho): ({log_rho_low:.4f}, {log_rho_high:.4f})")
    print(f"95% CI for rho: ({2**log_rho_low:.4f}, {2**log_rho_high:.4f})")
else:
    print(f"\ng = {g:.3f} >= 1 — Fieller CI 무한 (검정력 부족)")

8 신뢰구간의 width 가 검정 품질을 정의

직관: bio-assay 의 정밀도 = \(\rho\) 의 신뢰구간 폭

USP, USP-NF, Ph. Eur. (유럽 약전) 같은 약전 표준은 새 batch 의 강도가 표준의 \(0.95 \sim 1.05\) 범위면 합격. 즉 상대 강도의 신뢰구간이 0.95~1.05 범위 내 에 있으면 합격.

이를 위해서는: - 표본 충분 (n_S, n_T 각각 ≥ 6 dose level × ≥ 5 동물 = 30+). - \(\hat\beta\) 큼 (응답이 dose 에 민감). - 잔차 분산 작음.

설계 단계에서 g < 1 보장하도록 검정력 분석. g 가 작을수록 CI 좁음.

9 가정과 한계

  • 로그 dose 의 선형성: 위반 시 비선형 모형 (Hill equation, 4-parameter logistic).
  • Equal variance (등분산): 위반 시 가중 회귀.
  • 평행 vs 기울기비 가정: 데이터 의존.
  • Fieller’s CI 의 g < 1: 표본이 부족하면 CI 무한.
  • 외삽 위험: 두 약물의 dose 범위 외부 추정 신뢰 X.

10 응용 — 실무 사례

10.1 인슐린 표준화

USP 의 인슐린 standard 1 IU 는 정확히 정의된 양 (1 IU ≈ 0.0347 mg of recombinant human insulin). 새 batch 는 PLA 로 강도 검정 → label claim 에 표시.

10.2 비타민 D 검정

라트 bone-line test: 비타민 D 부족 라트에 비타민 D 투여, 뼈의 칼슘 침착 측정. 표준 vs 검정 비타민의 상대 강도.

10.3 디지털 매핑 — A/B Test 의 효능 추정

A/B test 가 두 변종의 평균 응답을 비교한다면, 다중 dose 시험은 PLA 의 IT 적용.

가상 사례: 광고 노출 빈도 5 수준 × 두 광고 (A, B). 각 사용자 그룹에 일정 빈도로 노출. 응답 = CTR.

PLA fit: - 광고 A: 노출 빈도가 늘수록 CTR 선형 증가. - 광고 B: 같은 패턴, 다른 절편.

상대 강도 = “광고 B 가 A 보다 몇 배 효과적인가?”

이는 A/B test 의 단일 비교를 multi-level dose 비교로 확장한 형태.

11 관련 주제

선행 지식

후속 주제

다른 카테고리 연결

12 더 읽을 거리

  • Finney, D. J. (1978). “Statistical Method in Biological Assay” (3rd ed). Charles Griffin.
  • Fieller, E. C. (1944). “A fundamental formula in the statistics of biological assay, and some applications.” Quarterly Journal of Pharmacy and Pharmacology 17: 117-123.
  • Govindarajulu, Z. (2001). “Statistical Techniques in Bioassay” (2nd ed). Karger.
  • USP General Chapter <111> “Design and Analysis of Biological Assays.”

Subscribe

Enjoy this blog? Get notified of new posts by email: