Sie können normale Likelihood-Ratio-Tests verwenden. Hier ist ein einfaches Beispiel. Lassen Sie uns zunächst anhand Ihrer Parameter Beobachtungen von 10 Personen erstellen:
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)))
Lassen Sie nun die Hälfte von ihnen unterschiedliche Asymptoten und Mittelpunktsparameter haben:
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)
Wir können Antwortwerte für alle Personen basierend auf dem Modell simulieren:
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")
Wir können deutliche Unterschiede zwischen den beiden Gruppen erkennen, Unterschiede, die die Modelle erkennen sollten. Versuchen wir nun zunächst, ein einfaches Modell anzupassen, wobei Gruppen ignoriert werden:
> fm1 = nls(y ~ SSlogis(time, Asym, xmid, scal), data=d)
> coef(fm1)
Asym xmid scal
0.6633042 28.5219166 5.8286082
Möglicherweise liegen die Schätzungen für Asym
und xmid
irgendwo wie erwartet irgendwo zwischen den tatsächlichen Parameterwerten für die beiden Gruppen. (Dass dies der Fall wäre, ist jedoch nicht offensichtlich, da der Skalierungsparameter ebenfalls geändert wird, um die Fehlspezifikation des Modells auszugleichen.) Nun passen wir ein vollständiges Modell mit unterschiedlichen Parametern für die beiden Gruppen an:
> 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
Da die beiden Modelle verschachtelt sind, können wir einen Likelihood-Ratio-Test durchführen:
> 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
Der extrem kleine p- Wert zeigt deutlich, dass das einfache Modell zu einfach war; die beiden Gruppen sich in ihren Parametern.
Die Schätzungen der beiden Skalenparameter sind jedoch mit einer Differenz von nur 0,1 nahezu identisch. Vielleicht brauchen wir nur einen Skalenparameter? (Natürlich wissen wir, dass die Antwort ja ist, da wir Daten simuliert haben.)
(Der Unterschied zwischen den beiden Asymptotenparametern beträgt ebenfalls nur 0,1, aber das ist ein großer Unterschied, wenn wir die Standardfehler berücksichtigen - siehe summary(fm2)
.)
So passen wir ein neues Modell, mit einem gemeinsamen scale
Parameter für die beiden Gruppen, aber anders Asym
und xmid
Parametern nach wie vor:
> 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
Und da das reduzierte Modell im vollständigen Modell verschachtelt ist, können wir erneut einen Likelihood-Ratio-Test durchführen:
> 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
Der große p- Wert zeigt an, dass das reduzierte Modell erwartungsgemäß genauso gut passt wie das vollständige Modell.
Wir können natürlich ähnliche Tests durchführen, um zu überprüfen, ob unterschiedliche Parameterwerte für just Asym
, just xmid
oder beides benötigt werden. Trotzdem würde ich nicht empfehlen , eine solche schrittweise Regression durchzuführen, um Parameter zu eliminieren. Testen Sie stattdessen einfach das vollständige Modell ( fm2
) mit dem einfachen Modell ( fm1
) und seien Sie mit den Ergebnissen zufrieden. Um Unterschiede zu quantifizieren, sind Diagramme hilfreich.
nlmer()
zu vergleichen, um wiederholte Messungen an Proben im Laufe der Zeit zu berücksichtigen? Sie könnten die gleiche Strategie anwenden, aber 1 Modell mit zufälligen Effekten fürsubject
undgroup
gegen ein anderes Modell mit zufälligen Effektensubject
nur für anpassen und vergleichen.