クロスオーバーデザインは、試験の途中で介入をスワップする方法です。
例えば、対照薬と治療薬(被験薬)があったとして、A群とB群で比較したいとします。
一般的な比較であれば、例えば、A群は対照薬群、B群は治療薬群として2群に無作為にわけて、評価項目を検定します。これは平行群間のデザインです。
クロスオーバーデザインでは、A群の治療の前半で対照薬、後半で治療薬、B群の治療の前半で治療薬、後半で対照薬という具合に、介入を入れ替えます。
この図では2群を例にしていますが、多群でも用いられます。
多群にする場合は、種類の異なる複数の対照薬を用いる場合や、相互作用を考えたい介入の種類が増えた場合などに利用されます。
クロスオーバーデザインのメリット
・同一対象者に対して、対照薬と治療薬の比較ができる。
・対象となる薬剤の効果を個人ごとに比較できるため、統計モデル作成時に、治療効果の個体差をランダムな要因として捉えることができる。
・全対象者が治療薬での治療を受けられるので倫理面の問題が起こりにくい。
クロスオーバー法のデメリット
・先に投与した薬が被験者の体内に残っている場合、休薬期間を置いたとしても、正確な結果を得られないことがある(被験者の脱落が起こり得る)。
・ウォッシュアウト期間(体内から薬の成分を抜くための休薬期間)が必要となるため、試験期間は多少長くなる。
・先に投与した薬の作用により、次の薬が投与できなくなってしまう)ことがある
クロスオーバー試験で知りたいことは、治療薬の治療効果が対照薬に比べて同等であったかどうかです。
同等であった場合は、有効性は示せなかったということになります。
同等でなかった場合、評価項目が対照薬に比べて良くなっていれば、有効性が示せたということになり、逆に、評価項目が対照薬に比べて悪くなっていれば、有効性は示せなかったということになります。
クロスオーバー試験の介入の要因と効果
クロスオーバー試験では、平行群間試験のように、「単純な群間比較として」、A群とB群とを比べることが出来ません。
ここで知りたいことは、任意の被験者ごとに、評価項目と治療の種類の関係がどうなるかです。
群ごとの違いはもちろんですが、薬の種類、期間の違いによっても、評価項目への影響を分けて考えられるはずです。
このように、あらかじめどのような影響を結果に与えそうか分かっている要因は固定効果と呼ばれます。
固定効果は、説明変数と相関を持ちそうかどうかで決まります。
例えば、群の比較では、変わらなそうであるとか、薬の種類ごとの治療効果の違いはありそうとか、期間を前半と後半で分けて比較したら変わらなそうであるという具合です。
ここで、もう一つ考慮しなければならないものに被験者の違いがあります。
しかし、被験者の効果は全く予測できません。あの被験者だから治療結果は良くなるということはこの時点では予想できません。まったくランダムな効果です。
このような効果は、変量効果と呼ばれます。
変量効果は、固定効果と違って、説明変数との相関がないと解釈されます。
これらの、群、治療種類(薬の種類)、期間(前半・後半)、被験者という要因から、評価項目を予測するような統計モデルを作成すれば、固定効果ごとの予測結果を比較することで検定が行えます。
混合効果モデル(Mixed effect model)
混合効果モデルは、固定効果(fixed effect)と変量効果(random
effect)を勘案しながら、目的変数を求めるための線形予測モデルです。
線形と名に付いていますが、非線形にフィットした関数として利用されることもあります。
単純な線形回帰モデルとは異なり、固定効果と、変量効果の要因を考えて、当てはまりの良い予測モデルを探索します。
標準形式を示します。
\[ y = X\beta + Zb + \epsilon \]
y は目的変数、n は観測数です。
X は n 行 p 列の固定効果行列(固定効果とした説明変数)です。
β は p 行 1 列の固定効果による傾きです。
Z は n 行 q 列の変量効果行列(変量効果とした説明変数)です。
b は q 行 1 列の変量効果による切片です。
ε は n 行 1 列の観測誤差です。
\(X\beta\)は、固定効果項、\(Zb\)は、変量効果項です。
実際には、グループや、固定効果、変量効果によってもう少し複雑な式になります。
プログラムから利用する際は、固定効果と変量効果の数式を定義します。
固定効果や変量効果の組み合わせや、変量効果の傾きと切片の取扱いによって、パターンが変わります。
次の例では、「群、治療の種類(薬の種類)、期間のデータから、目的変数を予測するための回帰関数の切片や傾きを求めるが、ここで決められた切片や傾きは被験者ごとにランダムに変動する(被験者を変量効果とし、傾きをそれぞれで求める:(1|subject))」という意味になります。
\[ y \ , \tilde \ , group + treat + period + (1|subject)\]
実践
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
# AUC(血中濃度-時間曲線下面積、area under the blood concentration-time curve)
# https://drive.google.com/file/d/1HKFlozBu9EVHftU_wCuk_37foI5TWL9Y/view?usp=sharing
# データをダウンロードします
!curl -L -o "crossover-lmer.csv" "https://drive.google.com/uc?export=download&id=1HKFlozBu9EVHftU_wCuk_37foI5TWL9Y"
# データを読み込みます
import pandas as pd
data = pd.read_csv(filepath_or_buffer="crossover-lmer.csv", names=["subj","group","period","treat","auc"], encoding="utf-8")
data["log_auc"] = np.log(data["auc"])# 対数変換します
print(data.head())
data.describe()
'''
2021/2/15
https://www.statsmodels.org/stable/examples/notebooks/generated/mixed_lm_example.html
https://www.statsmodels.org/stable/generated/statsmodels.regression.mixed_linear_model.MixedLM.from_formula.html
'''
# formula = 従属変数 ~ 固定効果として設定する独立変数 ... + (変量効果として設定する独立変数)...
# formula = "log_auc ~ group + period + treat + (1|subj)" # (1|subj)としてsubjを傾きのrandom effとして指定する例
# 相関がありそうなものを+で繋ぐ。
formula = "log_auc ~ group + period + treat" # 固定効果(+は、交互効果を加味しないという意味。加味する場合は*を使う。)
# vc_formulaは傾きを変量効果とする項目を指定する。
# 1+val_name, or 1+C(category_val_name)
# 1+ ~は、ランダム切片を使う。0+ ~は、切片を固定。
vc = {"subj": "1 + C(subj)"}
# re_formulaはランダムな切片を利用する項目(共変量)を指定する。デフォルトは1:すべてランダムな切片を設定する
re = "1" # eg, "1 + period"
md = smf.mixedlm(formula=formula,data=data, vc_formula=vc, re_formula=re, groups=data["group"])
mdf = md.fit(method=["lbfgs"]) # lbfgs - A more memory-efficient (limited memory) implementation of bfgs. Scipy’s fmin_l_bfgs_b.
print(mdf.summary()) # treat pv = 0.244
treat(薬剤の違い)の項目を見ると、p値は0.244で、差はないと解釈できます。
References
- http://www.lowtem.hokudai.ac.jp/plantecol/akihiro/obenkyou/GLMMexample.pdf
- https://jp.mathworks.com/help/stats/linear-mixed-effects-models.html
- https://www.statsmodels.org/stable/examples/notebooks/generated/mixed_lm_example.html