Tự động tìm giá trị khởi đầu tốt cho mô hình phi tuyến là một nghệ thuật. (Nó tương đối dễ dàng cho các bộ dữ liệu một lần khi bạn chỉ có thể vẽ dữ liệu và đưa ra một số dự đoán tốt một cách trực quan.) Một cách tiếp cận là tuyến tính hóa mô hình và sử dụng các ước lượng bình phương tối thiểu.
Trong trường hợp này, mô hình có dạng
E(Y)=aexp(bx)+c
cho các tham số chưa biết . Sự hiện diện của số mũ khuyến khích chúng ta sử dụng logarit - nhưng việc thêm c gây khó khăn cho việc đó. Tuy nhiên, lưu ý rằng nếu a dương thì c sẽ nhỏ hơn giá trị mong đợi nhỏ nhất của Ya,b,ccacY --và do đó có thể là một chút ít so với nhỏ nhất quan sát được giá trị của . (Nếu a có thể âm, bạn cũng sẽ phải xem xét giá trị của c lớn hơn một chút so với giá trị quan sát lớn nhất của Y. )YacY
Sau đó, chúng ta hãy quan tâm đến bằng cách sử dụng như ước tính ban đầu c 0 gì đó giống như một nửa mức tối thiểu của các quan sát y i . Mô hình bây giờ có thể được viết lại mà không có thuật ngữ phụ gia gai góc nhưcc0yi
E(Y)−c0≈aexp(bx).
Rằng chúng ta có thể lấy nhật ký của:
log(E(Y)−c0)≈log(a)+bx.
Đó là một xấp xỉ tuyến tính cho mô hình. Cả và b có thể được ước tính với bình phương nhỏ nhất.log(a)b
Đây là mã sửa đổi:
c.0 <- min(q24$cost.per.car) * 0.5
model.0 <- lm(log(cost.per.car - c.0) ~ reductions, data=q24)
start <- list(a=exp(coef(model.0)[1]), b=coef(model.0)[2], c=c.0)
model <- nls(cost.per.car ~ a * exp(b * reductions) + c, data = q24, start = start)
Đầu ra của nó (đối với dữ liệu ví dụ) là
Nonlinear regression model
model: cost.per.car ~ a * exp(b * reductions) + c
data: q24
a b c
0.003289 0.126805 48.487386
residual sum-of-squares: 2243
Number of iterations to convergence: 38
Achieved convergence tolerance: 1.374e-06
Sự hội tụ có vẻ tốt. Hãy vẽ nó:
plot(q24)
p <- coef(model)
curve(p["a"] * exp(p["b"] * x) + p["c"], lwd=2, col="Red", add=TRUE)
Nó hoạt động tốt!
Khi tự động hóa việc này, bạn có thể thực hiện một số phân tích nhanh về phần dư, chẳng hạn như so sánh cực trị của chúng với mức chênh lệch trong dữ liệu ( ). Bạn cũng có thể cần mã tương tự để đối phó với khả năng một < 0 ; Tôi để nó như một bài tập.ya<0
Một phương pháp để ước tính giá trị ban đầu dựa trên sự hiểu biết ý nghĩa của chúng, có thể được dựa trên kinh nghiệm, lý thuyết vật lý, vv Một mở rộng ví dụ về một (vừa phải khó khăn) phù hợp phi tuyến có giá trị ban đầu có thể được xác định theo cách này được mô tả trong câu trả lời của tôi tại /stats//a/15769 .
Phân tích trực quan của một biểu đồ phân tán (để xác định ước tính tham số ban đầu) được mô tả và minh họa tại /stats//a/32832 .
Trong một số trường hợp, một chuỗi các sự phù hợp phi tuyến được thực hiện trong đó bạn có thể mong đợi các giải pháp thay đổi từ từ. Trong trường hợp đó, việc sử dụng các giải pháp trước đây như là ước tính ban đầu cho các giải pháp tiếp theo thường thuận tiện (và nhanh chóng) . Tôi nhớ lại bằng cách sử dụng kỹ thuật này (không có nhận xét) tại /stats//a/63169 .