Як мені підходити нелінійну модель змішаних ефектів для даних повторних заходів за допомогою nlmer ()?


12

Я намагаюся проаналізувати дані повторних заходів і борюся за те, щоб це працювало R. Мої дані по суті такі, у мене дві групи лікування. Кожен предмет у кожній групі тестується щодня та отримує бал (відсоток правильний у тесті). Дані у довгому форматі:

Time Percent Subject   Group
   1       0    GK11 Ethanol
   2       0    GK11 Ethanol
   3       0    GK11 Ethanol
   4       0    GK11 Ethanol
   5       0    GK11 Ethanol
   6       0    GK11 Ethanol

Дані нагадують логістичну криву, суб'єкти роблять дуже погано протягом декількох днів з подальшим швидким поліпшенням, за яким йде плато. Я хотів би знати, чи впливає лікування на криву ефективності тесту. Моя думка полягала в тому, щоб використовувати nlmer()в lme4пакеті в R. Я можу встановити лінії для кожної групи, використовуючи наступне:

print(nm1 <- nlmer(Percent ~ SSlogis(Time,Asym, xmid, scal) ~ Asym | Subject,
salinedata, start = c(Asym =.60,  xmid = 23, scal = 5)), corr = FALSE)

Я можу порівняти групи, дивлячись на оцінки для різних параметрів та стандартних відхилень оціночних ліній, але я не впевнений, що це правильний спосіб зробити це. Будь-яка допомога буде дуже вдячна.

Відповіді:


4

Можна використовувати тести на нормальне співвідношення ймовірності. Ось простий приклад. Спочатку давайте створимо спостереження від 10 осіб на основі ваших параметрів:

Asym = .6
xmid = 23
scal = 5

n = 10
time = seq(1,60,5)

d = data.frame(time=rep(time,10),
               Asym, xmid, scal, group=0)
d$subj = factor(rep(1:n, each=length(time)))

Тепер нехай половина з них має різні асимптоти та параметри середньої точки:

ind = (nrow(d)/2):nrow(d)
d$Asym[ind] = d$Asym[ind] + .1
d$xmid[ind] = d$xmid[ind] + 10
d$group[ind] = 1
d$group=factor(d$group)

На основі моделі ми можемо моделювати значення відповідей для всіх осіб:

set.seed(1)
d = transform(d, y = Asym/(1+exp((xmid-time)/scal)) +
                     rnorm(nrow(d), sd=.04))
library(lattice)
xyplot(y~time | group, group=subj,
       data=d, type=c("g","l"), col="black")

Дані про спагетті

Ми можемо побачити чіткі відмінності між двома групами, відмінності, які мають бути спроможними вибрати моделі. Тепер спочатку спробуємо підігнати просту модель, ігноруючи групи:

> fm1 = nls(y ~ SSlogis(time, Asym, xmid, scal), data=d)
> coef(fm1)
      Asym       xmid       scal 
 0.6633042 28.5219166  5.8286082

Можливо, як і очікувалося, оцінки Asymі xmidзнаходяться десь між реальними значеннями параметрів для двох груп. (Що б це не було так, однак, очевидно, оскільки параметр масштабу також змінено, щоб скоригуватися для неправильної характеристики моделі.) Тепер давайте підходимо до повної моделі з різними параметрами для двох груп:

> fm2 = nls(y ~ SSlogis(time, Asym[group], xmid[group], scal[group]),
          data=d,
          start=list(Asym=rep(.6,2), xmid=rep(23,2), scal=rep(5,2)))
> coef(fm2)
    Asym1     Asym2     xmid1     xmid2     scal1     scal2 
 0.602768  0.714199 22.769315 33.331976  4.629332  4.749555

Оскільки дві моделі вкладені, ми можемо зробити тест на коефіцієнт ймовірності:

> anova(fm1, fm2)
Analysis of Variance Table

Model 1: y ~ SSlogis(time, Asym, xmid, scal)
Model 2: y ~ SSlogis(time, Asym[group], xmid[group], scal[group])
  Res.Df Res.Sum Sq Df  Sum Sq F value    Pr(>F)    
1    117    0.70968                                 
2    114    0.13934  3 0.57034  155.54 < 2.2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Надзвичайно малий p -значення чітко показує, що проста модель була занадто простою; дві групи дійсно відрізняються за своїми параметрами.

Однак, дві оцінки масштабних параметрів майже однакові, з різницею просто .1. Можливо, нам потрібен лише один параметр масштабу? (Звичайно, ми знаємо, що відповідь "так", оскільки ми моделювали дані.)

(Різниця між двома параметрами асимптоти також просто .1, але це велика різниця, коли ми враховуємо стандартні помилки - див summary(fm2).)

Отже, ми підходимо до нової моделі із загальним scaleпараметром для двох груп, але різним Asymта xmidпараметрами, як і раніше:

> fm3 = nls(y ~ SSlogis(time, Asym[group], xmid[group], scal),
          data=d,
          start=list(Asym=rep(.6,2), xmid=rep(23,2), scal=5))
> coef(fm3)
     Asym1      Asym2      xmid1      xmid2       scal 
 0.6035251  0.7129002 22.7821155 33.3080264  4.6928316

А оскільки зменшена модель вкладена в повну модель, ми можемо знову зробити тест на коефіцієнт ймовірності:

> anova(fm3, fm2)
Analysis of Variance Table

Model 1: y ~ SSlogis(time, Asym[group], xmid[group], scal)
Model 2: y ~ SSlogis(time, Asym[group], xmid[group], scal[group])
  Res.Df Res.Sum Sq Df     Sum Sq F value Pr(>F)
1    115    0.13945                             
2    114    0.13934  1 0.00010637   0.087 0.7685

Велике значення p означає, що зменшена модель підходить так само, як і повна модель, як очікувалося.

Звичайно, ми можемо зробити подібні тести, щоб перевірити, чи потрібні різні значення параметрів для просто Asym, просто xmidчи обох. З огляду на це, я не рекомендую робити поетапну регресію, як це для усунення параметрів. Натомість просто протестуйте повну модель ( fm2) проти простої моделі ( fm1) і будьте задоволені результатами. Для кількісної оцінки будь-яких відмінностей корисні будуть сюжети.


це чудова відповідь. Як би ви змінили цей аналіз, якби кілька осіб вимірювали двічі, і ви хотіли контролювати кореляцію всередині індивіда? Якщо ви можете допомогти, я буду вдячний за два центи! ( stats.stackexchange.com/questions/203040/… )
Нова

Як цей підхід порівнюється з використанням nlmer()для обліку повторних заходів щодо зразків у часі? Ви можете робити таку саму стратегію, але підходити до 1 моделі зі випадковими ефектами для subjectта groupпроти іншої моделі з випадковими ефектами subjectлише для порівняння.
Стефан Аві
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.