Bạn có thể sử dụng các xét nghiệm tỷ lệ khả năng bình thường. Đây là một ví dụ đơn giản. Trước tiên, hãy tạo quan sát từ 10 cá nhân dựa trên các tham số của bạn:
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)))
Bây giờ hãy để một nửa trong số chúng có các thông số tiệm cận và trung điểm khác nhau:
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)
Chúng tôi có thể mô phỏng các giá trị phản hồi cho tất cả các cá nhân, dựa trên mô hình:
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")
Chúng ta có thể thấy sự khác biệt rõ ràng giữa hai nhóm, sự khác biệt mà các mô hình sẽ có thể nhận được. Bây giờ, trước tiên hãy thử điều chỉnh một mô hình đơn giản , bỏ qua các nhóm:
> fm1 = nls(y ~ SSlogis(time, Asym, xmid, scal), data=d)
> coef(fm1)
Asym xmid scal
0.6633042 28.5219166 5.8286082
Có lẽ như mong đợi, các ước tính cho Asym
và xmid
nằm ở đâu đó giữa các giá trị tham số thực cho hai nhóm. (Tuy nhiên, đây sẽ là trường hợp không rõ ràng, vì tham số tỷ lệ cũng được thay đổi, để điều chỉnh cho lỗi chính tả mô hình.) Bây giờ chúng ta hãy điều chỉnh một mô hình đầy đủ , với các tham số khác nhau cho hai nhóm:
> 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
Vì hai mô hình được lồng nhau, chúng tôi có thể thực hiện kiểm tra tỷ lệ khả năng:
> 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
Giá trị p cực nhỏ cho thấy rõ rằng mô hình đơn giản quá đơn giản; Hai nhóm làm khác nhau về các tham số của họ.
Tuy nhiên, hai ước tính tham số tỷ lệ gần như giống hệt nhau, với sự khác biệt chỉ là .1. Có lẽ chúng ta chỉ cần một tham số tỷ lệ? (Tất nhiên chúng tôi biết câu trả lời là có, vì chúng tôi đã mô phỏng dữ liệu.)
(Sự khác biệt giữa hai tham số tiệm cận cũng chỉ là .1, nhưng đó là sự khác biệt lớn khi chúng tôi tính đến các lỗi tiêu chuẩn - xem summary(fm2)
.)
Vì vậy, chúng tôi phù hợp với một mô hình mới, với một scale
tham số chung cho hai nhóm, nhưng khác nhau Asym
và xmid
các tham số, như trước:
> 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
Và vì mô hình rút gọn được lồng trong mô hình đầy đủ, chúng ta lại có thể thực hiện kiểm tra tỷ lệ khả năng:
> 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
Giá trị p lớn chỉ ra rằng mô hình rút gọn phù hợp cũng như mô hình đầy đủ, như mong đợi.
Tất nhiên chúng ta có thể thực hiện các thử nghiệm tương tự để kiểm tra xem các giá trị tham số khác nhau có cần thiết cho chỉ Asym
, chỉ xmid
hoặc cả hai. Điều đó nói rằng, tôi không khuyên bạn nên thực hiện hồi quy từng bước như thế này để loại bỏ các tham số. Thay vào đó, chỉ cần kiểm tra mô hình đầy đủ ( fm2
) so với mô hình đơn giản ( fm1
) và hài lòng với kết quả. Để định lượng bất kỳ sự khác biệt, âm mưu sẽ hữu ích.