クロスオーバー試験(混合効果モデル)

1ページ 2ページ 3ページ

クロスオーバー試験の研究デザイン

クロスオーバー試験は、生物学的同等性試験や薬物動態試験で利用されています。ウォッシュアウト期間の設定がとても大切で、治療効果が無くなるのを十分に待つことになります。このデザインはリハビリテーション研究でも利用されていますが、持ち越し効果時期効果が十分に吟味されず、間違った使い方をしているものも見られます。これらの効果はP値に直接関連してきますので、十分に注意しましょう。ここでは、折笠(2016)のなかにあるサンプルデータを使用して、同じ解析結果をRで算出してみます。FEVの値をpointとして、有意水準は5%で検定します。

2群2期のクロスオーバーデザイン、2×2 デザイン、AB/BA デザイン と呼ばれています

ランダム割り付け(s1, s2)

以下、 $ Y_{ij} $ という標記を使います(2×2の行列と考えてください)

$ Y_{11} =\ $s1群、I期(治療A)
$ Y_{12} =\ $s1群、II期(治療B)
$ Y_{21} =\ $s2群、I期(治療B)
$ Y_{22} =\ $s2群、II期(治療A)

データの準備と要約

使用するパッケージ(パッケージのインストール

R
library(lmerTest)
library(exactRankTests)
library(dplyr)

データセット crossover をdataに格納します(ファイルの読み込み

R
data <- read.csv("crossover.csv", header=T, fileEncoding = "UTF-8")
head(data)

sequence: s1群(A→B)、s2群(B→A)
period:
I期、II期
treatment:
治療A、治療B
point:
アウトカム

IDを名義尺度に変換

R
data$ID <- factor(data$ID)

重要
名義変数(カテゴリカル変数)を factor() 関数を使用して因子型変数に変換することで、そのデータの値(カテゴリー)は「水準」(levels)として定義されます。数字であれば若い数、アルファベットはAに近い文字が基準カテゴリー(参照カテゴリー)となります。基準カテゴリーは、統計モデルでの比較の基点として機能します。t検定では、II-IやB-Aのように基準カテゴリーを引いた値が出力されます。水準は、levels関数で確認できます。

名義変数をfactor() 関数を使用して因子型変数に変換して、levels()関数で基準を調べてみます(最初に書いてある文字が基準カテゴリーとなります)。

R
data$period <- factor(data$period)
data$treatment <- factor(data$treatment)
levels(data$period)
levels(data$treatment)

折笠(2016)ではI-IIやA-Bの解を出力しています。参考文献に合わせて、名義変数の基準カテゴリーを変更します。

R
data$period <- relevel(data$period, "II")
data$treatment <- relevel(data$treatment, "B")
levels(data$period)
levels(data$treatment)

Y11, Y21, Y12, Y22のデータの要約
各条件に対応するデータを抽出し、サマリーを表示

R
variables <- c("Y11", "Y21", "Y12", "Y22")
sequences <- c("s1", "s2", "s1", "s2")
treatments <- c("A", "B", "B", "A")

for (i in seq_along(variables)) {
  assign(variables[i], data[data$sequence == sequences[i] & data$treatment == treatments[i], "point"])
  print(paste("Summary of", variables[i], ":"))
  print(summary(get(variables[i])))
}

箱ひげ図

R
name <- c("Y11", "Y21", "Y12", "Y22")
boxplot(Y11, Y21, Y12, Y22, xaxt="n")
axis(side=1, at=1:4, labels=name) 

参考文献(折笠 2016)の図3の描き方

R
fig <- function() {
    # Set up the plot with no x-axis labels yet and a pre-defined limit on x and y axes
    plot(
        c(0.8, 1.2, 1.8, 2.2),
        c(mean(Y11), mean(Y21), mean(Y12), mean(Y22)),
        xlab = "", ylab = "",
        ylim = c(0.5,3.5), xlim = c(0.5, 2.5),
        xaxt = "n", pch = 19, cex = 1.5  # Adjust the point character and size
    )

    # Add labels directly to the plot above each point
    text(0.8, mean(Y11) + 0.2, "Y11", cex = 0.8, pos = 3)
    text(1.2, mean(Y21) + 0.2, "Y21", cex = 0.8, pos = 3)
    text(1.8, mean(Y12) + 0.2, "Y12", cex = 0.8, pos = 3)
    text(2.2, mean(Y22) + 0.2, "Y22", cex = 0.8, pos = 3)

    # Define period names and set the axis with these names
    name <- c("Period I", "Period II")
    axis(side = 1, at = c(1.1, 1.9), labels = name)
}

fig()

   

stm <- function(x) sd(x)/sqrt(length(x))

arrows(
    c(0.8, 1.2, 1.8, 2.2), 
    c(
        mean(Y11) - stm(Y11), 
        mean(Y21) - stm(Y21), 
        mean(Y12) - stm(Y12),
        mean(Y22) - stm(Y22)
    ),

    c(0.8, 1.2, 1.8, 2.2), 
    c(
        mean(Y11) + stm(Y11), 
        mean(Y21) + stm(Y21), 
        mean(Y12) + stm(Y12),
        mean(Y22) + stm(Y22)
    ),
    code=3, angle=90
)
クロスオーバー試験で想定している結果

対象者を各順序群に無作為に割り付けることで、両群の治療Aと治療Bのが同じくらいになることを想定しています。

コメント欄 『間違い』や『分かりにくい部分』などのご意見もお寄せください

タイトルとURLをコピーしました