これは成長モデルのシナリオのようです。次の変数があるとします。
occasion
:値をとる1
、2
、3
、4
、5
、テストが行われたことを契機を反映する1
最初の、またはベースラインです。
ID
:各参加者の識別子。
score
:このテスト機会におけるこの参加者のテストスコア。
のランダムインターセプトID
は、さまざまなベースラインを処理します(十分な参加者がいることを条件とします)。
したがって、これらのデータの単純な線形混合効果モデルは次のlme4
とおりです(構文を使用):
score ~ occasion + (1|ID)
または
score ~ occasion + (occasion|ID)
後者では、参加者間で機会の直線的な傾きを変えることができます
ただし、OPの特定の例では、score
変数がテストの最大スコアによって制限されるという追加の問題があります。これを可能にするには、非線形成長に対応する必要があります。これはさまざまな方法で実現できますが、最も簡単なのは、モデルに2次項と3次項を追加することです。
score ~ occasion + I(occasion^2) + I(occasion^3) + (1|ID)
おもちゃの例を見てみましょう:
require(lme4)
require(ggplot2)
dt2 <- structure(list(occasion = c(0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4), score = c(55.5, 74.5, 92.5, 97.5, 98.5, 54.5, 81.5, 94.5, 97.5, 98.5, 47.5, 68.5, 86.5, 96.5, 98.5, 56.5, 86.5, 91.5, 97.5, 98.5, 60.5, 84.5, 95.5, 97.5, 99.5, 73.5, 87.5, 96.5, 98.5, 99.5), ID = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), .Label = c("1", "2", "3", "4", "5", "6"), class = "factor")), .Names = c("occasion", "score", "ID"), row.names = c(25L, 26L, 27L, 28L, 29L, 31L, 32L, 33L, 34L, 35L, 37L, 38L, 39L, 40L, 41L, 43L, 44L, 45L, 46L, 47L, 49L, 50L, 51L, 52L, 53L, 55L, 56L, 57L, 58L, 59L), class = "data.frame")
m1 <- lmer(score~occasion+(1|ID),data=dt2)
fun1 <- function(x) fixef(m1)[1] + fixef(m1)[2]*x
ggplot(dt2,aes(x=occasion,y=score, color=ID)) + geom_line(size=0.65) + geom_point() +
stat_function(fun=fun1, geom="line", size=1, colour="black")
ここでは、5回連続して測定された6人の参加者のプロットがあり、黒い実線で固定効果をプロットしています。明らかに、これはこれらのデータに適したモデルではないため、データを中央揃えして共線性を低減した後、2次項、次に3次項を導入します。
dt2$occasion <- dt2$occasion - mean(dt2$occasion)
m2 <- lmer(score~occasion + I(occasion^2) + (1|ID),data=dt2)
fun2 <- function(x) fixef(m2)[1] + fixef(m2)[2]*x + fixef(m2)[3]*(x^2)
m3 <- lmer(score~occasion + I(occasion^2) + I(occasion^3) + (1|ID),data=dt2)
fun3 <- function(x) fixef(m3)[1] + fixef(m3)[2]*x + fixef(m3)[3]*(x^2) + fixef(m3)[4]*(x^3)
p2 <- ggplot(dt2,aes(x=occasion,y=score, color=ID)) + geom_line(size=0.5) + geom_point()
p2 + stat_function(fun=fun2, geom="line", size=1, colour="black")
ここで、2次モデルは線形のみのモデルよりも明らかに改善されていますが、最終測定のスコアを過小評価し、以前のモデルの過大評価のため、理想的ではありません。
一方、3次モデルは非常にうまく機能しているように見えます。
p2 + stat_function(fun=fun3, geom="line", size=1, colour="black")
もう少し洗練されたアプローチは、上限を明示的に認識し、(たとえば)ロジスティック成長曲線モデルを使用することです。これを達成する1つの方法は、結果を(上限の)比率に変換し、たとえばとし、この比率のロジットを線形混合効果モデルの結果としてモデル化することです。 。上限を認識することに加えて、これには、変換されていないデータの残差の不均一性をモデル化するという追加の利点があります。これは、連続するテスト(結果がより良くなると想定)にわたって分散が少なくなる可能性があるためです。ππ/(1-π)
これを実際に実行すると、予想どおり、データの全体的な傾向が非常によくモデル化されます。
pi <- dt2$score/100
dt2$logitpi <- log(pi/(1-pi))
m0 <- lmer(logitpi~occasion+(1|ID),data=dt2)
funlogis <- function(x) 100*exp(fixef(m0)[1] + fixef(m0)[2]*x)/(1+exp(fixef(m0)[1] + fixef(m0)[2]*x))
p2 + stat_function(fun=funlogis, geom="line", size=0.5, colour="black")
以下は、一緒にプロットされた3次モードとロジスティック成長モデルを示していますが、両者の違いはほとんどありませんが、前述のように、不等分散性の問題のためにロジスティック成長モデルを選択する場合があります。
p2 + stat_function(fun=fun3, geom="line", size=1, colour="black") +
stat_function(fun=funlogis, geom="line", size=1, colour="blue")
さらに洗練されたアプローチは、ロジスティック成長曲線が明示的にモデル化される非線形混合効果モデルを使用して、ロジスティック関数自体のパラメーターをランダムに変化させることです。