Можна використовувати тести на нормальне співвідношення ймовірності. Ось простий приклад. Спочатку давайте створимо спостереження від 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
) і будьте задоволені результатами. Для кількісної оцінки будь-яких відмінностей корисні будуть сюжети.